7.1 理解纹理(Understanding Textures)
在OpenGL中纹理可以用来代表图形、图像或者程序生成的数据,每一个二维的纹理都是由我们之前讨论过的类似于片元或者像素的许多的像素元素组成,最普通的使用纹理的方法是直接从文件中加载一个图像。
我们将会使用如下所示的一张图片作为纹理并显示为桌面的表面。
这里推荐把纹理图片储存在项目的目录/res/drawable-nodpi/下面。
每一个二维的纹理都有它自己的坐标空间,范围从(0,0)到(1,1),按照约定一个维度叫做S而另外一个叫做T;当我们想要给三角形设置纹理的时候,为了让OpenGL知道哪一部分纹理应该绘制到三角形的哪一部分,我们需要对每一个顶点指定对应的纹理坐标;这些纹理坐标有时候也称为UV纹理坐标,如下图所示:
对于OpenGL来说纹理映射并没有默认的贴图方向,因为我们可以使用不同的纹理坐标去映射不同的场景坐标,这样的效果使得使用不同的纹理坐标就会造成不同的旋转角度。然而对于大部分电脑图像来说却有着默认的方向,一般来说都是y轴向下,如下图所示;对于当前来说这并不会引起什么问题,只是需要注意如果想要显示正确的图片方向就需要把这个因素考虑过进去就可以了。
在标准的OpenGL ES 2.0里面,纹理并不一定需要是方形的,但是每一维度的大小必须是2的幂次方(POT----Power of two),这意味着每一个维度的大小是类似于128、256、512等等;因为是因为非2的幂次方的纹理在使用中是非常受限的,而2的幂次方的纹理对于所有的情况都适用。
而对于所支持的最大纹理也因不同的实现而有所差别,但通常都是比较大的值,比如:2048 x 2048。
下一节我们将学习如何把纹理加载到OpenGL中(点击进入下一节)。