我正在渲染一些网格(有时超过500),我想知道解决这个问题的最佳方法。创建500个VBO是否毫无意义,然后如果它们通过视锥和可见性测试,则渲染它们。有没有更有效的方法来做到这一点?我希望最大限度地提高绩效。
答案 0 :(得分:11)
要回答你的问题,是的,许多维多利亚州公民会放慢速度。更多的多边形通常会减慢渲染速度,但更多的绘制调用会受到更大的影响。您希望最小化状态更改和绘制,以及您拥有的缓冲区数量(以及内存使用)。
我建议先查看缓冲区并确定你需要多少。如果可以批处理/实例几何,将静态几何合并到单个缓冲区中,更有效地重用缓冲区等等。
一旦你将缓冲区减少到可能的最小值,你就会想要使用多种类型的剔除。通过frustrum(可能在八叉树中)和遮挡的可见性可以提供显着的性能提升。主要思想是尽可能快速和简单地取消几何形状的资格,所以你从粗略测试(八叉树)开始,然后稍微更详细(可能是AABB和/或简化的船体),然后是遮挡,然后实际绘制。
这是一个good article on frustrum culling,它接触四叉树(通过扩展,八叉树)。图表,解释和一些示例代码。
OpenGL遮挡剔除文章看起来有点不太常见,虽然this one from GPU Gems可能是一个很好的起点。