将网格加载到opengl中的vbo中

时间:2013-12-09 17:18:33

标签: opengl vbo assimp

我使用本教程底部的代码使用assimp加载网格物体。 Mesh Loading

所以我加载网格,然后将第一个加载到vbo中,然后将它们链接到vao。

glGenVertexArrays(1, &_vertexArray1); //Bind to first VAO
glBindVertexArray(_vertexArray1);
glGenBuffers(1, &_vertexBufferCube1);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferCube1);
glBufferData(GL_ARRAY_BUFFER, g_point_count * 3 * sizeof (float), &g_vp[0], GL_STATIC_DRAW);

glEnableVertexAttribArray(loc1);
glVertexAttribPointer(loc1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(loc2);
glVertexAttribPointer(loc2, 3, GL_FLOAT, GL_FALSE, 0, NULL);

但是如何将第二个网格加载到vbo中呢? 应该在g_vp[g_point_count * 3 * sizeof (float)]包含第二个网格吗? 因为我已经尝试了它并且它不起作用,但可能还有其他错误。

1 个答案:

答案 0 :(得分:0)

如果您使用的是基于vao的绘图,则可以将不同的vbos存储在不同的vaos中。在绘制场景时,使用glBindVertexArray(vao)和glBindVertexArray(0)在不同的vaos之间切换。还有更好的解决方案。您可以在一个vao中存储多个对象,但记录每个对象的索引数据。然后,您可以通过指定索引使用glDrawElementsBaseVertex绘制每个对象。

本教程展示了使用glDrawElementsBaseVertex + assimp进行渲染的示例 http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html