-1

私はOpenGLで2D(実際には2.5D)アイソメトリックゲームを書いています。非常に複雑になる可能性のあるタイルの並べ替えを回避するために、ある種の深度バッファーをシミュレートしようとしています。タイルごとに2つの画像があります。1つは色情報、もう1つは深度情報です。

画像1:http : //dl.dropbox.com/u/91457585/depth_buffer_test.png

最初のアプローチとして、私はこれらの写真を作成しました。アイデアは、それらを互いに重ねて描画し、シェーダーを使用して深度テストを実行することです。この場合、私が知っていることはあまり意味がありませんが、それが技術的に可能かどうかを確認するための最初のアプローチにすぎません。

だから今私の問題に!

以下に、シェーダーのコードを示します。フレームバッファの深度情報をオブジェクトの深度情報と比較することになっています。しかし、それはうまくいかないようで、今私はどこかでこれが私がしたように不可能であると読んだ。

リスト:

#version 130
uniform sampler2D colorMap;
uniform sampler2D zMap;  
uniform float level;

out vec4 gs_FragColor[ 2 ];

void main(void) { 
    float z = texture2D( zMap, gl_TexCoord[0].st ).r; 
    if ( z > gs_FragColor[ 1 ].r ){
      gs_FragColor[ 1 ] = vec4( z, 0, 0, 1 );
      gs_FragColor[ 0 ] = texture2D( colorMap, gl_TexCoord[0].st ).rgba;
    }
} 

では、デプスバッファをシミュレートするためのより良い方法はありますか?たぶん、実際のデプスバッファに書き込むことによって?

4

2 に答える 2

0

深度バッファーをシミュレートする (複雑で、おそらく非常に遅い) 方法がありますが、そのようなものが必要な理由がわかりません。通常の OpenGL 深度テストを使用することをお勧めします。タイルの各フラグメントについて、対応する深度値をテクスチャで検索し、gl_FragDepth. ホスト コードで深度テストを有効にしている場合 ( glEnable( GL_DEPTH_TEST))、OpenGL がすべての作業を行います。

于 2013-02-25T10:36:33.537 に答える