2011-08-15 11 views
5

OpenGLの古いゲーム(Atari 2600など)の低解像度をfpsゲームのように模倣する正しい方法がどのようにあるのか知りたいです。バッファをテクスチャに書き込んでクワッドに配置し、それを画面解像度に表示するのが最善の方法だと思います。古いゲームを模倣するためのOpenGLの低解像度

は、

に(!素晴らしいゲームを)例えば、何かアドバイスをhttp://www.youtube.com/watch?v=_ELRv06sa-cのを見てみましょう助けたり、サンプル・コードは歓迎されます。

+0

それはかなりクールに見えます。 OpenGLの経験はありませんが、ピクセル化の効果は基本的なGLSLフラグメントシェーダでは達成できませんでしたか?モノクロノイズ/グレインもあるようですが、ビデオ圧縮の可能性がありますが、高速モーションではぼかしが可能です。 –

+0

@Georgeフラグメントシェーダーでしかできないかどうかはわかりません。 –

答えて

8

私はそれを行うための最善の方法は、あなたが言ったように、なる低解像度のテクスチャ(最高FBOsを使用して行う)にすべてをレンダリングしてからちょうどGL_NEARESTを使用して、もちろん(sceenサイズのクワッドを描画することで質感を表示するだろうと思いますテクスチャの拡大フィルタとして)。おそらく、低解像度のFBOから高解像度のフレームバッファに直接コピーするのにglBlitFramebufferを使用することもできますが、この方法でデフォルトのフレームバッファ(表示されたフレームバッファ)に直接コピーできるかどうかはわかりません。

EDIT: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); 
+0

結果は本当に素晴らしいです。今私の新たな課題は、このfbo(低解像度をレンダリング)をglsl(ポストプロダクションシェーダを追加するためのフラグメントシェーダ)と混在させることです。ありがとう! – xbelanch

+1

1年後、あなたの答えは私をもう一度助けてくれました。私は低reszでシェーダの断片をコピーしようとする際に別の大きな問題があった(ハハ、私の強迫観念だ!)。私はビデオを共有しています:http://www.youtube.com/watch?v=9KPgjS7QSUA – xbelanch

関連する問題