2009-04-17 6 views
3

私は3Dモデリングアプリケーションを持っています。今は両面メッシュを描画していますが、オブジェクトが閉じているときには片面に切り替える必要があります。閉じた多角形メッシュが反転していますか?

ポリゴンメッシュが閉じている(境界線がない/完全に周期的な)場合、オブジェクトが現在反転しているかどうかを常に確認して、自動的に修正する必要があるようです。

フリップされているということは、法線がオブジェクトからではなくオブジェクトを指し示すことを意味します。私の巻き線の規則と現在のフロントフェイスの設定が一致していないため、反転されていますが、法線から直接法線を計算するので、法線を見るのは簡単な方法です。

私が考えていたことの1つは、バウンディングボックスを取り出し、最高点を見つけて、その通常点が上下にあるかどうかを確認することでした。もしそれがダウンしていれば、オブジェクトは反転します。

しかし、このソリューションは縮退したジオメトリや浮動小数点エラーでエラーが発生する可能性があります。私は1つの点しか見ていないためです。私は6軸のすべてのエクステントを得ることができたと思いますが、それはちょっと良いクルージュのように思えますが、適切な解決策ではありません。

これを行うための堅牢で簡単な方法はありますか?堅牢なハードも働くだろう.. :)これはそこに着くための堅牢な、しかし遅い方法です

+0

「反転した」とはどういう意味なのか、つまりx、y、zに反転していることを説明してください。 –

+1

法線が内側を指している場合(外側を指している必要があるため)、彼はそれを意味すると思います。 –

+0

あなたはアプリを書いているので、すべての三角形が「右手のルール」に従うという規約を紹介できますか?すなわち、ポイント0からポイント2までの三角形の周りに右手を巻きつける場合、法線は親指の方向を指します。 –

答えて

5

:あなたの閉じ外に保証することが

は重心(それを強制からのオフセットバウンディングボックスのコーナーを取りますポリゴンメッシュ)、それからメッシュ上の任意の三角形の中心点まで線分を作成します。

その線分と三角形の法線との間の角度を測定します。

あなたのメッシュの各三角形の面(線分を生成するために使用した三角形を含む)と線分を交差させます。

交差点が奇数の場合、法線と線分の間の角度は<です。偶数がある場合は180より大きいはずです。

交差点が偶数の場合は、番号を逆にする必要があります。

これは、非常に複雑なサーフェスでも機能しますが、閉じているか、故障している必要があります。

2

を「私は両面メッシュを描くよ」なぜあなたはそれをやっていますか? OpenGLを使用している場合は、すべての作業を自分で保存して保存する方がはるかに優れています。

​​

この場合、すべてのポリゴンは常に両面です。
片面照明を使用する唯一の理由は、オープンメッシュまたは部分的に逆メッシュのメッシュがあり、非表示にすることで内側にどのような部分が含まれているかを何らかの形で示したい場合です。

一般に、あなたが提起している問題は、ジオメトリ処理とAFAIKの未解決の問題です。常に方向性を判断できる確かな一般的な方法はありません。あなたが示唆するように、ほとんどの場合常にヒューリスティックが働きます。
もう1つのアプローチは、有名なポイント・イン・ポリゴン・アルゴリズムを思い起こさせるものです。メッシュ上の頂点を選択し、メッシュ上の線を法線方向に射します。レイが偶数の面に当たった場合、法線は外側に向けられ、奇数の場合は法線が内側に向いています。交差点としての原点を数えないことに注意してください。この手法は、メッシュが閉じたマニホールドであり、光線が2つのポリゴンの間を正確に通過した場合にいくつかのエッジケースに達する場合があります。

+0

この回答に感謝します。 明確にするために、私は既存のグラフィックパイプライン用の新しいジオメトリタイプを作成しています。私はちょうどいくつかの描画オプションで、テッセレーションメッシュを提供しています。この場合、閉じたオブジェクトに対して片面を描画する他のジオメトリタイプの動作を、カメラが内部にあるときに見ることができるように一致させようとしています。それはまだisoparameter線を描くので、あなたはどこにいるのかを知ることができます。 – tfinniga

+1

両面照明をオンにすると、OpenGLではパフォーマンスに影響があります。必要性を避ける方法があれば、それは有益かもしれません。また、シェイダーとFFパイプラインを使用しようとすると、シェーダでの両面ライティングの処理がずっと面白くないことにも意味があります。 –

関連する問題