본문 바로가기
코드

AABB 충돌 검사 방식에서의 정확한 구 검출

by ehei 2006. 7. 6.


1152156929_BoundingSphere.zip

내가 구상한 게임은 다수의 구가 인접해있다따라서 Axis Aligned Bounding Box 형태의 충돌 검사는 부적절하다구를 덮기 위해 상자의  변은 최소한 구의 지름이 되어야 하는데아래 그림과 같은 문제가 발생한다.


그러나 AABB 방식은 엔진이 기본적으로 제공하는데다가검사도 빠르기 때문에 간단히 포기하기에는 아까웠다그래서 검출에는 AABB 쓰고타당성 조사는 공식(직선과  사이의 최단 거리 구하기) 사용하여 문제를 해결했다.

 

공식을 이해하는데 시간이 걸렸지만치환으로 유도되므로 간단하다고   있다.


인용좋은 게임을 만드는 핵심원리게임 수학과 물리거기에 이해하기 쉽게 주석을 곁들였다.

(1)     직선 L 방향 벡터를 구한다 값은 단위 벡터가 되든 안되든 관계없다.




(2)     직선 L에서 투영벡터의 길이를 구한다어려워 보이지만단순히 공식일 뿐이다책의 투영 벡터 부분을 살피면 있다책에서는 t > 0, t < 1 때를 언급하지만 단순한 사실일 뿐이며이와 관계없이 거리는 올바로 구해진다참고로 t > 0, t < 1이라는 것은 p-p1 d보다 작거나 크다는 것으로따라서 d 시작점이 직선 위에 있지 않다는 사실임을   있다.

 

        


 

(3)      q 위치를 구한다 점이 P1에서 시작한 투영벡터가 도착한 점이다. P1 투영벡터 길이만큼 더해주면 얻어진다.

        


 

(4)     이제  간의 절대값을 구하면 거리를 얻는다.

        






'코드' 카테고리의 다른 글

버텍스 회전 이용하기  (0) 2006.07.08
VisualStudio 2005에서 QT 작업하기  (0) 2006.07.06
빌보드 및 폰트 표시 테스트  (0) 2006.06.29
SubEntity의 메쉬에서 버텍스 정보 얻기  (0) 2006.06.29
QT with Ogre  (0) 2006.06.26