什么是纹理坐标?
要使用纹理绘制图元,我们必须在绘制每个顶点之前为该顶点指定纹理坐标,图元的每个顶点各自对应纹理坐标,用来标明该从纹理图像的哪个部分采样(采样:采集片段颜色),之后在图形的其它片段上进行片段插值(Fragment Interpolation)。
纹理坐标系和顶点坐标系
2D纹理坐标在x和y轴上,范围为0到1之间。使用纹理坐标获取纹理颜色叫做采样(Sampling)。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角。
顶点坐标系的(0,0)点是位于窗口中心的,所以和纹理坐标系是不同的,映射有方向的纹理图片要注意翻转问题。
无方向性的纹理
有方向性的纹理
在方向重要的情况下,是不能随意变换角度的。
3D纹理
纹理通常是2D的图片,那么把一张二维的图片映射到三维的坐标空间去,也就是为每一个3d顶点找到其相应的纹理像素。
要想实现这样的目标,显然需要先把3D模型展开为2D的平面,然后才可以和2D贴图建立对等的映射关系。
纹理坐标映射实例映射金字塔
如上图,金字塔底部四边形 = 三角形Y + 三角形X
假设坐标原点在底部正中心(vApex的垂直线与底部平面相交的点)
顶点坐标
X的坐标如下:
vBackLeft(-1.0, -1.0, -1.0)
vBackRight(1.0, -1.0, -1.0)
vFrontRight(1.0, -1.0, 1.0)
Y的坐标如下:
vBackLeft(-1.0, -1.0, -1.0)
vFrontLeft(-1.0, -1.0, 1.0)
vFrontRight(1.0, -1.0, 1.0)
纹理坐标(参照上图的s,t,r纹理坐标系那张图,如果不理解需要细细体会)
X的2D纹理坐标如下:
vBackRight(0.0,1.0,0.0)
vFrontRight(0.0,1.0,1.0)
Y的2D纹理坐标如下:
vBackLeft(0.0,0.0,0.0)
vFrontLeft(0.0,0.0,1.0)
vFrontRight(0.0,1.0,1.0)