渲染到一半大小的帧缓冲区,然后将其放大以实现像素化外观



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

  1. 创建游戏窗口(例如640x480)
  2. 创建一半大小的帧缓冲区(即320x200)
  3. 将所有内容渲染到帧缓冲区
  4. 从帧缓冲区获取纹理
  5. 使用SpriteBatch将纹理绘制到屏幕上,将其放大2倍并使用TextureFilter.Nearest

我知道我可以用SpriteBatch.draw()单独缩放每个精灵,但我认为,以原始分辨率渲染所有内容并放大最终构图可能会更容易。

那么,上面的技术是获得像素化外观的合适方法吗?

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

在普通OpenGL中,可以使用glBlitFramebuffer()执行步骤5。这需要OpenGL 3.0或更高版本。它本质上与绘制纹理四边形的操作相同,但它是一个单独的调用,底层实现可能更高效。

最新更新