【问题标题】:libGDX: Scale Textures when smaller resolutionlibGDX:较小分辨率时缩放纹理
【发布时间】:2017-06-11 02:25:45
【问题描述】:

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

【问题讨论】:

  • 压缩是什么意思?本文可能会帮助您掌握这个概念。 xoppa.github.io/blog/pixels 源纹理大小与视口或屏幕大小无关,除非涉及到您希望图像看起来有多清晰。

标签: android libgdx textures viewport


【解决方案1】:

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

要拉伸图像,您需要使用StretchViewport。您将创建具有要显示的世界尺寸的视口。所以在这种情况下,1920x1080 的图像,或者可能是 16x9,然后将带有“世界单位”的纹理放在您的世界中。StretchViewport 将确保视口被拉伸到您使用的任何尺寸。

如果您希望它尽可能适合但保持 16:9 的纵横比,那么您可以使用FitViewport。就像StretchViewport 一样,每个视口(@98​​7654329@ 除外)都需要提供世界单位,这是一个重要的概念。在您这样定义世界单位之前,世界单位不是米也不是像素。无论如何,FitViewport 还将确保每台设备都能看到您提供的尽可能多的世界,但您的资产不会拉伸/变形。相反,它会创建一个“黑色”条,就像电视在纵横比不相等时所做的那样。

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

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

【讨论】:

  • 非常感谢!你的解释解决了我的问题。是的,我的意思是缩放。很抱歉造成混淆。
  • @EricM。如果它解决了您的问题,请标记我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多