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

Opengl es OpenGL ES:一个VBO中的多个网格,opengl-es,opengl-es-2.0,Opengl Es,Opengl Es 2.0,如果我在一个VBO中有多个网格,有没有一种方法可以独立地对这些网格应用变换 如果我在绑定一个有两个网格的VBO时调用GLDraweElements,它将使用当前MVP矩阵绘制这两个网格。因此,如果我一次在屏幕上有20多个独立移动的网格,我会需要20个VBO吗?或者,是否有某种方法指定GLDraweElements的偏移量和计数,以便它仅渲染存储在VBO中的第一个网格?通过这种方式,我可以更改MVP矩阵,然后在VBO中渲染第二个网格。如果有三个网格,其中5个、11个和13个三角形分别填充到一个索引

如果我在一个VBO中有多个网格,有没有一种方法可以独立地对这些网格应用变换


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

如果有三个网格,其中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));

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

这不会将您限制为仅使用两个网格吗?例如,如果我有3个网格,我想在不影响其他网格的情况下变换第二个网格,我不知道该如何做。偏移量会使我到达第二个网格的起点,但我如何告诉它在影响第三个网格之前停止?@Legion好吧,当绘制第二个网格时,你当然,好吧,只绘制第二个网格,而不是,好吧,第二个网格和第三个网格。@AndreasBrinck当然!第二个参数是我的计数/大小。谢谢