[英]How can I texture a GL_TRIANGLE_STRIP?
我有一些GL_TRIANGLE_STRIP原语,其绘制方式如下:
glNewList(heightmapDisplayList, GL_COMPILE);
for (int z = 0; z < data.length - 1; z++) {
glBegin(GL_TRIANGLE_STRIP);
for (int x = 0; x < data[z].length; x++) {
glVertex3f(x, data[z][x], z);
glVertex3f(x, data[z + 1][x], z + 1);
}
glEnd();
}
glEndList();
我如何纹理呢? 我很容易知道如何对诸如GL_QUADS
东西进行纹理GL_QUADS
,但是我不知道将glTexCoord2f()
调用放置在三角形带(以及迭代等)的位置。
我使用lwjgl,所以在Java中的答案会很好。
为图元的每个顶点指定纹理坐标:对于glVertex3f的每次调用,应该有一个对glTexCoord2f的匹配调用。 关于纹理坐标的实际值,取决于您要实现的目标。 一种简单的方法是从用于三角带的索引中导出2D纹理坐标(s,t)。 这是实现此目的的示例:
glNewList(heightmapDisplayList, GL_COMPILE);
for (int z = 0; z < data.length - 1; z++) {
glBegin(GL_TRIANGLE_STRIP);
// The t texture coordinate for z and z + 1
float t0 = (float)z / (data.length - 1); // t0 in [0,1]
float t1 = (float)(z + 1) / (data.length - 1); // t1 in [0,1]
for (int x = 0; x < data[z].length; x++) {
// The s texture coordinate for x
float s = (float)x / (data[z].length - 1); // s in [0, 1]
glTexCoord2f(s, t0);
glVertex3f(x, data[z][x], z);
glTexCoord2f(s, t1);
glVertex3f(x, data[z + 1][x], z + 1);
}
glEnd();
}
glEndList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.