AABB에는 4개의 대각선이 존재
중점 C을 지니고 각 꼭지점을 이어서 나온 대각선들
먼저 충돌 검출할 평면의 n과 가장 평행한 대각선을 찾음
그러면 대각선의 양 끝점 vmin, vmax를 찾게 됨
중점 C을 지니고 각 꼭지점을 이어서 나온 대각선들
먼저 충돌 검출할 평면의 n과 가장 평행한 대각선을 찾음
그러면 대각선의 양 끝점 vmin, vmax를 찾게 됨
이 v를 평면 방정식에 대입하여 위치를 판단한다.
n • v + d = 0
1. 두 점의 결과가 양의 영역에 있다면 평면의 바깥쪽에 AABB가 있음
2. 두 점의 결과가 음의 영역에 있다면 평면의 안쪽에 AABB가 있음
3. 두 점의 결과가 다른 경우 평면과 교차함
int CollisionAABBPlane(const D3DXVECTOR3* pMin, const D3DXVECTOR3* pMax, const D3DXPLANE& p)
{
D3DXVECTOR3 NewMin, NewMax;
for( int i=0; i<3; ++i)
{
if( p[i] >= 0)
{
NewMin[i] = pMin[i];
NewMax[i] = pMax[i];
}
else
{
NewMin[i] = pMax[i];
NewMax[i] = pMin[i];
}
}
if( D3DXPlaneDotCoord(&p, &NewMin) > 0 )
{
return FRONT;
}
if( D3DXPlaneDotCoord(&p, &NewMax) < 0 )
{
return BACK;
}
return INTERSECT;
}
참고 자료: Real- Time Rendering 2판