渲染到半尺寸的帧缓冲区,然后将其缩放以实现像素化的外观

时间:2014-08-28 11:10:31

标签: java opengl libgdx framebuffer

我即将用libGdx创建一个小型2D桌面游戏,我希望它能从像Flappy Bird这样的游戏中获得你所知道的复古像素化外观。为了达到这个效果,我想到了以下几点:

  1. 创建游戏窗口(例如640x480)
  2. 创建一半大小的帧缓冲区(即320x200)
  3. 将所有内容渲染到帧缓冲区
  4. 从帧缓冲区获取纹理
  5. 使用SpriteBatch将纹理绘制到屏幕上,将其缩放2倍并使用TextureFilter.Nearest。
  6. 我知道我可以使用SpriteBatch.draw()单独缩放每个精灵但我认为,以原始分辨率渲染所有内容并且只是放大最终构图可能会更容易。

    上述技术也是获得像素化外观的合适方式吗?

1 个答案:

答案 0 :(得分:1)

你的想法听起来像一个非常好的方法。缺点是它确实涉及额外的数据拷贝,但另一方面,您的原始渲染仅为1/4像素,这可以节省相当多的渲染开销。

在普通的OpenGL中,您可以将glBlitFramebuffer()用于第5步。这需要OpenGL 3.0或更高版本。它与绘制纹理四边形的操作基本相同,但它只需一次调用,底层实现可能更有效。