LibGDX 2D ||在屏幕外对象上调用 draw() 是效率低下还是自动剔除?



我正在制作一个简单的2D直升机游戏,作为学习libgdx的一种方式。如果我有一个位于屏幕外的对象,在这种情况下是许多摩天大楼,调用batch.draw((会导致OpenGL尝试渲染该对象吗?如果是这样,写一张支票来跳过绘制调用并不难,我只是想知道是否有必要。我使用探查器来计算呼叫/绘制呼叫,并且数字没有增加,所以我猜可以吗?

提前感谢!

有一个平衡行为。它们不会被剔除,因此它们被发送到 GPU,它们的顶点由顶点着色器处理。但是,在顶点着色器投影它们并计算出它们位于视锥体之外之后,将不会有进一步的计算(不会为所有像素运行片段着色器(。

因此,绘制它们是有成本的,但并不像可见的那么高。可见或不可见精灵的 CPU 成本相当。GPU 为可见的精灵做更多的工作,它几乎与精灵将占据的屏幕上的像素数成线性比例。

当然,剔除它们也有一些 CPU 成本,因为您将将它们的位置与相机进行比较。如果您检查每个特定的块,可能不值得,但是通过一次检查大块可以节省大量资金,例如,如果您知道一堆树被组合在一起,您可以保留一个包含所有树的边界框并检查它而不是每棵树。

如果你的游戏中只有不到几千个精灵,那么即使在低端手机上,这些都不值得担心。

最新更新