1

我正在使用本教程底部的代码使用 assimp 加载网格。 网格加载

所以我加载网格,然后将第一个加载到 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)]? 因为我已经尝试过了,但它不起作用,但可能还有其他问题。

4

1 回答 1

0

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

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

于 2013-12-09T18:10:46.180 回答