在OpenGL中在视口外绘图是否昂贵?

时间:2012-11-04 22:04:38

标签: performance opengl

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

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

1 个答案:

答案 0 :(得分:3)

这取决于您的具体情况。

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

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

然而,这并不意味着如果您的顶点T& L便宜,那就没关系。渲染不可见的大块三角形可以很好地阻止光栅化器,因为所有三角形都被剔除。也就是说,如果你绘制了许多因屏幕外而被剔除的东西,你可能在实际可见三角形上使用的填充率可能会丢失。

因此,毫不犹豫地在GPU上投掷几何体不是一个好主意。

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