LibGDX 会在相机外绘制吗?

does LibGDX draw outside of the camera?

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

有点像:

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

还是我必须先检查它是否超出框架而不绘制它?

确实画出来了。所以顶点着色器将运行用于纹理或纹理区域的四个顶点。由于顶点着色器将其投射到可见区域 space 之外的某个地方,因此片段着色器不会 运行.

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

由你决定是否值得计算它是否可见并跳过绘制它。如果您对每个单独的精灵执行此操作,那么 CPU 上的 GPU 节省相对较少。如果您考虑一下,根据它的四个角中的任何一个是否可见来检查单个精灵是 运行 在 CPU 上冗余地复制您自己的顶点着色器程序,以防万一它使您免于必须在 GPU 上重复该程序。而 GPU 针对此类事情进行了更优化。 (如果你使用的是正交投影,CPU的版本至少可以比GPU版本简单,因为它变成了一个简单的2D比较。)

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