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コーナーが接しているバウンディングボックスを習得できます
コメント