2008-12-18 167 views
2

我想要做的是用OpenGL绘制(大)地形。所以我有一组顶点,可以说我存储在VRAM中的顶点缓冲区对象中的256 x 256。我正确地对它们进行三角化,所以我已经有了一个用于脸部的索引缓冲区。纹理顶点缓冲区对象

// vertexes 
glBindBufferARB(GL_ARRAY_BUFFER_ARB, vertexBufferId); 
glVertexPointer(3, GL_FLOAT, 0, 0); 
// textures 
glBindBufferARB(GL_ARRAY_BUFFER_ARB, texCoordBufferId); 
glTexCoordPointer(2, GL_FLOAT, 0, 0); 
// indexes 
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexBufferId); 
// draw it 
glDrawRangeElements(GL11.TRIANGLES, 0, size - 1, size, GL_UNSIGNED_INT, 0); 

我也加载了一个正方形纹理,必须应用到每个三角形。所以我遇到了纹理坐标的问题:

每个顶点都包含在4个三角形中,这意味着它需要4个纹理坐标。但是glDrawRangeElements()需要与顶点一样多的纹理坐标。

因此,我不认为如何与维也纳各组织合作。也许有更好的理念来解决我的问题,或者我只是缺乏一个好主意。

在此先感谢。

回答

3

如果您的纹理应该在每个四边形中重复(或镜像)自己,最好的方法是使用与您的数组中的(x,y)位置数匹配的纹理坐标。例如。对于第一行顶点使用这些纹理坐标:(0.0,0.0),(1.0,0.0),(2.0,0.0)...(255.0,0.0)。

+0

谢谢,那是我错过了... – 2008-12-19 10:27:50

0

由于您可能希望您的纹理可以无缝拼接,因此您只需计算每个顶点的适当纹理坐标并像顶点一样传递它们即可。

相关问题