我很想知道如何在OpenGL中模仿旧游戏(如Atari 2600)的低分辨率进行fps游戏的正确方法。我想最好的方法是将缓冲区写入纹理,放入四边形并将其显示为屏幕分辨率。
看看http://www.youtube.com/watch?v=_ELRv06sa-c,例如(伟大的游戏!)
欢迎任何建议,帮助或示例代码。
答案 0 :(得分:10)
我认为最好的方法就像你说的那样,将所有内容渲染成低分辨率纹理(最好使用FBOs完成),然后通过绘制一个大小适中的四边形来显示纹理当然使用GL_NEAREST
作为纹理的放大滤镜。也许你也可以使用glBlitFramebuffer
直接从低分辨率FBO复制到高分辨率帧缓冲区,虽然我不知道你是否可以这样直接复制到默认的帧缓冲区(显示的帧缓冲区)。 / p>
编辑:在查找framebuffer_blit的规范后,您似乎可以使用glBlitFramebuffer(EXT/ARB)
从低分辨率FBO复制到高分辨率默认帧缓冲区。这可能比使用纹理映射四元组更快,因为它完全绕过顶点片段管道(尽管这可能是一个简单的)。另一个优点是,如果需要,您还可以获得低分辨率深度和模板缓冲区,这样可以在低分辨率背景上渲染高分辨率内容,这可能是一个有趣的效果。所以它会以某种方式发生:
generate FBO with low-res renderbuffers for color and depth (and stencil)
...
glBindFramebuffer(GL_FRAMEBUFFER, lowFBO);
render_scene();
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBlitFramebuffer(0, 0, 640, 480, 0, 0, 1024, 768,
GL_COLOR_BUFFER_BIT [| GL_DEPTH_BUFFER_BIT], GL_NEAREST);