Java 呈现不同的VAO

Java 呈现不同的VAO,java,opengl,lwjgl,vbo,vao,Java,Opengl,Lwjgl,Vbo,Vao,我正在学习LWJGL/OpenGL编程。 我想以块的形式渲染我的地图。为此,我为每个块创建一个VAO和VBO,并上传和链接它们 问题是,如果我渲染第一个块,那么接下来的3个块都将在该块之上渲染。 如果我渲染第二个块,下面两个块将在顶部渲染 这是我的应用程序日志,描述了我如何设置VAO: Chunk: 0 0 Generate VBO: 1 Generate VAO: 1 Bind VAO: 1 Bind VBO: 1 Enable and set VertexAttribPointer Buff

我正在学习LWJGL/OpenGL编程。 我想以块的形式渲染我的地图。为此,我为每个块创建一个VAO和VBO,并上传和链接它们

问题是,如果我渲染第一个块,那么接下来的3个块都将在该块之上渲染。 如果我渲染第二个块,下面两个块将在顶部渲染

这是我的应用程序日志,描述了我如何设置VAO:

Chunk: 0 0
Generate VBO: 1
Generate VAO: 1
Bind VAO: 1
Bind VBO: 1
Enable and set VertexAttribPointer
Bufferdata (Buffersize: 36864)
Bind VAO: 0

Chunk: 0 1
Generate VBO: 2
Generate VAO: 2
Bind VAO: 2
Bind VBO: 2
Enable and set VertexAttribPointer
Bufferdata (Buffersize: 1536)
Bind VAO: 0

Chunk: 1 0
Generate VBO: 3
Generate VAO: 3
Bind VAO: 3
Bind VBO: 3
Enable and set VertexAttribPointer
Bufferdata (Buffersize: 1536)
Bind VAO: 0

Chunk: 1 1
Generate VBO: 4
Generate VAO: 4
Bind VAO: 4
Bind VBO: 4
Enable and set VertexAttribPointer
Bufferdata (Buffersize: 64)
Bind VAO: 0

Draw
Bind VAO: 1
Set Unifoms
Draw Arrays
缓冲区大小与预期一致

我用它来装订 glBindVertexArray() 和 glBindBuffer(GL_数组_BUFFER,)

我用它来画画 glDrawArrays()

我设置VAO的方式是否错误,或者您是否需要我的代码来解决我的问题?

使用时,count参数指定顶点的数量,而不是与其他一些函数不同的值(浮动)或字节的数量。OpenGL不会检查计数是否超过VBO的容量。因此,当您指定的计数值大于VBO中的存储空间时,OpenGL将自动从相邻内存中获取值,在本例中,相邻内存包含其他VBO

因此,必须确保传递顶点的数量,因为浮动的数量是顶点的三倍,绘制所有数据,而不仅仅是一个块的数据


原职 似乎您禁用了深度测试,这是一种丢弃所有比现有碎片更远的碎片的技术,以防止更远的对象覆盖更近的对象

您可以使用

glEnable(GL_DEPTH_TEST);

在初始化过程中。

但是我只对一个块调用draw方法。其他块根本不应该被呈现。你能展示一下你是如何调用glDrawArrays()的吗?可能是您传递的大小太大,导致缓冲区溢出。谢谢,这就是答案。我传递的是浮点数,而不是顶点数。非常感谢:)