'게임개발팁'에 해당되는 글 1건

  1. 2016.10.24 OBB 충돌
게임개발팁/충돌2016. 10. 24. 18:58

참고서적 : 게임 물리 바이블

OBB : Oriented Bounding Box

Box = 모양을 의미.

Bounding = 상자가 복잡한 물체를 포함하고 있을 때,  물체가 차지하고 있는 공간을 나타냄.

Oriented  = 상자의 축이 표준 좌표축에 정렬되지 않아도 됨을 의미.


두 물체의 충돌 여부를 알 수 있는 경우 충돌하지 않는 물체는 충돌 검사 시스템이 처리 대상에서 제외시킨다. = 충돌 컬링(Collision Culling)

컬링 = 보이지 않는 부분은 그래픽 엔진의 성능을 높이기 위해서 처리 대상에서 제외하는 것을 의미.


OBB는 중앙점을 원점으로 하는 직교 좌표축 3개로 정의한다.

어떤 물체가 있으면 그것을 감싸는 최소한의 박스를 만든다.

그렇게되면 볼록 다면체로 OBB는 6개의 면과 12개의 변을 가지고 있다. 

만일 2개의 OBB가 서로에 대한 교차 여부를 검사한다면 잠재적인 분리축에 대해서 156번의 테스트를 해야한다.

1. 1번 OBB의 법선 6개.

2. 2번 OBB의 법선 6개.

3. 변과 변의 쌍의 총합. 12 * 12 = 144개.

여기서 OBB는 세 쌍의 면이 평행하므로 세 개의 면에 대한 법선만 고려하면 된다.

마찬가지로 방향이 다른 변은 3개뿐이고 그 방향은 모두 세 면의 법선이다.

그러므로 2 개의 OBB에 대해서 잠재적인 분리축은 15가지가 나온다. 

첫번째 OBB에 대해서 세 개의 법선이 있고 두 번째 OBB에 대해서 세 개의 법선이 존재하며,

변-변 상은 3 * 3개이므로 15개가 나온다.

그 후 OBB를 분리축에 투영해야한다. OBB의 대칭성을 이용하면 투영의 크기를 쉽게 구한다.

OBB의 정점이 극(단)점이 되므로 곱을 최대화하는 정점을 구하면 된다.





Posted by 멜데스