我在OpenGL中有一个地形。我想动态地改变点之间的空间。 但是当顶点数据发送到顶点缓冲区对象时,我无法修改任何内容。 我唯一能做的就是删除VBO并用每个点的新位置创建一个替代VBO。 有没有最好的方法呢?
答案 0 :(得分:0)
正如评论中所提到的,听起来你想要glBufferSubData
。
如果您打算经常修改数据,请先设置VBO的初始状态:
float[] positions = { 0, 0, 0, 0, 0, 0 };
int numberOfPositions = 6;
int vbo = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * numberOfPositions, positions, GL_DYNAMIC_DRAW);
然后说你要将最后两个值更改为1
,你会这样做:
float[] update = { 1, 1 };
int offset = 4
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * offset, update);