1

OpenGLベースのレンダラーで同一平面上のポリゴンでのZファイティングに対処しようとしています。レガシーの問題のため、私は多くの点で手を縛られています。古いシステム内でデータフローがどのように機能するかにより、主にレンダラーは近視眼的である必要があります。

ユーザーは任意の位置にジオメトリを描画することができ、2つのポリゴンをオーバーラップすることを決定したときを検出する実際の方法はありません。glPolygonOffsetを使用すると、ポリゴンのいずれかでオフセットするための知識が必要になります。また、データの同一平面上の性質により、Zファイティングは丸め誤差から発生しているため、射影行列で遊んでも問題が解決しないことは間違いありません。レンダリングループ中にこの問題がいつ発生するかわからないため、深度書き込みのオンとオフを切り替えることも実際にはオプションではありません。

だから提案?

4

1 に答える 1

2

レッドブックにはいくつかあります。たとえば、最初にすべての共平面ポリゴンをステンシル バッファーにレンダリングし、カラー バッファーに触れずに (つまりglColorMask(0,0,0,0))、Z テストを実行して深度バッファーを更新することができます。次に、深度テストと深度書き込みをオンにし、カラー書き込みとステンシル テストを有効にして、レイヤー順でポリゴンをレンダリングします。ステンシル バッファーは、以前の深度テストの準備の結果を適用します。

于 2013-02-12T23:33:46.713 に答える