如何在OpenGL ES中绘制animation对象?

我有一个VBO,我这样初始化(只是一个例子):

- (void)setupVBOs { GLuint vertexBuffer; glGenBuffers(1, &vertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW); GLuint indexBuffer; glGenBuffers(1, &indexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW); } 

正如你所看到的,我正在使用GL_STATIC_DRAW ,这对于视觉上不变的对象是GL_STATIC_DRAW (不包括翻译等等)。

我如何绘制animation对象? 我的意思是用户交互可能会改变的东西。 这个video就是一个很好的例子。 很显然,正在使用OpenGL,因为顶点是由手势操纵的。

它是如何完成的? 通过每次触摸改变x y z坐标? 他们在使用GL_DYNAMIC_DRAW吗? 这很难吗?

GL_DYNAMIC_DRAWGL_STREAM_DRAW标志创建一个VBO。 这被用来给OpenGL实现一个指示内存的地方的提示,并启用某些优化,例如数据可以被caching或不被存储在系统内存或graphics内存中。

dynamic是指数据会经常变化(重复指定和使用)

数据stream意味着每一帧数据将被改变(指定一次,使用一次)。

关于video,由于您要频繁更新缓冲区,所以一旦创建了缓冲区,就可以使用glMapBuffer ,它可以让您将GPU中的缓冲区映射到客户端地址,并直接读取和/或写入相对于返回的指针,取决于指定的访问策略。 这样,您可以频繁更新顶点,而无需每次都复制整个缓冲区。