当需要给图像赋予真实颜色的时候,不太可能使用前面的方法,为每一个顶点指定第一个颜色。通常会采用纹理贴图。
为了能够把纹理映射(Map)到三角形上,需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(译注:采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。
纹理坐标在x和y轴上,范围为0到1之间(注意使用的是2D纹理图像)。使用纹理坐标获取纹理颜色叫做采样(Sampling)。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角。下面的图片展示了是如何把纹理坐标映射到三角形上的。
接下来的工作:告诉OpenGL如何对纹理采样
float vertices_data[24] = {
// 所有的值是在[-1, 1]之间的
// 位置 // 颜色 //纹理坐标
0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f,1.0f, 1.0f, // 右下
-0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,1.0f, 0.0f, // 左下
0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f,0.0f, 0.0f, // 顶部
};
由于添加了一个额外的顶点属性,必须告诉OpenGL新的顶点格式: