今天主要讲下纹理的使用原理,并不涉及完整代码,想要完整代码的在我的OpenGL ES相关文章中有。
纹理的概念
纹理定义了物体表面的结构,如花纹,图案,皱纹等等。有了纹理,模型世界才会更加丰富多彩。如一个球形模型,我们给其映射足球的纹理,这就是一个足球,给其映射地球纹理,就是一个地球。另外,如果给一个四边形映射一个墙的纹理,这边是墙,否则,我们需要一块砖一块砖的构建在本节中,我们所指的是狭义的纹理: 图像纹理(对应的有函数纹理—用数学函数来定义的纹理)。
纹理实际上是一个二维数组,其元素是一些颜色值,每一元素称之为纹理像素(texel)。 纹理对象是一个内部数据类型,存储着纹理数据。你不能直接访问纹理对象,但是可以通过一个整数的ID 来作为其句柄跟踪之。通过此句柄,你可以作为当前使用的纹理(称之为纹理绑定),也可以从内存中删除这个纹理对象,还可以为一的纹理赋值(将一些纹理数据加载到关联的纹理中,称之为指定纹理)。
通常一个纹理映射的步骤是:
1、创建纹理对象。就是获得一个新的纹理句柄 ID.
2、指定纹理。就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中。
3、设定过滤器。定义了opengl现实图像的效果,如纹理放大时的马赛克消除。
4、绑定纹理对象。就是将 ID 的纹理作为下面操作的纹理。
5、纹理映射。将已绑定纹理的数据绘制到屏幕上去,在这一步,就能看到贴图的效果了。
纹理坐标 和 纹理映射
一个纹理对象有其自己的一套坐标系,左下角是 (0,0) 右上角是 (1,1)
我们要将一个图像的一部分绘制到屏幕上,称之为纹理映射, 就是将图像根据上述坐标系计算出要绘制的部分的各个点的纹理坐标,然后一一对应到屏幕上的坐标中去(下图中的坐标系是左上角为原点的)