簡體   English   中英

我該如何紋理GL_TRIANGLE_STRIP?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM