3

ピクセルがまだ描画されていない領域にのみ描画するような方法で深度バッファを利用することは可能ですか?

私は単純な 1 色の三角形をレンダリングしています。それらの多くはオーバーラップする可能性があり、画面に表示されているよりも多くのピクセルをレンダリングしているため、レンダリング速度が大幅に低下します。

これは 3D レンダリング モードで簡単に実行できます。深度テストを有効にして、異なる Z 位置に三角形を設定するだけです。しかし、それは 2d モードでは機能しません。すべての三角形を前よりも高い位置に設定することはできません。これは、深度バッファーの制限が近づいたときに、特定の高さの後にレンダリング品質が低下するためです。

シェーダーでこれを行うにはどうすればよいですか? または、シェーダーが必要ない場合。シェーダーなしでそれを行う方法は?

4

2 に答える 2

0

(glPolygonOffsetを使用して)ポリゴンオフセットを各三角形に割り当て、深度テストを有効にします。

于 2012-08-19T12:23:18.950 に答える
0

すべての三角形を前よりも高い位置に設定することはできません。これは、深度バッファーの制限が近づいたときに、特定の高さの後にレンダリング品質が低下するためです。

やり方を間違えた場合にのみ発生します。

24 ビットの深度バッファーは、1600 万の異なる深度値から選択できます。値を適切に計算するだけです。確かに、正確なメカニズムはハードウェア固有ですが、少なくとも 400 万の個別のレイヤーを取得できないほど具体的ではありません。

簡単な算数の問題です。整数範囲 [0, N] から浮動小数点範囲 [0, 1] にマップする関数を作成しています。ここで、N は三角形の数です。余裕を持たせるためだけに 400 万とします。

したがって、特定の三角形の Z 値は ですk/N。ここで、k はその三角形の整数インデックスです。これは、シェーダーで簡単に実行できるはずです。

最悪の場合、32 ビットの浮動小数点深度バッファーを作成できます。

于 2012-08-19T12:29:01.773 に答える