OpenGL入门 (八) —— 纹理坐标解析

13,351 阅读2分钟

什么是纹理坐标?

要使用纹理绘制图元,我们必须在绘制每个顶点之前为该顶点指定纹理坐标图元的每个顶点各自对应纹理坐标,用来标明该从纹理图像的哪个部分采样(采样:采集片段颜色),之后在图形的其它片段上进行片段插值(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)

OpenGL入门 (一) —— OpenGL专业名词解析

OpenGL入门 (二) —— OpenGL Mac环境搭建

OpenGL入门 (三) —— 快速画一个正方形

OpenGL入门 (四) —— 渲染流程解析

OpenGL入门 (五) —— 图元绘制实战

OpenGL入门 (六) —— 矩阵基础变化实战

OpenGL入门 (七) —— 隐藏面消除详解

OpenGL入门 (八) —— 纹理坐标解析