게임에서 오브젝트의 충돌을 다룰 때 크게 원과 원의 충돌과, 사각형과 사각형의 충돌이 있다.
충돌 조건은 두 원의 중심 간 거리가 두 원의 반지름 합보다 작거나 같을 때이다.
충돌을 감지하기 위해 두 공의 사이의 거리를 구해야 한다.
ㄴ 공의 중심 좌표의 차이를 통해 피타고라스의 공식으로 구할 수 있다.
원 1의 중심 : (x1, y1), 반지름 : r1
원 2의 중심 : (x2, y2), 반지름 : r2
충돌 감지 함수() {
공1의 반지름 = 30;
공2의 반지름 = 50;
공1 중심위치벡터 = createVector(100,100);
공2 중심위치벡터 = createVector(150,170);
두 공 중심을 잇는 벡터 = p5.Vector.sub(공2 중심위치벡터, 공1 중심위치벡터);
두 공 중심 사이 거리 = 두 공 중심을 잇는 벡터.mag();
두 공 반지름 합 = 공1의 반지름 + 공2의 반지름;
if (두 공 중심 사이 거리 <= 두 공 반지름 합) {
충돌!!!
}
}
1) AABB는 정렬된 두 사각형 간 충돌을 처리로 두 사각형이 서로 겹치는지 확인하기 위해 각각의 사각형의 꼭지점, 혹은 면의 좌표가 다른 사각형 안으로 들어갔을때 충돌
ㄴ AABB는 두 사각형이 평행할때(그리고 사각형이 좌표축하고도 평행할때) 충돌하는걸 계산할 수 있다.
2) OBB란 방향성 있는 경계 상자라는 뜻으로 OBB는 3D공간에서 물체의 충돌을 검사하는데 사용되는 방법으로 물체를 감싸는 직육면체 형태의 상자이다.
ㄴ 물체의 회전과 크기를 고려하여 충돌 여부를 판단한다 즉 AABB와 달리 평행하지 않은 사각형들의 충돌을 계산할때 사용된다.
ex) 회전한 이미지의 틀을 좌표측과 평행한 사각형으로 감싸 충돌을 AABB로 처리할 수도 있다.