java - 纹理化顶点缓冲区对象

标签 java opengl vbo lwjgl vertex-buffer

我想做的是用 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 执行此操作。也许有更好的概念来解决我的问题,或者我只是缺乏一个好主意。

提前致谢。

最佳答案

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

关于java - 纹理化顶点缓冲区对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/378536/

相关文章:

java - <identifier> 使用搜索对象时出现预期错误

java - Android HttpClient 发布文件 MultipartEntity

opengl - 在 GLSL 着色器中使用输入/输出结构

c++ - VBO 的 std::vector 偏移量计算?

java - 使用 java Collections.sort() 对 List<List<Integer>> 进行排序

java - 使用 Eclipse 和 JBoss 调试 JSP

OpenGL:如何正确解除绑定(bind)和删除缓冲区

c++ - 上下文创建失败

C++ cuda opengl 不渲染 vbo

c++ - 将 OpenGL VBO 与自定义类/数据结构一起使用