3D空間での衝突判定その1

バウンディングボックス(AABB - Axis Aligned Bounding Box)を用いた領域判定。に関する個人的メモ。

class AABB
{
  float    min_x, min_y, min_z,
           max_x, max_y, max_z;
};

のようなデータ構造になる。バウンディングボックス同士の交差判定は

bool cross_test(AABB& in)			// AABB同士の交差テスト
{
  return (max_x > in.min_x && min_x < in.max_x &&
          max_y > in.min_y && min_y < in.max_y &&
          max_z > in.min_z && min_z < in.max_z);
}

こんな感じ。3D空間での当たり判定においては、すべての面に対して衝突判定を行ってしまうと、扱うオブジェクトやポリゴン数の増加に伴い衝突判定のコストが半端無いことになってしまう。
そこで、バウンディングボックスなどで大まかなあたりをつけてから厳密な判定を行ったほうが良い。シューティングゲームなどではバウンディングボックスか境界球のみのいい加減な判定でもかまわないかも。