我已经阅读了一些关于视口的文章来解决不同分辨率的问题。但是在每个例子中,他们使用的纹理尺寸小于屏幕的分辨率。但是当我的纹理尺寸是例如1920 x 1080而我的屏幕只有800 x 400时会发生什么? 是否有任何可以缩放纹理的视口?我没有找到任何解决这个问题的方法。
答案 0 :(得分:0)
看起来你的意思是缩放而不是压缩。压缩是一种降低文件大小的技术,就像.jpg
对未压缩的.bmp
一样。所以,如果你的意思是缩放,那么它完全取决于你想要什么。如果你有一个1920x1080纹理,并希望它完全适合800x400屏幕,则需要从1920x1080 = 16x9
和800x400 = 2:1 = 16:8
拉伸。
要拉伸图像,您需要使用StretchViewport
。您将使用要显示的世界尺寸创建视口。因此,在这种情况下,1920x1080图像,或者可能是16x9,并在您的世界中使用“世界单位”放置该纹理。StretchViewport
将确保视口被拉伸到您使用的任何大小。
如果您希望它尽可能适合但保持16:9的宽高比,那么您可以使用FitViewport
。与StretchViewport
类似,每个视口(ScreenViewport
除外)都需要提供世界单位,这是一个重要的概念。在您定义世界单位之前,世界单位不是米或像素。无论如何,FitViewport
还将确保每个设备都能看到您提供的世界,但您的资产不会拉伸/变形。相反,它会创建一个“黑色”条,就像电视在宽高比不相等时那样。
ScreenViewport
,默认情况下只占用屏幕大小。因此,1920x1080像素的屏幕将显示1920x1080世界单位,640x480像素的屏幕将显示640x480世界单位。因此,屏幕具有更高的分辨率,世界上可见的更多。屏幕像素表示的世界单位数量可以更改。
有一种观点:FillViewport
就像FitViewport
一样,它会保持纵横比但总是填满屏幕。因此某些部分可能不可见。出于这个原因,我想不出这个用于FitViewport
的用途。而且ExtentVieport
是FitViewport
和ScreenViewport
之间的混合。