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 中的多个网格的主要内容,如果未能解决你的问题,请参考以下文章
iOS OpenGL ES 2.0 VBO 顶点数限制:一旦超过,CPU 受限
将两个不同的网格放在同一个顶点 VBO 中的 OpenGL 最佳实践