Für die Beschreibung einer AABB kann die folgende Struktur verwendet werden:
struct CAABB
{
D3DXVECTOR3 Mittelpunkt;
D3DXVECTOR3 Ausdehnung;
};
Bei einem Treffertest wird nun der Abstand von Trefferposition und Box-Mittelpunkt mit der Box-Ausdehnung verglichen. Der Test kann vorzeitig abgebrochen werden, sofern der Abstand entlang mindestens einer Achse (x, y oder z) größer ist als die zugehörige Box-Ausdehnung.
inline bool Check_AABB_Hit(CAABB* pBox, D3DXVECTOR3* pHitPosition)
{
if(fabs(pBox->Mittelpunkt.x – pHitPosition->x) >
pBox->Ausdehnung.x)
return false;
if(fabs(pBox->Mittelpunkt.y - pHitPosition->y) >
pBox->Ausdehnung.y)
return false;
if(fabs(pBox->Mittelpunkt.z - pHitPosition->z) >
pBox->Ausdehnung.z)
return false;
return true;
}
Der Kollisionstest funktioniert nach dem gleichen Prinzip, nur müssen hierbei die Ausdehnungen beider Boxen berücksichtigt werden:
inline bool AABB_AABB_Collision(CAABB* pBox1, CAABB* pBox2)
{
if(fabs(pBox2->Mittelpunkt.x - pBox1->Mittelpunkt.x) >
pBox2->Ausdehnung.x + pBox1->Ausdehnung.x)
return false;
if(fabs(pBox2->Mittelpunkt.y - pBox1->Mittelpunkt.y) >
pBox2->Ausdehnung.y + pBox1->Ausdehnung.y)
return false;
if(fabs(pBox2->Mittelpunkt.z - pBox1->Mittelpunkt.z) >
pBox2->Ausdehnung.z + pBox1->Ausdehnung.z)
return false;
return true;
}