OpenGL ES:一个VBO中的多个网格

时间:2012-04-18 17:26:10

标签: opengl-es opengl-es-2.0

如果我在一个VBO中有多个网格,有没有办法将变换独立应用到这些网格?

如果在绑定了两个网格的VBO时调用glDrawElements,它将使用当前MVP矩阵绘制这两个网格。因此,如果我一次在屏幕上有超过20个独立移动的网格,我需要20个VBO吗?或者是否有某种方法为glDrawElements指定偏移和计数,以便它只渲染存储在VBO中的第一个网格?这样我就可以改变MVP矩阵,然后在VBO中渲染第二个网格。

1 个答案:

答案 0 :(得分:1)

假设您有三个网格,分别将5个,11个和13个三角形打包到一个索引缓冲区中,您可以将两个单独的网格绘制为:

// assumes index buffer has been bound
// set modelview
glDrawElements(GL_TRIANGLES, 5 * 3, GL_UNSIGNED_SHORT, 0);
// set modelview
glDrawElements(GL_TRIANGLES, 11 * 3, GL_UNSIGNED_SHORT, 5 * 3 * sizeof(unsigned short));
// set modelview
glDrawElements(GL_TRIANGLES, 13 * 3, GL_UNSIGNED_SHORT, (5 + 11) * 3 * sizeof(unsigned short));

通过在最后一个参数中偏移指针来指定偏移量。