iOS OpenGL ES2在顶点缓冲区对象中进行更改

时间:2016-04-16 11:36:09

标签: opengl-es-2.0

我在OpenGL中有一个地形。我想动态地改变点之间的空间。 但是当顶点数据发送到顶点缓冲区对象时,我无法修改任何内容。 我唯一能做的就是删除VBO并用每个点的新位置创建一个替代VBO。 有没有最好的方法呢?

1 个答案:

答案 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);

查看docs.gl page on glBufferSubData了解详情。