我很想知道如何在OpenGL中模仿旧游戏(如Atari 2600)的低分辨率进行fps游戏的正确方法.我想最好的方法是将缓冲区写入纹理,放入四边形并将其显示到屏幕分辨率.
看看http://www.youtube.com/watch?v=_ELRv06sa-c,例如(伟大的游戏!)
欢迎任何建议,帮助或示例代码.
Chr*_*ica 10
我认为最好的方法就像你说的那样,将所有内容渲染成低分辨率纹理(最好使用FBO),然后通过绘制一个尺寸大小的四边形来显示纹理(当然使用GL_NEAREST
放大过滤器作为质地).也许你也可以glBlitFramebuffer
直接从低分辨率FBO复制到高分辨率帧缓冲区,虽然我不知道你是否可以通过这种方式直接复制到默认的帧缓冲区(显示的帧缓冲区).
编辑:在查看framebuffer_blit的规范后,似乎你可以使用从低分辨率FBO复制到高分辨率默认帧缓冲区glBlitFramebuffer(EXT/ARB)
.这可能比使用纹理映射四元组更快,因为它完全绕过顶点片段管道(尽管这可能是一个简单的).另一个优点是,如果需要,您还可以获得低分辨率深度和模板缓冲区,这样可以在低分辨率背景上渲染高分辨率内容,这可能是一个有趣的效果.所以它会以某种方式发生:
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);
Run Code Online (Sandbox Code Playgroud)