gpt4 book ai didi

java - 渲染不同的VAO

转载 作者:行者123 更新时间:2023-11-30 08:01:19 26 4
gpt4 key购买 nike

我正在使用 LWJGL/OpenGL 学习和编程。我想分块渲染我的 map 。为此,我为每个 block 创建一个 VAO 和 VBO,然后上传并链接它们。

问题是,如果我渲染第一个 block ,则接下来的所有 3 个 block 都将渲染在该 block 之上。如果我渲染第二个 block ,则以下 2 个 block 将渲染在顶部。

这是我的应用程序日志,描述了我如何设置 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

缓冲区大小符合预期。

对于绑定(bind)我使用glBindVertexArray()和glBindBuffer(GL_ARRAY_BUFFER,)

对于绘图我使用glDrawArrays()

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

最佳答案

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

因此,您必须确保传递顶点数,因为 float 是其三倍,从而绘制所有数据,而不仅仅是一个 block 的数据。

<小时/>

原帖

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

您可以通过以下方式启用它

glEnable(GL_DEPTH_TEST);

初始化期间。

关于java - 渲染不同的VAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31872782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com