编辑:
我有不断变化的细节水平的块。每当一个块的细节级别发生变化时,我必须重新计算要绘制的顶点。因此,顶点的数量会动态变化。
我的问题是,我不知道如何才能画出这个。我以为我可以删除旧缓冲区,然后重新加载新缓冲区。每隔几秒钟删除和重新加载缓冲区是有效的还是只是一个坏主意?有没有更好的方法来做到这一点?
以下是我的想法:
//delete old buffers
GL20.glDisableVertexAttribArray(0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
GL15.glDeleteBuffers(vboID);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
GL15.glDeleteBuffers(vboiID);
GL30.glBindVertexArray(0);
GL30.glDeleteVertexArrays(vaoID);
//reload buffers with new vertex data
vaoID = GL30.glGenVertexArrays();
GL30.glBindVertexArray(vaoID);
vboID = GL15.glGenBuffers();
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex_buffer, GL15.GL_DYNAMIC_DRAW);
GL20.glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
vboiID = GL15.glGenBuffers();
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboiID);
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, index_buffer, GL15.GL_DYNAMIC_DRAW);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
GL30.glBindVertexArray(0);
不过,必须有比这更好的方法来做到这一点......我可能只是像往常一样错过了一些关键概念,所以请让我知道我是否只是一个试图这样做的彻头彻尾的白痴。谢谢!