10

我正在渲染一些网格(有时超过 500 个),我想知道解决这个问题的最佳方法。创建 500 个 VBO,然后如果它们通过了截锥体和可见性测试,那么渲染它们是否毫无意义。有没有更有效的方法来做到这一点?我希望最大限度地提高性能。

4

1 回答 1

11

要回答您的问题,是的,许多 VBO 会减慢速度。更多的多边形通常会减慢渲染速度,但更多的绘制调用会产生更大的影响。您希望最大限度地减少状态更改和绘制,以及您拥有的缓冲区数量(和内存使用)。

我建议首先查看缓冲区并确定您需要多少缓冲区。如果您可以批处理/实例几何,将静态几何合并到单个缓冲区中,更有效地重用缓冲区等。

一旦您将缓冲区减少到尽可能少,您将需要使用多种类型的剔除。通过视锥体(可能在八叉树中)和遮挡的可见性可以提供显着的性能提升。主要想法是尽可能快速和简单地取消几何体的资格,因此您从粗略测试(八叉树)开始,然后更详细(可能是 AABB 和/或简化的船体),然后是遮挡,然后实际绘制。

这是一篇关于截锥体剔除的好文章,它涉及到四叉树(以及扩展的八叉树)。图表、解释和一些示例代码。

OpenGL 遮挡剔除文章似乎不太常见,尽管来自 GPU Gems 的这篇文章可能是一个不错的起点。

于 2011-07-06T18:26:44.810 回答