libGDX:分辨率较小时缩放纹理

libGDX: Scale Textures when smaller resolution

我阅读了一些关于视口的文章来解决不同分辨率的问题。但在每个示例中,他们使用的纹理尺寸都小于屏幕分辨率。但是,当我的纹理尺寸为 1920 x 1080 而我的屏幕仅为 800 x 400 时会发生什么? 是否有任何一种可以缩放纹理的视口?我没有找到任何关于这个问题的信息。

看起来你的意思是缩放而不是压缩。压缩是一种减小文件大小的技术,就像 .jpg 压缩未压缩的 .bmp 一样。所以如果你的意思是缩放那么它完全取决于你想要什么。如果您有一个 1920x1080 的纹理并希望它完全适合 800x400 的屏幕,则需要从 1920x1080 = 16x9800x400 = 2:1 = 16:8 开始拉伸它。

要拉伸图像,您需要使用 StretchViewport。您将使用要显示的世界尺寸创建视口。因此,在这种情况下,1920x1080 图像,或者可能是 16x9,并将该纹理与“世界单位”放在你的世界中。StretchViewport 将确保视口拉伸到你使用的任何大小。

如果您希望它尽可能适合但保持 16:9 的纵横比,那么您可以使用 FitViewport。就像 StretchViewport 每个视口(ScreenViewport 除外)都需要提供世界单位,这是一个重要的概念。在您定义世界单位之前,世界单位不是米或像素。无论如何,FitViewport 还将确保每个设备都能看到您提供的尽可能多的世界,但您的资产不会 stretch/deform。相反,它会创建一个 "black" 栏,就像电视在宽高比不相等时所做的那样。

ScreenViewport,默认只占用屏幕大小。因此,1920x1080 像素的屏幕将显示 1920x1080 世界单位,而 640x480 像素屏幕将显示 640x480 世界单位。因此,屏幕的分辨率越高,可见的世界就越多。屏幕像素代表的世界单位数量可以更改。

其他人有一个观点:FillViewport 就像 FitViewport 一样,它会保持纵横比但总是充满屏幕。因此有些部分可能不可见。出于这个原因,我想不出这个超过 FitViewport 的用途。还有 ExtentVieport,介于 FitViewportScreenViewport 之间。