単純に対象となる2つのオブジェクトを引数にしてbool値でAABB判定の結果を返す関数を作りました。
C++
1// AABB判定のコード 2#include <iostream> 3using namespace std; 4 5bool AABB(float boxA[2][3], float boxB[2][3]) 6{ 7 8 return( 9 boxA[0][0] > boxB[1][0] && 10 boxA[1][0] < boxB[0][0] && 11 boxA[0][1] > boxB[1][1] && 12 boxA[1][1] < boxB[0][1] && 13 boxA[0][2] > boxB[1][2] && 14 boxA[1][2] < boxB[0][2] 15 ); 16 17} 18 19int main() 20{ 21 // 座標の{最大値},{最小値} 22 // このテストでは1つまりtrueで衝突しているはず 23 float bA[2][3] = {{10,10,10},{5,5,5}}; 24 float bB[2][3] = {{11,11,11},{9,9,9}}; 25 26 bool a = AABB( 27 bA, 28 bB 29 ); 30 cout << a; 31 return 0; 32} 33
引数には2つの対象しか入らないため、対象オブジェクトの数に応じたAABB判定関数を実行してやる必要があります。
ObjectM -> 動き回るオブジェクト。どのオブジェクトとも衝突の可能性がある。
ObjectA,B,C -> 停止しているが、Mとの衝突の可能性があるオブジェクト。
つまり、AABB(M,A); AABB(M,B); AABB(M,C);をすべて書く必要がある。
2つのオブジェクトだけ!!とかであれば別段どうってことはないのですが、
数が増えていくにつれて同じ関数の実行回数が増えていくので、すぐクラッシュしたりするんじゃないかと心配です。
AABB判定ってこんなものですか?
それともやはりこのAABB判定をもっと工夫したほうがいいですか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。