2014-08-31 233 views
1

我有哪些繪製像這樣幾個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,但我不知道放在哪裏glTexCoord2f()電話用三角形帶(和迭代和這樣)。

我用LWJGL,所以Java中的答案將是很好。

回答

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(); 
+0

它沒有工作。相反,它出現了一個白色的輸出。此外,沒有其他渲染。我錯過了什麼嗎? http://gyazo.com/054f1d005e0922a1c4d95a7290445c9a 即使我的(綠色)船是藍色的!而我只看到地形的一小部分。 沒有你的紋理地形代碼,它通常是這樣的:http://i.gyazo.com/757549850eaebf8123c24afb24ffdac2.png 這裏是pastebinned代碼:http://pastebin.com/JVRxPM9k 會偉大的,如果你能幫助! – Joehot200 2014-08-31 19:32:16

+2

這裏的通話順序是錯誤的。在相應的'glVertex3f()'調用之前,'glTexCoord2f()'調用需要**。 – 2014-08-31 20:07:35

+0

除了@RetoKoradi指出的錯誤之外,代碼片段中的最後一個綁定紋理是lookupTexture而不是textureID。 – user3146587 2014-08-31 20:21:12