关于OpenGL 2D纹理贴图的经验总结,
来源:互联网 发布:网络选修课李肖鸣答案 编辑:程序博客网 时间:2024/05/18 12:39
今儿在搞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初始化步骤
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纹理贴图的经验总结,
- 关于OpenGL 2D纹理贴图的经验总结
- opengl 关于纹理贴图
- 关于openGL纹理贴图的一些函数
- openGL学习笔记6 bmp 2D纹理贴图
- OpenGL ES绘制3D纹理贴图
- 改造的opengl纹理贴图
- opengl纹理贴图的模式
- 关于OpenGL的贴图
- Qt中使用OpenGL的纹理贴图
- OpenGL纹理贴图 旋转的立方体
- OpenGL纹理贴图纠结的步骤
- OpenGL纹理贴图的相关知识
- opengl纹理贴图是黑白的原因
- OpenGL的几何变换-纹理贴图
- OpenGL纹理贴图 JPEG纹理
- OpenGL纹理贴图 JPEG纹理
- OpenGL之纹理贴图(2):Texture Objects
- python多个版本的共存问题
- 数字签名和数字证书解释
- Windows下架设本机上Subversion服务器
- mp3比特池技术
- My97日期控件
- 关于OpenGL 2D纹理贴图的经验总结,
- 分页存储过程
- 引用 Weka学习五(ROC简介)
- 各大银行的软件开发中心
- java的回调函数
- SELECT 查询
- struts2提交list
- js 解决 div无法覆盖select控件的方法 (IE8之前的浏览器)
- 我看好金融IT业的几个理由