2014-08-31 116 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