2016-03-23 21 views
1

私はシャツのモデルを配置できる3Dヒューマノイドモデルを持っています。この状態では、OpenGLレンダリングは典型的なzファイティングの問題を抱えています。唯一の解決策は隠れた頂点がレンダリングされないようにすることです。隠れた頂点が自動的にレンダリングされないようにする方法や、隠れた頂点を削除するアルゴリズムを自動的に回避する方法はありますか?オープンループの3Dモデルの隠れた頂点を削除する

+0

実際にZと戦っていて、交差していない場合、 'glDepthFunc(GL_LEQUAL);を試してみるか、深度テストをまったく使わないで、' glEnable(GL_CULL_FACE);でマルチパスレンダリングをする代わりにZソートを使います。 'glFrontFace(GL_CCW);'と 'glFrontFace(GL_CW);'の各設定では、最初に背面を、そして次に前面をレンダリングします。 – Spektre

答えて

2

ステンシルバッファを使用するのが比較的簡単です。アイデアは簡単です。まず、glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE)glStencilFunc(GL_ALWAYS, 1, 1)でシャツを描きます。これは、あなたがシャツを描くときはいつでもステンシルバッファにビットを設定します。次に、モデルをglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP)glStencilFunc(GL_NOTEQUAL, 1, 1)で描画します。これは、シャツが既に描いているピクセルに触れない場合にのみモデルを描画します。

欠点に関する注意:モデルを分割して問題のあると思われるセクション(胴体)にのみ適用する必要があります。そうしないと、モデルのシャツ上に描画される他の部分が遮られます(腕を言う)。最良の結果を得るには、シャツの裏面を刈るようにしてください。それは従って、多かれ少なかれランダム精度のばらつきに起因する画素ごとのある前に表示される同じ深さで、すなわち異なる面本物のz戦闘が、なら

1

、またglPolygonOffset溶液を考える - GL_POLYGON_OFFSET_FILLを有効にして(glPolygonOffset(1.0, 1.0)を呼び出しますあなたが好きな場合は他の引数を使用してください; 1.0はロットです)。オフセット充填を無効にするか、または同じ効果を持つglPolygonOffset(0.0, 0.0)に続いてボディを描画します。

ポリゴンオフセットは、ジオメトリテストの対象となる前に、ジオメトリの深さ値をわずかにずらすように機能します。これは多かれ少なかれオフセットを与えたものがオフセットなしのものの後ろに同じか、少しだけ後ろにある限り前にあるべきだと言います。

関連する問題