2次元レースゲームのコース当たり判定できた

|

2drace01.jpg

GAME PROGRAMMING GEMSのアルゴリズム。
水平な(すべての頂点のY座標が0な)4角形があるとして、ある点P(X,Z)がその4角形の各辺からどのぐらいの割合の位置にあるのかを高速に割り出せるものです。一度に一方向(縦横/前後)しか測定できませんが、それでも高速です。
とりあえず前後方向に調べるとして
P:調べたい位置
Pl:後方の辺上の任意の点
Pt:前方の辺上の任意の点
Nl:内側を向いた後方の辺上の単位法線
Nt:内側を向いた前方の辺上の単位法線
・:ベクトルの内積
Vlp=P-Pl
Vtp=p-pt
として求める値、D(0~1の浮動小数点数値)は
D=Vlp・Nl/(Vlp・Nl + Vtp・Nt)

このDは後方の辺から前方の辺への位置の割合を示していて、後方の辺上では0.0、前方の辺上では1.0になるばかりではなく、中間では0.5、4角形から前方にはみ出すと1.0以上、後方に出ると、0.0以下と適切な値を返してくれます。この関数が驚異的なのは早さもありますが、4角形がどんな形であっても使えるということです。もちろん後方の辺と前方の辺が平行でなくても全然かまいません。すごいっすねぇ

デバック用に頂点だとか辺法線を表示してますが、一応ちゃんと当たり判定してます。あたった後の処理は減速するだけなんですが。まぁとりあえず一息つけます。
でもよく考えてみたら、これは当たり判定に使うべきではない?この限定条件ならもっと高速なアルゴリズムがあるんだろうか?

このブログ記事について

このページは、PipeRが2005年11月13日 16:55に書いたブログ記事です。

ひとつ前のブログ記事は「当たり判定用コースの判別」です。

次のブログ記事は「CAVE8」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01a