ポリゴンレベルあたり判定



無駄な判定をしないようにするために私が現在とっている方法について解説します。
効率がどのくらいいいかはわかりませんがポリゴン同士の総当りよりかはましのはずです。


まず、オブジェクトを内包するx,y,z軸に沿った直方体を作り、
それを変換したあとの直方体を内包するx,y,z軸に沿った直方体を作り
それぞれとの交差判定をします。


頂点ごとにワールド座標系への座標変換を行い
ポリゴンごとにポリゴンを内包するx,y,z軸に沿った直方体を作る。


ポリゴンの直方体が
オブジェクトの直方体が重なり合っている範囲に引っかかっている
かどうかを調べ、引っかかっている場合は判定の対象とする。


xの最小値でソートを行い直方体同士の交差判定を行う。
(オブジェクトを適当に小さく分割した場合はほとんどいらないかもしれません) そのあと
1.ソートした順番でリストに直方体を加えていく
2.リストに加えられている直方体のxの最大値がリストに加えられている直方体の
  xの最小値よりも小さい場合は、リストからはずす。
3.リストに加える際、リストに加えられている直方体と交差判定を行い、
  交差しているのならば、ポリゴン同士の交差判定を行う。

・ちょっと追加
 平面の法線ベクトルと、平面の点からポリゴンの点へのベクトルの内積をとって、
それの符号が全部同じなら交差しない、そうでない場合は交差するという事で
面の判定を絞る事ができるはずです。