我有一些 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
之类的东西进行纹理处理,但我不知道在哪里放置带有三角形带的 glTexCoord2f()
调用(以及迭代等)。
我使用lwjgl,所以用java回答会很好。
指定图元每个顶点的纹理坐标:对于每次调用 glVertex3f,都应该有一个对 glTexCoord2f 的匹配调用。关于纹理坐标的实际值,这取决于您想要实现的目标。一种简单的方法是从用于三角形 strip 的索引导出 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();
我是一名优秀的程序员,十分优秀!