Sample14-Aの解説

 

Sample14-AはOctreeを使用した当たり判定です

クアッドツリーとほぼ一緒ですが、クアッドツリーとは違い高さも考慮する事ができます

メモリの消費を考えながら分割すると、コスト削減になります

使い方は、ほぼクアッドツリーと一緒です

なお、今回から当たり判定をCollisionModel内でやるのではなく

CollisionHelperクラスでやる事にします

機能はCollisionModel内にある物とまったく一緒です

 

OctTree = new OctTree(int,CollisionModel)
コリジョンモデルを分割します
intに分割数。CollisionModelに対象となるモデルを与えてください
bool CollisionHelper.CheckCollision(OctTree,Vec3,Vect3,Vect3,ref Vect3,out Vect3,out MaterialColors, out int);
線分と点の存在するオクトリーに含まれる三角形との当たり判定をとります
1つ目のVector3型にはオクトリー空間判定用の位置を、2つ目には線分の開始位置、3つ目は終了位置を設定してください
4つ目には当たっている座標、5つ目には法線
MaterialColorsには当たっている面のマテリアル、intには1つ目のVector3が存在するオクトリーの空間番号が入ります
1つ目のVector3型は省略可能ですが、オクトリーの判定上、省略しない事をお勧めします

空間番号を得るには

int OctTree.CheckCellParents(int)
任意空間の親の番号を知ることが出来ます

接しているバウンディングボックスを習得するには

BoundingBox CollisionHelper.GetCellsBox(Octree,BoundingBox)
任意バウンディングボックスの8コーナーが接しているバウンディングボックスを習得できます

コメント

タイトルとURLをコピーしました