如何纹理GL_TRIANGLE_STRIP?

时间:2014-08-31 15:45:24

标签: java opengl lwjgl

我有一些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中的答案会很好。

1 个答案:

答案 0 :(得分:1)

为基元的每个顶点指定纹理坐标:对于每次调用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();