首页 > 解决方案 > LibGDX 会在相机外绘制吗?

问题描述

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

有点像:

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

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

标签: javakotlinlibgdx

解决方案


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

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

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

出于这个原因,如果您要先检查它们,您将一次检查它们的组。因此,您可以将您的游戏世界组织成多个部分并检查整个部分的外部边界,然后再决定绘制该部分的所有精灵或不绘制该部分的精灵。值得一提的是,每个部分都应该足够大,可以容纳至少几百个精灵。


推荐阅读