私はシャツのモデルを配置できる3Dヒューマノイドモデルを持っています。この状態では、OpenGLレンダリングは典型的なzファイティングの問題を抱えています。唯一の解決策は隠れた頂点がレンダリングされないようにすることです。隠れた頂点が自動的にレンダリングされないようにする方法や、隠れた頂点を削除するアルゴリズムを自動的に回避する方法はありますか?オープンループの3Dモデルの隠れた頂点を削除する
答えて
ステンシルバッファを使用するのが比較的簡単です。アイデアは簡単です。まず、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戦闘が、なら
、またglPolygonOffset
溶液を考える - GL_POLYGON_OFFSET_FILL
を有効にして(glPolygonOffset(1.0, 1.0)
を呼び出しますあなたが好きな場合は他の引数を使用してください; 1.0
はロットです)。オフセット充填を無効にするか、または同じ効果を持つglPolygonOffset(0.0, 0.0)
に続いてボディを描画します。
ポリゴンオフセットは、ジオメトリテストの対象となる前に、ジオメトリの深さ値をわずかにずらすように機能します。これは多かれ少なかれオフセットを与えたものがオフセットなしのものの後ろに同じか、少しだけ後ろにある限り前にあるべきだと言います。
- 1. モデル内の頂点の重複排除
- 2. Three.js(面)のメッシュ3D頂点のレンダリング
- 3. OpenGL-GLSL描画3D GL_LINES頂点シェーダ対頂点
- 4. 3d objファイル、頂点の順番対面
- 5. 頂点と接続された頂点
- 6. Googleマップを削除するDataLayerの頂点
- 7. 頂点の頂点を頂点で4.2で検証する
- 8. CのiGraphグラフの最大次数の頂点を削除
- 9. igraph:レイアウトから頂点を削除する
- 10. 頂点インデックスを高速に削除する[igraph Python]
- 11. R:ノードを削除した後に隣接する頂点を計算する
- 12. リストの繰り返しと頂点の重複アイテムの削除
- 13. 与えられた3D頂点を持ち、VTKで変換する(2D)ポリゴン
- 14. 交差点の重心パラメータを与えられた点に最も近い3D三角形の頂点
- 15. 頂点シェーダとフラグメントシェーダから法線を削除します
- 16. iOSは.objファイルから面と頂点を削除します
- 17. ポリゴン座標/頂点/ノード(GoogleマップV3)の削除方法
- 18. Three.jsのBufferGeometryから頂点とその属性を削除する
- 19. メッシュから面とその頂点のリストを削除する方法
- 20. 新しい頂点を3D構造内に追加する
- 21. 3Dモデルで異なるuv座標を持つ重複頂点位置があるのはなぜですか?
- 22. 三角形の3D頂点からのdz/dx値の決定
- 23. 3Dエンジン - 頂点の分割を正しく行う方法
- 24. 頂点シェーダ対頂点
- 25. 頂点からの頂点バッファ
- 26. テクスチャデータを頂点シェーダの頂点データとして解釈する
- 27. iPhone Cheetah 3D OpenGL ES頂点バッファオブジェクト(VBO)の例
- 28. 3D点群とCADモデルを一致
- 29. 3dモデルの表面上の点を計算する
- 30. 頂点バッファデータを配列頂点データフロー
実際にZと戦っていて、交差していない場合、 'glDepthFunc(GL_LEQUAL);を試してみるか、深度テストをまったく使わないで、' glEnable(GL_CULL_FACE);でマルチパスレンダリングをする代わりにZソートを使います。 'glFrontFace(GL_CCW);'と 'glFrontFace(GL_CW);'の各設定では、最初に背面を、そして次に前面をレンダリングします。 – Spektre