打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
OpenGL 简单纹理操作

1. 启用纹理

glEnable(GL_TEXTURE_2D)

 

2.加载纹理

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0,GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels);

第一个参数为指定的目标;第二个参数为“多重细节层次”;第三个参数为颜色分量数目;第四、五个参数是二维纹理像素的宽度和高度;第六个参数是纹理边框的大小;第七个参数表示读取的内容;第八个参数表示读取的内容保存到内存时所使用的格式;第九个参数表示一个指针,像素数据被读取后,将被保存到这个指针所表示的地址。

 

3. 纹理坐标

以二维纹理为例,规定纹理最左下角的坐标为(0, 0),最右上角的坐标为(1, 1)

glTexCoord2f(0.0f, 0.0f);指定使用(0, 0)纹理坐标。

 

4.纹理参数

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT);

GL_TEXTURE_MAG_FILTER:指当纹理图象被使用到一个大于它的形状上时。可选参数(GL_NEAREST和GL_LINEAR,前者表示“使用纹理中坐标最接近的一个像素的颜色作为需要绘制的像素颜色”,后者表示“使用纹理中坐标最接近的若干个颜色,通过加权平均算法得到需要绘制的像素颜色”)

GL_TEXTURE_MIN_FILTER:指当纹理图象被使用到一个小于(或等于)它的形状上时,可选参数(GL_NEAREST,GL_LINEAR,GL_NEAREST_MIPMAP_NEAREST,GL_NEAREST_MIPMAP_LINEAR,GL_LINEAR_MIPMAP_NEAREST和GL_LINEAR_MIPMAP_LINEAR)

GL_TEXTURE_WRAP_S/GL_TEXTURE_WRAP_T:指当纹理坐标的第一维坐标值大于1.0或小于0.0时,可选参数(GL_CLAMP和GL_REPEAT,前者表示“截断”,即超过1.0的按1.0处理,不足0.0的按0.0处理。后者表示“重复”,即对坐标值加上一个合适的整数(可以是正数或负数),得到一个在[0.0,1.0]范围内的值,然后用这个值作为新的纹理坐标。)

 

5.纹理对象

纹理对象:我们可以把每一幅纹理(包括纹理的像素数据、纹理大小等信息,也包括了纹理参数)放到一个纹理对象中,通过创建多个纹理对象来达到同时保存多幅纹理的目的。这样一来,在第一次使用纹理前,把所有的纹理都载入,然后在绘制时只需要指明究竟使用哪一个纹理对象就可以了。

1)分配纹理对象编号

GLuint texture_ID_list[5];

glGenTextures(5, texture_ID_list); // 分配5个纹理对象的编号

2)绑定对象

glBindTexture函数来指定“当前所使用的纹理对象”

glBindTexture(GL_TEXTURE_2D,texture_ID_1);第一个参数是需要使用纹理的目标,因为我们现在只学习二维纹理,所以指定为GL_TEXTURE_2D,第二个参数是所使用的纹理的编号。

结论:在使用时只需要调用glBindTexture函数,在不同纹理之间进行切换,而不需要反复载入纹理,因此动画的绘制速度会有非常明显的提升。

 

实例:http://blog.csdn.net/xiajun07061225/article/details/7339099

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
纹理
OpenGL学习脚印: 二维纹理映射(2D textures)
NeHe OpenGL第二十二课:凹凸映射
OpenGL如何给模型贴纹理
glGetUniformLocation glUniform1i glActiveTexture
OpenGL 超级宝典(第五版) 源代码的问题(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服