gpt4 book ai didi

java - OpenGL(Java) 中禁用元素数组缓冲区对象时出现错误,无法使用偏移量

转载 作者:行者123 更新时间:2023-12-01 08:57:32 25 4
gpt4 key购买 nike

当我遇到这个问题“禁用元素数组缓冲区对象时无法使用偏移”时,我试图在屏幕上创建一个正方形并对其进行纹理处理。错误来自行,

GL11.glDrawElements(GL11.GL_TRIANGLES,model.getVertexCount(),GL11.GL_UNSIGNED_INT,0);

这是我的一些代码:

渲染器方法:

这会渲染东西

RawModel model = texturedModel.getRawmodel();
GL30.glBindVertexArray(model.getVaoID());
GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1);
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D,texturedModel.getTexture().getID());
GL11.glDrawElements(GL11.GL_TRIANGLES,model.getVertexCount(),GL11.GL_UNSIGNED_INT,0);
GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
GL30.glBindVertexArray(0);

bindIndicesBuffer 方法:

这会创建一个 vbo,绑定(bind)它,并在方法结束时取消绑定(bind)它

int vboID = GL15.glGenBuffers();
vbos.add(vboID);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboID);
IntBuffer buffer = putIndicesInIntBuffer(indices);
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);

我注意到当我删除该行时,

GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);

程序不会给我这个错误

我认为在不解除绑定(bind)的情况下保留绑定(bind)的 vbo 绑定(bind)是低效的,但我不确定

我应该找出另一个解决办法还是让 vbo 保持绑定(bind)。

我知道有一些问题可以解决这个问题,但是它们并没有多大帮助。

如果我在这个问题上表现得很愚蠢,我很抱歉。我是一名 opengl 菜鸟,我正在学习一系列教程,因此我并不完全理解所有这些代码。 :(

最佳答案

元素缓冲区是 VAO 状态的一部分。因此,当你绑定(bind)它时,你实际上将它附加到了 VAO 上。因此,当您解除绑定(bind)时,您不会在 VAO 中放置任何元素缓冲区。然后,您尝试在没有附加到 VAO 的元素缓冲区的情况下进行索引渲染。

所以,是的,您需要将元素缓冲区附加到 VAO。

关于java - OpenGL(Java) 中禁用元素数组缓冲区对象时出现错误,无法使用偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41948774/

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