gpt4 book ai didi

java - 如何更改 VBO 中的数据?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:03 24 4
gpt4 key购买 nike

我正在尝试使用 glMapData()glBufferSubData() 方法来修改现有的 VBO。

我当前的代码如下:

public void updateBufferData(int vaoID, int vboID, long index, int value){
GL30.glBindVertexArray(vaoID); //bind VAO
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID); //bind VBO
IntBuffer buffer = storeDataInIntBuffer(new int[]{value}); //I'm not sure if I should do it like this?
GL15.glBufferSubData(vboID, index, buffer); //set data
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); //unbind VBO
GL30.glBindVertexArray(0); //unbind VAO
}

然而,当我调用这个方法时,它似乎对 VBO 没有任何影响。渲染的对象仍然是一样的。

我很确定当 updateBufferData() 方法被调用时,VBO/VAO 没有绑定(bind)到任何其他东西。

最佳答案

好的,这里有两件事:

首先,您不需要绑定(bind) VAO 来更新 VBO。一旦您指定 VBO 是 glVertexAttribArrayPointer 的源(您在创建 VAO 时执行此操作),您就不需要再将它们绑定(bind)在一起。对于绘图,您绑定(bind) VAO,对于 VBO 修改,您绑定(bind) VBO。可以这样想:同一个 VBO 可能已绑定(bind)到多个 VAO,因此绑定(bind)特定 VAO 以更新它是没有意义的。

现在开始真正的回答,你做错了 glBufferSubData 调用。它应该使用 GL15.GL_ARRAY_BUFFER 作为第一个参数,而不是 VBO ID,因为它已经绑定(bind)到 GL15.GL_ARRAY_BUFFER 绑定(bind)点。

关于java - 如何更改 VBO 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435348/

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