如果我在单个 VBO 中有多个网格,有没有办法独立地将变换应用于这些网格?
如果我在绑定具有两个网格的 VBO 时调用 glDrawElements,它将使用当前的 MVP 矩阵绘制这两个网格。所以如果我一次在屏幕上有超过 20 个独立移动的网格,我需要 20 个 VBO 吗?或者是否有某种方法可以指定 glDrawElements 的偏移量和计数,以便它只渲染存储在 VBO 中的第一个网格?这样我可以更改 MVP 矩阵,然后在 VBO 中渲染第二个网格。
如果我在单个 VBO 中有多个网格,有没有办法独立地将变换应用于这些网格?
如果我在绑定具有两个网格的 VBO 时调用 glDrawElements,它将使用当前的 MVP 矩阵绘制这两个网格。所以如果我一次在屏幕上有超过 20 个独立移动的网格,我需要 20 个 VBO 吗?或者是否有某种方法可以指定 glDrawElements 的偏移量和计数,以便它只渲染存储在 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));
您可以通过偏移最后一个参数中的指针来指定偏移量。