AlG*_*nde 2 size textures libgdx
我应该使用什么尺寸的纹理,以便在android和桌面上看起来不错,在android上性能也不错?我需要创建为Android纹理和桌面纹理?
最好的方法(关于性能 + 质量)是使用 mipmap。这意味着您从一个大的Texture(例如 1024*1024px)开始并将其下采样到其大小的四分之一,直到达到 1x1 的图像。所以你有一个 1024*1024、一个 512*512、一个 256*256... 和一个 1*1 Texture。
据我所知,您只需要提供最大的(在上面的示例中为 1024*1024)Texture,Libgdx并将在运行时创建 mipmap 链。
然后,底层的 OpenGL 根据Texture像素与纹素的比率决定使用哪个。
看一下Texture API,似乎有一个 2 param 构造函数,其中第一个参数是FileHandlefor Texture,第二个参数是 a boolean,指示是否要使用 mipmap。据我所知,您还必须正确设置TextureFilter。
要了解TextureFilter您,我建议您阅读这篇文章。
对于典型的2D游戏,您通常希望使用所有目标设备都支持的最大纹理大小。这样一来,您可以TextureRegion在单个纹理中打包最多的图像(),并尽可能避免多次绘制调用。为此,您可以检查要支持的所有设备的最大纹理大小,并采用最小值。通常,尺寸最小的设备也具有较低的性能,因此不必为其他设备使用不同的纹理大小以提高整体性能。
不过,不要使用比您需要的大的纹理。例如,如果您所有的图像都适合单个1024x1024纹理,则即使您的所有设备都支持2048x02048纹理,也不会增加收益。
该规范至少保证64x64,但实际上所有设备至少支持1024x1024,而大多数较新的设备至少支持2048x2048。如果要检查特定设备上的最大纹理大小,则可以运行:
private static int getMaxTextureSize () {
IntBuffer buffer = BufferUtils.newIntBuffer(16);
Gdx.gl.glGetIntegerv(GL20.GL_MAX_TEXTURE_SIZE, buffer);
return buffer.get(0);
}
Run Code Online (Sandbox Code Playgroud)
最大值始终为正方形。例如,此方法可能会为您提供一个值,4096这意味着所支持的最大纹理大小为宽度4096像素,高度4096像素。
您的纹理大小应始终为2的幂,否则某些功能(例如包装功能和mipmaps)可能不起作用。它不必一定是正方形的。因此,如果只有2张500x500的图像,则可以使用1024x512的纹理。
请注意,纹理大小与TextureRegion您打包在其中的单个图像()的大小没有直接关系。您通常希望将纹理内区域的大小保持为“像素完美”。这意味着理想情况下,它应该与投影到屏幕上的尺寸一样大。例如,如果图像(或Sprite)在屏幕上投影100 x 200像素,则TextureRegion理想情况下,图像()的尺寸将为100 x 200纹素。您应尽可能避免不必要的缩放。
预计的大小会因设备而异(屏幕分辨率),并且与您的世界单位无关(例如,Imageor Sprite或or 的大小Camera)。您必须检查(或计算)特定设备的确切投影尺寸才能确定。
如果目标设备的屏幕分辨率相差很大,那么您将不得不使用一种策略来解决该问题。尽管这并不是您真正要求的,但记住这一点可能很好。有几种选择,取决于您的需求。
一种选择是在中间的某个位置使用一种尺寸。一个常见的错误是使用过大的图像并对其进行大量缩小,这在低分辨率的设备上看起来很糟糕,吞噬了太多的内存并引起大量的渲染调用。相反,您可以选择仍然可以接受向上缩放和向下缩放的分辨率。这取决于图像的类型,例如水平和垂直直线的比例非常好。字体或其他高细节图像缩放比例不佳。试一试。通常,您永远不希望比例因子大于2。因此,向上缩放2以上或向下缩放2以上都会很快看起来很糟糕。越接近1,越好。
正如@Springrbua正确指出的那样,您可以使用mipmaps缩小缩放比2更好(mipmaps不会有助于放大)。但这有两个问题。第一个是它会导致从一个区域流到另一个区域,以防止您可能会增加图集区域之间的填充。另一个是它导致更多的渲染调用。后者是因为分辨率较低的设备通常也具有较小的最大纹理大小,即使您永远不会使用该最大值,也必须将其加载到该设备上。但是,如果您拥有的图像数量超出了最大最小尺寸所需的图像,那将是一个问题。
另一种选择是将目标设备分为几类。例如“ HD”,“ SD”等。每个组具有不同的平均分辨率,通常也具有不同的最大纹理大小。这为您提供了两全其美的优势,它使您可以使用最大的纹理大小,而不必过多缩放。Libgdx随附了ResolutionFileResolver,可以帮助您确定在哪种设备上使用哪种纹理。或者,您可以根据设备规格使用不同的APK。