구, 평면 vs 구 sweep 셈플 |
| programming/graphics 2002/08/20 12:49 |
최근에야 구현해 본 구 vs 구의 sweep 테스트 하는 셈플입니다.
추려서 셈플을 올리려고 하니 같이 달려오는 게 너무 많아서 그냥 쓰던 부분 추출해서 아예 새로 만들었습니다. 드로잉, 충돌 후 체크 등등의 충돌을 뺀 다른 부분은 그냥 대충 추가했기 때문에 신경 안 쓰셔도 되고요. (잘못 짠 부분에 대한 핑계를 위한 염막 멘트 !!)
나름대로 그림도 그려 가면서 만들었는데, 좀 더 테스트 해보고 문서화해보려고 합니다. (아직은 좀 더 사용해봐야 할거 같아서...)
아래 taiky 님이 만드신 셈플에서처럼 직선과 점의 거리를 이용하고 싶었는 데 (솔직히 확신은 없습니다만…), 3차원상으로 적용할 아이디어가 안 떠올라서 헤매다가, 문서 중에 앵글값으로 해결하는 방식도 있어서 나름대로 적용해봤습니다. (sqrt를 남발해서 안타깝습니다만... ^^ )
셈플이라고는 하지만 주석도 없고, 소스도 압박된 상태라서 이해하긴 좀 어려울 듯... ^^ (소위 ‘그대 소스는 알아볼 수 없소’에 상당히 근접한... T_T;; ) 우선은 그냥 가볍게 올려봅니다.
간단히 적용한 충돌 테스트 단계는.... (그림이 없으면 별 도움이 안되겠지만...)
1. aabb 영역으로 테스트해서 충돌 가능성 없으면 리턴
2. 충돌하고자 하는 구(이하 A)가 체크 하는 구(이하 B)에 근접하지 않으면 리턴
(A의 진행벡터를 A와 B의 경로에 투영해서 길이로 체크)
3. 진행벡터와 A와 B의 경로가 최대 충돌 angle을 넘으면 리턴
4. 진행벡터 위에 충돌 위치를 얻어낸 후 t 값 얻어냄
5. t 가 1보다 크면 충돌 안된 상태이므로 리턴
6. 충돌!! 평면 방정식 얻어냄!!
ps. 겹쳐있을 경우에 대해선 고려하지 않았습니다. (제대로라면 겹쳐있을 수 없기 때문에.... - 셈플에선 위치가 렌덤이라 처음에 생깁니다만...)
ps. 그냥 ray 처럼 경로는 선이지만, 점의 경로가 아니기 때문에 sweep ('쓸다' 정도의 뜻) 이란 말을 쓰더군요. (폼 나라고 쓰긴 했지만 ^^;; )
coltest.zip
댓글을 달아 주세요
좋은 위치는 그것 찾아본 즐겼다!