三角形と線分の交差判定

交差判定について書いてみます。いわゆるコリジョンですね。前回書いた平面式も利用します。

百聞は一見にしかずということで、交差判定を使えばこんなことが出来ます。

これが・・・

こうなります。

数年前に背景の仕事をしていた時、毎回地面の座標を修正するたびに手動で木を並べるのが面倒だったのでこれを書きました。

さてレイと三角形の交差判定の方法はいろいろあるのですがここでは比較的理解しやすい「頂点と三角形を線で結んだ三角錐をつくり、側面の法線とレイの内積を取って判定する」方法を書いてみます。

ray_intersection

スクリプトで計算する手順は

・衝突させたいオブジェクトの座標とベクトルを取得する

・対象モデルに含まれるポリゴンをリスト化して、ループ処理で順に交差判定をしていく

・交差判定は図のようにポリゴン(三角形)とオブジェクト(座標)を結んだ三角形の法線を外積で求め、レイと内積を取って判定していく

・交差するポリゴンが見つかったら、そのポリゴンの三角形の頂点座標と面法線から平面式で平面を定義し、レイとの交差点を求める

・オブジェクトを交差点の座標へ移動させる

これを処理したいオブジェクトの数だけ繰り返します。

参考に三角形とレイとの交差判定処理の関数のコードです(Mayaのスクリプト)。

少し応用して交差する三角形の法線ベクトルをオブジェクトの角度に変換してやれば、面法線に沿って吸着します。

rey_intersection_tank

戦車にくっついている様々なパーツもこの手法で取り付けてあります。メカモデリングは正確性が説得力につながりますから、こういった細かいことは重要なんです!

 

次回「クラメールの公式を利用する数学的な交差判定」へ

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中