首页 文章

纹理顶点缓冲区对象

提问于
浏览
2

我想要做的是用OpenGL绘制(大)地形 . 所以我有一组顶点,比方说256 x 256,我存储在VRAM的顶点缓冲区对象中 . 我正确地对它们进行了三角测量,所以我有一个面部的索引缓冲区 .

// 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()需要尽可能多的纹理坐标作为顶点 .

所以我不知道如何用VBO做到这一点 . 也许有更好的概念来解决我的问题,或者我只是缺乏一个好主意 .

提前致谢 .

2 回答

  • 0

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

  • 3

    由于您可能希望纹理无缝平铺,因此您需要的是为每个顶点计算正确的纹理坐标,并像顶点一样传递它们 .

相关问题