LibGDX绘制外的相机?



如果我使用SpriteBatch绘制对相机或视口不可见的纹理,它仍然渲染并使用我的GPU吗?

有点像:

batch.draw(img, 9999999f, 9999999f, 1f, 1f)

或者我必须检查它是否在帧外而不是首先绘制它?

它会画出来。所以顶点着色器将为纹理或纹理区域的四个顶点运行。由于顶点着色器将其投影到可见空间之外的某个地方,因此片段着色器将不会运行。

对于绘制的每个精灵,无论精灵是否可见,顶点着色程序都会运行四次,而片段着色程序对于出现在屏幕上的精灵的每个像素大约运行一次。现代的低端手机可以轻松处理数百个"浪费"的精灵被移出屏幕。

这是由你决定是否值得计算,如果它将是可见的,跳过绘制它。如果你对每个精灵都这么做,那么在CPU上的开销就会比在GPU上的节省要大得多。如果你仔细想想,基于四个角是否可见来检查单个精灵,就是在CPU上冗余地运行你自己的顶点着色程序副本,以防它让你不必在GPU上重复该程序。而GPU在这方面做得更好。(如果你使用的是正交投影,CPU版本至少可以比GPU版本更简单,因为它变成了一个简单的2D比较。)

因此,如果要先检查它们,则一次检查它们的组。所以你可能会将游戏世界组织成多个部分,并在决定是否绘制该部分的所有精灵之前检查整个部分的外部边界。为了让它有价值,每个部分应该足够大,以包含至少几百个精灵。

最新更新