基于bitmap 位图格式创建一个纹理(texture)

25 篇文章 0 订阅


public int createTexture(Bitmap bmptexture) {
  int []  mTextures = new int[1];
    GLES20.glGenTextures(1, mTextures, 0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
            GLES20.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
            GLES20.GL_CLAMP_TO_EDGE);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
            GLES20.GL_NEAREST);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
            GLES20.GL_NEAREST);
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmptexture, 0);//通过bmp 图像填充这个纹理对象
    bmptexture.recycle();
    int mTextures[0];
}

创建好纹理对象后,怎么贴到一个对象中去,那就是后续需要考虑的事情。

比如贴到一个长方形,一个球形等上面去。

这个时候就要把这张纹理划分为多个顶点,这些顶点要匹配上上方形,或球形。也就是一样多的顶点,一样的划分方式。

OpenGL中封装一个用于绘制24位位图(通常指RGB图像,每个像素由红、绿、蓝三个分量组成,每分量占用8位)的类,通常需要以下几个步骤: 1. **包含头文件**:首先,你需要包括`GL/glut.h`(OpenGL Utility Toolkit库),以及处理纹理的`GL/gl.h`和`GL/glext.h`。 ```c++ #include <GL/glut.h> #include <GL/gl.h> #include <GL/glext.h> ``` 2. **创建纹理**:定义一个函数来加载并创建纹理对象,通常会读取位图数据并将其转换为OpenGL可以理解的形式。 ```c++ GLuint load_bitmap_texture(const char* filename) { // ... 从文件中读取位图数据,然后创建纹理 } ``` 3. **设置纹理参数**:将纹理上传到GPU,并设置其参数以便于渲染。 ```c++ void set_texture_parameters(GLuint texture) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } ``` 4. **绘制函数**:在这个函数里,你可以接受一个位图纹理ID作为参数,然后通过指定顶点坐标和纹理坐标的数组来绘制矩形区域。 ```c++ void draw_bitmap(GLuint texture, const float vertices[]) { glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex2fv(&vertices[0]); glTexCoord2f(1.0, 0.0); glVertex2fv(&vertices[2]); glTexCoord2f(1.0, 1.0); glVertex2fv(&vertices[4]); glTexCoord2f(0.0, 1.0); glVertex2fv(&vertices[6]); glEnd(); } ``` 5. **释放资源**:记得在不需要的时候销毁纹理和清除内存。 ```c++ void cleanup() { if (texture != 0) { glDeleteTextures(1, &texture); texture = 0; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值