关于OpenGL 2D纹理贴图的经验总结,
2011-09-07 17:27
471 查看
今儿在搞OpenGL想让一个2D图片在win32环境下通过openGL显示出来。
流程大体是这样的。
1.用libpng将一个png图的各种结构读出来,自建的一个CImage类里面。
成员函数包括ImageWidth, ImageHeight, p_imgData.
2.再在Texture2D里面通过自写的一个initWithImage函数,解析这个图片资源。
大约步骤包括
1)解析该图片资源的格式为RGBA8888 or RGB888 or RGB565 ........
2 ) 之后根据不同的格式转换其p_imageData到一个openGL可识别的data数组。
3 ) 通过如下函数GetTextureSize生成一个纹理的宽和高,主要是去掉奇数宽高值
4) 进入openGL初始化步骤
3.OpenGL初始化步骤
4.之后这个Texture就绑定了这个纹理了。
之后在渲染的时候,渲染这个纹理即可,步骤如下。
创建一个矩形图形,绑定该纹理。
之后通过
流程大体是这样的。
1.用libpng将一个png图的各种结构读出来,自建的一个CImage类里面。
成员函数包括ImageWidth, ImageHeight, p_imgData.
2.再在Texture2D里面通过自写的一个initWithImage函数,解析这个图片资源。
大约步骤包括
1)解析该图片资源的格式为RGBA8888 or RGB888 or RGB565 ........
2 ) 之后根据不同的格式转换其p_imageData到一个openGL可识别的data数组。
3 ) 通过如下函数GetTextureSize生成一个纹理的宽和高,主要是去掉奇数宽高值
4) 进入openGL初始化步骤
3.OpenGL初始化步骤
glEnable(GL_TEXTURE_2D);//开启openGL 2D 纹理 GLint saveName; glGenTextures(1, &_name);//告诉OpenGL生成一个纹理ID,注意刚才一直在这吃亏,这个操作必须在wglMakeCurrent之后。否则_name将获得不到ID值 glBindTexture(GL_TEXTURE_2D, _name);//将该纹理绑定为一个2D纹理 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); //printf("mem %d\n",g_totalTextureMem/1024); switch(pixelFormat) { case kTexture2DPixelFormat_RGBA8888: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_w, tex_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); _textureMem = tex_w * tex_h * 4; break; case kTexture2DPixelFormat_RGBA4444: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_w, tex_h, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data); _textureMem = tex_w * tex_h * 2; break; case kTexture2DPixelFormat_RGBA5551: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_w, tex_h, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, data); break; case kTexture2DPixelFormat_RGB565: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex_w, tex_h, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data); break; case kTexture2DPixelFormat_RGB888: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex_w, tex_h, 0, GL_RGB, GL_UNSIGNED_BYTE, data); _textureMem = tex_w * tex_h * 3; break; case kTexture2DPixelFormat_L8: glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, tex_w, tex_h, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data); break; case kTexture2DPixelFormat_A8: glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, tex_w, tex_h, 0, GL_ALPHA, GL_UNSIGNED_BYTE, data); break; case kTexture2DPixelFormat_LA88: glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, tex_w, tex_h, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, data); break; default: break; } glBindTexture(GL_TEXTURE_2D, saveName); _img_w = img_w; _img_h = img_h; _width = tex_w; _height = tex_h; _format = pixelFormat; glDisable(GL_TEXTURE_2D);
4.之后这个Texture就绑定了这个纹理了。
之后在渲染的时候,渲染这个纹理即可,步骤如下。
创建一个矩形图形,绑定该纹理。
glBindTexture(GL_TEXTURE_2D, m_currentTexture);
之后通过
glVertexPointer(3, GL_SHORT, 0, _buffer_vertex_coord); glDrawArrays(GL_TRIANGLE_STRIP, 0, total);将其绘制出来即可。
相关文章推荐
- 关于OpenGL 2D纹理贴图的经验总结
- 关于大四上学期的计算机图形学实验报告123——opengl建模、载入OBJ文件、纹理贴图、光照、交互。
- [OpenGL]纹理贴图实现 总结
- openGL学习笔记6 bmp 2D纹理贴图
- opengl 关于纹理贴图
- 关于openGL纹理贴图的一些函数
- [OpenGL]纹理贴图实现 总结
- OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
- 关于unity3d纹理贴图的学习总结
- OpenGL中纹理贴图总结
- WINCE应用层设计经验总结-关于当前时间显示和当前时间获取
- 总结关于找工作的20条经验
- 处女项目后关于IC验证经验的总结
- 关于ASP.NET在IIS一些问题的经验总结
- 关于openGL, openGL ES, openVG及android中2D调用关系的报告
- 【C#/OpenGL】CSGL中2D纹理加载PNG等透明图片显示的黑边问题
- OpenGL系统设计-纹理贴图(1)
- 关于学习CCNA的一点经验总结
- 这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享! .
- OpenGL基本概念入门5——纹理贴图2