2012년 4월 1일 일요일

AABB와 구 교차 ( Intersecting AABB and sphere )


AABB의 점들 중에서 구의 중심과 거리가 가장 가까운 점을
찾아서 충돌 확인한다.


AABB이므로 각 축별로 구의 중심과 거리를 확인한다.

구의 중심이 v_min과 v_max 사이에 있을 경우는 서로 교차하므로
따로 검사가 필요 없다.

-->
bool CollisionSphereAABB(Sphere& s, AABB& aabb) {
        float dist = 0.0f;

        for(int i=0; i<3; i++)
        {
                if( s.center[i] < aabb.v_min[i] )
                {
                        d += ((aabb.v_min[i] - s.center[i]) *
                                (aabb.v_min[i] - s.center[i]));
                }
                else if( s.center[i] > aabb.v_max[i] )
                {
                        d += ((s.center - aabb.v_max[i]) *
                                (s.center - aabb.v_max[i]));
                }
        }

        if( dist > s.center * s.center )
                return false;

        return true;
}


참고 문헌
Real-Time Rendering 2판
Real-Time Collision Detection

댓글 없음:

댓글 쓰기