我正在使用LibGDX框架开发绘画应用程序,并且正在使用其FrameBuffer类将用户绘制的内容合并到实体纹理上,这就是他们所看到的图形。该方面的效果很好,但是,用户可以绘制的区域并不一定总是相同的大小,而且我很难使它以除整个窗口之外的其他分辨率正确显示。

我已经对此进行了广泛的测试,似乎正在发生的情况是FrameBuffer正在以与窗口本身相同的分辨率创建纹理,然后简单地对其进行拉伸(stretch)或收缩以适合其实际所在的区域,这就是对于大于或小于窗口的任何图形,这都是非常不愉快的效果。

我已经在过程的每一步中证明,自己从来没有做过任何这样的事情,而且在正确的尺寸和位置上,一切都应以怎样的方式进行,并且应该绘制在什么地方。我也研究了FrameBuffer类本身以尝试找到答案,但奇怪的是,那里也没有任何东西,但是,考虑到我已经完成的所有测试,看来这是唯一可以解决此问题的地方创造了某种方式。

我花了很多时间尝试解决此问题,但完全没有想法。

最佳答案

非常感谢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);

10-01 00:25