顶点缓冲区对象中的多个网格,并非每帧都绘制所有网格

时间:2018-03-11 14:06:19

标签: opengl

所以假设我有100个不同的网格都使用相同的OpenGL着色器。显然,阅读OpenGL最佳实践我应该将它们放在相同的顶点缓冲区对象中并使用glDrawElementsBaseVertex绘制它们。现在我的问题是,如果我每帧只渲染这些网格的一小部分,我是否通过将所有这些网格物体放在同一个顶点缓冲区对象中来浪费资源?在这种情况下,批处理的最佳做法是什么?

是否有任何指导或方法可以确定应该将多少放入单个顶点缓冲区对象?

1 个答案:

答案 0 :(得分:2)

  

如果我每帧只渲染这些网格的一小部分,我是否通过将所有这些网格物体放在同一个顶点缓冲区对象中来浪费资源?

你可能浪费哪些资源?仅仅渲染的行为不使用资源。而且由于你迟早要渲染其他网格,最好将它们放在内存中,而不是将它们DMA化。

当然,这必须与你可以适应多少内容的问题进行平衡。这是一个记忆与性能之间的权衡,你必须自己决定和你的应用程序保持你没有积极使用的数据是多么合适。

处理此问题的常用技巧包括流媒体。也就是说,内存中的数据取决于您在场景中的位置。当您在世界各地移动时,会加载新区域的新数据,覆盖旧区域的数据。

  

是否有任何指导或方法可以确定应该将多少放入单个顶点缓冲区对象?

尽可能多。一般的经验法则是,的缓冲区对象的数量应随着渲染对象的数量而变化。