|
2007/09/03(Mon) 19:20:24 編集(投稿者) ■No7262 (y4yama さん) に返信 > ■No7221 (れい さん) に返信 >>2007/09/01(Sat) 00:03:33 編集(投稿者) >>私の知っている方法は >>1)は多点のポリゴンでよく用いられる方法で、一番軽く、早いです。 >>捩れている場合には使えません。
> この機会に(1)も知ることができました。これ、ある程度簡単でいいですネ!(XYの2次元の場合は) > れい さん、ありがとうございました > > 多分セインさんの目的は、3次元の立体で、平面的な表面のレンダリングかと > そのとき、ある1つの平面では(外から見た時に)境界を必ず時計回りに定義する、と決めておいたら > 光(または視線)の方向に対して表が見えているか、裏が見えているかを > 法線の向きで判定することが出来る・・・ということかと。(なんと大胆な思い込みの予測だろうか、ははっ)
んーと。
実は3次元でも同じ方法で可能なのです。 法線を求めるのにはこれが圧倒的に早いので、 ポリゴンの全頂点から面積を求めたりは普通はしないのです。
説明すると。
凸多角形なら、どの隣接する3点を選んでも、その外積は(符号付の)法線と同じ向きを向きます。 凹多角形の場合は、凹んだところの3点を選ぶとその外積は法線と反対の方向を向きます。 それ以外の凸な3点では正しい法線を返します。
ですので、凹多角形の場合は凸多角形に変形するか、凸な3点を取得できればいいことになります。 もちろん後者の方が早くて簡単です。
局所的に凸である3点を探す方法として、一次関数の最大値・最小値で探すという方法があります。 その特殊なタイプが前の投稿の方法で、 一次関数としてf(x,y)=xとf(x,y)=yを取ったわけです。計算無いから早いので。
で、これはそのまま3次元でも適用可能です。
一次関数(例えばf(x,y,z)=x)に、ポリゴンの全点を入れ、 最大値を示す頂点が1個、もしくは2個の場合、その前後の点の3点から、法線が求まります。 そうで無い場合は違う関数を使ってやり直します
これだけで、3次元中にある凹多角形の法線は計算できます。 捩れている場合はダメですが。
追記 また解決済みチェックを忘れた
|