一、基础概念
(1)纹理贴图
纹理贴图允许把一幅砖墙图像映射到一个多边形的表面上,并把整面砖墙画成单个多边形。纹理贴图能够保证当这个多边形进行变换和渲染时,映射到多边形表面的图像也能够表现出正确的行为。
它是一个相当大的主题,并且具有相当程度的复杂性。在使用纹理贴图时,必须做出一些编程选择。初学者很可能会本能地把纹理理解成二维图像,但是纹理也可以是一维的,甚至是三维的。可以把纹理映射到由一个多边形构成的表面上,也可以把它贴到曲面上,还可以在一个、二个或三个方向上(取决于纹理的维度)重复应用同一个纹理来覆盖整个表面。另外,可以把纹理图像自动映射到物体上,用它表示被观察物体的轮廓线或者其他属性。有光泽的物体也可以进行纹理贴图,当它们位于房间或其他环境的中央时,它们的表面就可以反射周围的物体。最后,纹理也可以按不同的方式应用到物体的表面。它可以直接画到物体的表面(就像表面上的贴花一样),调整表面的颜色。或者,把纹理颜色与表面颜色进行混合。
简单地说,纹理就是矩形的数据数组。例如,颜色数据、亮度数据、颜色和alpha数据。纹理数组中的单个值常常成为纹理单元(texel)。纹理贴图之所以复杂,是因为矩形纹理可以映射到非矩形区域,并且以合理方式实现。
(2)坐标系
如图所示,OpenGL世界坐标系和纹理坐标系的对应关系,所以纹理的顶点和世界坐标的顶点之间的对应关系如下:
private static final float VERTICES[] = {
-1.0f, -1.0f,
1.0f, -