我已将许多帧加载到大型VBO中(所有帧都属于同一个VAO)。 作为(简短)示例,我有:
GLfloat myBuf[] = {0.0, 0.0, 1.0, 0.0, 0.0, 0.9} // one point for each frames
然后我将我的VAO构建为:
GLuint vao =0;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
GLuint vbo = 0;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*3*2, myBuf, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
...
然后,为了呈现我做的子部分:
glBindVertexArray(vao);
// enable vertexes
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// frame is 0 or 1
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, reinterpret_cast<void*>(sizeof(float)*3*frame));
// draw 1 point using offset of index array
glDrawElements(GL_POINTS, 1, GL_UNSIGNED_SHORT, 0);
以上是实现动态渲染子部分的唯一方法吗?在我初始化VAO后的原始代码中,我删除了VBO,一切都很好 - 当然这个代码我必须保留VBO。
我是对的,实现这一目标的唯一方法是使用上述方式的glVertexAttribPointer
吗?
有没有更好的方法呢?