4

我有几千个四边形要绘制,其中一些可能完全落在视口之外。我可以编写代码来检测哪些四边形完全落在视口之外,并要求 OpenGL 只绘制至少部分可见的四边形。或者,我可以简单地让 OpenGL 绘制所有四边形,无论它们是否与视口相交。

我没有足够的 OpenGL 经验来知道其中一个是否明显更好(或者 OpenGL 是否提供了一些我可以使用的快速视口交叉测试)。视口之外的绘制是否接近于无操作,或者它们是否足够昂贵以至于我应该尽量避免它们?

4

1 回答 1

5

这取决于你的情况。

绘制最好分批进行,最好是结构上是静态的批次(即:每个批次都是完整绘制的)。所以你不应该在四级水平上剔除。但是对大组的四边形进行一些剔除并不是不受欢迎的。

您将失去的主要性能是顶点变换(又名:您的顶点着色器)。顶点着色器必须在您提供的每个顶点上运行,不管其他什么。但是,硬件会丢弃视口之外的三角形,因此您不会吸收任何填充率或其他性能。

但是,这并不意味着您的顶点 T&L 便宜就可以。渲染不可见的大块三角形可能会使光栅化器停滞不前,因为所有三角形都被剔除。也就是说,如果您绘制了很多因离开屏幕而被剔除的东西,那么您可能在实际可见的三角形上使用的填充率可能会丢失。

因此,不顾一切地向 GPU 投掷几何图形并不是一个好主意。

在任何情况下,如果您正在执行 2D 渲染,那么对离散的四边形组进行粗略剔除确实是您所需要的。您可以将瓷砖地图分成屏幕大小的部分,并根据相机的位置最多绘制 4 个。

于 2012-11-04T23:16:12.117 回答