我正在开发一个使用LibGDX框架的绘画应用程序,我正在使用他们的FrameBuffer类将用户绘制的内容合并到一个实体纹理上,这就是他们所看到的他们的绘图。这方面工作得很好,然而,用户可以绘制的区域并不总是相同的大小,我很难让它在整个窗口以外的分辨率上正确显示。
我对此进行了非常广泛的测试,似乎正在发生的情况是,FrameBuffer正在以与窗口本身相同的分辨率创建纹理,然后简单地拉伸或缩小它以适应它所在的实际区域,这对于任何比窗口大或小的绘图来说都是非常令人不快的效果。
我已经验证了,在我的过程中的每一步,我从来没有做过任何拉伸自己的事情,并且所有的东西都是以正确的尺寸和位置绘制的。我还查看了FrameBuffer类本身,试图找到答案,但奇怪的是,我也没有在其中找到任何东西,但是,考虑到我所做的所有测试,它似乎是以某种方式造成这个问题的唯一可能的地方。
我只是完全没有想法,花了相当多的时间试图解决这个问题。
发布于 2013-01-16 08:19:53
非常感谢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);发布于 2013-01-02 12:43:21
我相信我已经解决了我的问题,我将非常简要地概述一下问题是什么。
基本上,这个问题的原因在于SpriteBatch类。具体地说,假设我使用的不是过时版本的类,问题出在第181行,这里设置了投影矩阵。这行代码:
projectionMatrix.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());这导致绘制到的所有内容基本上都是按照窗口/屏幕的比例绘制的,然后拉伸以适应之后需要的位置。我不确定是否有更“合适”的方法来处理这个问题,但我只是在SpriteBatch类中创建了另一个方法,允许我使用自己的维度再次调用该方法,并在必要时调用该方法。请注意,并不是每次绘制或类似的事情都需要它,只需要一次,或者任何时候尺寸可能会改变。
https://stackoverflow.com/questions/14085212
复制相似问题