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

Posted

技术标签:

【中文标题】OpenGL ES:一个 VBO 中的多个网格【英文标题】:OpenGL ES: Multiple Meshes in one VBO 【发布时间】:2012-04-18 17:26:09 【问题描述】:

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

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

【问题讨论】:

【参考方案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));

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

【讨论】:

那不会限制你只有两个网格吗?例如,如果我有 3 个网格并且我想在不影响其他网格的情况下转换第二个网格,我不确定该怎么做。偏移量将使我进入第二个网格的开始,但我如何告诉它在影响第三个网格之前停止? @Legion 好吧,当你画第二个的时候,当然,好吧,你只画第二个而不是,嗯,第二个和第三个。 @AndreasBrinck 当然!第二个参数是我的计数/大小。谢谢!

以上是关于OpenGL ES:一个 VBO 中的多个网格的主要内容,如果未能解决你的问题,请参考以下文章

多个网格、多个 VBO、多个 VAO、OpenGL 4.1

iOS OpenGL ES 2.0 VBO 顶点数限制:一旦超过,CPU 受限

iOS 上的 OpenGL ES 多个没有索引的 VBO

将两个不同的网格放在同一个顶点 VBO 中的 OpenGL 最佳实践

在 OpenGL ES 中,多个程序可以使用相同的 VBO 并绑定到它们的属性吗?

OpenGL 多个 VBO 只渲染一个