【问题标题】:LibGDX FrameBuffer scalingLibGDX FrameBuffer 缩放
【发布时间】:2012-12-14 15:29:49
【问题描述】:

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

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

我已经证实,在我制作过程的每一步中,我从来没有做过任何这种拉伸自己,并且所有的东西都是按照正确的尺寸和位置绘制的。我还研究了 FrameBuffer 类本身以尝试找到答案,但奇怪的是在那里也没有发现任何东西,但是,鉴于我所做的所有测试,它似乎是这个问题唯一可能出现的地方以某种方式创建。

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

【问题讨论】:

  • 欢迎来到 StackOverflow。如果您有一个离散的问题并展示您尝试过的内容、发生的情况等,您的帖子会得到更好的回复。
  • 我真的很想发布一个更具体的问题并提供更多细节,但考虑到问题的性质,我根本不知道应该把重点放在哪里,完全不知所措.我很乐意根据要求发布任何可能有帮助的内容,但目前我什至不确定在此处添加哪些内容会真正有帮助。

标签: java textures libgdx scaling framebuffer


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我相信我已经解决了我的问题,我将简要概述问题所在。

    基本上,这个问题的原因在于 SpriteBatch 类。具体来说,假设我没有使用该类的过时版本,问题出在第 181 行,其中设置了投影矩阵。行:

            projectionMatrix.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    

    这导致所有被绘制的东西,本质上,都是按照窗口/屏幕的比例绘制的,然后被拉伸以适应之后需要的位置。我不确定是否有更“正确”的方法来处理这个问题,但我只是在 SpriteBatch 类中创建了另一个方法,它允许我用自己的尺寸再次调用这个方法,并在必要时调用它。请注意,并非每次抽奖或类似情况都需要它,只需一次或任何时候尺寸可能会发生变化。

    【讨论】:

      猜你喜欢
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      相关资源
      最近更新 更多