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

uck*_*man 4 opengl performance

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

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

Nic*_*las 5

这取决于你的情况。

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

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

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

因此,随意地将几何图形扔向 GPU 并不是一个好主意。

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