10

OpenGL ESで深度関数を設定することにより、3Dシーンでオーバーラップするジオメトリがどのようにレンダリングされるかを制御できることを理解しています。gl.depthFunc(gl.LEQUAL)コードで(webgl)を使用しています。

ただし、2セットのポリゴンが一致し、色が異なる場合、結果のサーフェスは2つの色の任意の混合パターンになります(カメラの位置が変わると変化するため、ちらつきが発生します)。この画像を見てください:

ここに画像の説明を入力してください

どうすればこれを修正できますか?さまざまなdepthFunc値を試しましたが、どれもこの問題を解決しません。一致するポリゴンを単色にしたいのですが、どちらでも構いません。

4

4 に答える 4

12

これはzファイティングと呼ばれ、2つのオブジェクトが同じ深度でレンダリングされることに関連していますが、丸め誤差(および深度バッファーの精度)がときどき一方を他方の前にポップします。利用可能な解決策の1つは、glPolygonOffset関数を使用することです。

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml

このページの下部で使用例を見ることができます:

http://www.glprogramming.com/red/chapter06.html

于 2011-10-20T13:22:00.613 に答える
3

あなたが経験するのはZファイティングと呼ばれ、残念ながらそれに対する決定的な解決策はありません。何が起こるかというと、深度バッファの精度が制限されているため、丸め誤差が発生し、プリミティブのいずれかが深度テスト操作に「勝ち」ます。深度関数を変更すると、戦闘パターンの色が切り替わるだけで、削除されません。

Zファイティングを取り除く1つの方法は、ポリゴンオフセットhttp://www.opengl.org/wiki/Basics_Of_Polygon_Offsetを使用することです。

残念ながら、ポリゴンオフセットには独自の問題があります。

于 2011-10-20T13:16:16.683 に答える
2

gluPerspectiveの呼び出しで、z-nearをゼロから遠ざけるように変更してみてください。

void gluPerspective(
    GLdouble    fovy,
    GLdouble    aspect,
    GLdouble    zNear,
    GLdouble    zFar);

このWebサイトから: http ://www.opengl.org/resources/faq/technical/depthbuffer.htm

デプスバッファリングは機能しているように見えますが、ポリゴンはその前にあるポリゴンからブリードしているように見えます。どうしたの?

デプスバッファの精度を大幅に制限する方法で、zNearおよびzFarクリッピングプレーンを設定した可能性があります。一般に、これは、0.0に近すぎるzNearクリッピングプレーン値が原因で発生します。zNearクリッピングプレーンが0.0に近づくにつれて、デプスバッファの有効精度は劇的に低下します。zFarクリッピングプレーンを目から遠ざけると、深度バッファの精度に常に悪影響がありますが、zNearクリッピングプレーンを移動するほど劇的ではありません。

于 2011-10-20T13:20:42.247 に答える
0

をいじってみてくださいglPolygonOffset(factor, units)このページが役立つかもしれません。

于 2011-10-20T13:15:33.927 に答える