0

を使用して OpenGL で深度テストのオン/オフを切り替えることができますがglEnable( GL_DEPTH_TEST ); 、これは描画呼び出し全体のテストのオン/オフを切り替えます。

フラグメントごとにテストを制御したいと思います。

これは、次の効果を達成するためです: チェス盤のパターンでは、プリミティブのピクセルの半分が隠される可能性がありますが、残りの半分は常に描画されます。カメラ。

説明のために、ピラミッドのピクセルの半分だけがその前のボックスによって隠されている可能性があるこの例を参照してください。

赤いボックスが最初に描画され、緑のピラミッドが描画されるときに既にフレーム バッファーにあることに注意してください。

また、注: 特殊な深度テストを最後にオブジェクトを描画するため、赤いボックスが最初に描画されるケースは発生しません。

私の目的では、この方法で描画されたすべてのオブジェクトは凸状であり、それ自体を覆い隠すことはありません。

効果のイラスト

フラグメント シェーダーでチェス盤パターンを取得する方法を知っています。

                float xm2 = mod( gl_FragCoord.x, 2.0 );
                float ym2 = mod( gl_FragCoord.y, 2.0 );
                if ( int(xm2) != int(ym2) )
                        discard;

しかし、私の場合、フラグメントごとに破棄をフラットにしたくはありません。フラグメントごとに深度テストを切り替えたいだけです。

OpenGL-ES 3.0 をターゲットにしています。

4

1 に答える 1