LibGDX FrameBuffer缩放

Syn*_*tik 5 java scaling textures framebuffer libgdx

我正在使用LibGDX框架处理绘图应用程序,我正在使用他们的FrameBuffer类将用户绘制的内容合并到实体纹理上,这就是他们所看到的绘图.这方面工作得很好,但是,用户可以绘制的区域并不总是大小相同,并且我无法在除整个窗口之外的分辨率上正确显示它.

我已经对此进行了非常广泛的测试,看起来似乎正在发生的事情是FrameBuffer以与窗口本身相同的分辨率创建纹理,然后简单地拉伸或缩小它以适应它原本应该在的实际区域,这是对于任何比窗口更大或更小的绘图而言,这是一种非常不愉快的效果.

我已经在我的过程中的每一步都证实了我自己从未做过任何这样的伸展,并且正确地绘制了所有内容以及正确的尺寸和位置.我也查看了FrameBuffer类本身试图找到答案,但奇怪的是也没有找到任何东西,但是,考虑到我所做的所有测试,它似乎是这个问题的唯一可能的地方以某种方式创造.

我完全没有想法,花了相当多的时间来解决这个问题.

小智 7

非常感谢Synthetik寻找核心问题.以下是解决这种情况的正确方法.(我认为!)

无论实际的设备窗口大小如何,使帧缓冲区产生正确的比率和缩放纹理的方法是将投影矩阵设置为所需的大小,如下所示:

SpriteBatch batch = new SpriteBatch();
Matrix4 matrix = new Matrix4();
matrix.setToOrtho2D(0, 0, 480,800); // here is the actual size you want
batch.setProjectionMatrix(matrix);
Run Code Online (Sandbox Code Playgroud)