물리 프레임의 기본 - 충돌(1)

Dev.Write 2010. 1. 6. 18:29 Posted by zetz

시작하기에 앞서 기존에 작성한 문서들에 클래스 맴버변수를 "_"지시자로 시작했던 부분을 수정하겠다.

Exceptional C++ Style 책을 보던 중 "_", "__" 로 시작하는 변수명에 대한 중요한 문제점을 인식하게 되었다.

안 좋은 스타일은 빨리빨리 수정하자.

 

 

본론으로 넘어가서, 물리 프레임에서 가장 중요한 부분이 바로 충돌과 충돌 처리일 텐데 이 부분을 계속 미뤄왔었다.

사실 나도 기초만 조금 알고 있을 뿐 정말 어렵고, 넓은 부분이라고 느끼고 있다.

우선, 아는 것만이라도 정리해 보자.

 

  1. 기본적인 충돌 검출은 다음과 같은 형식간의 교차 연산들로부터 판정된다.
    1. Ray(반직선 : Ray(t) = Ori + t*Dir , 여기서 Ori 와 Dir은 3차원 벡터)
    2. Plane(평면 : Ax+By+Cz+D = 0 )
    3. Sphere(구 : 반지름으로 표현 )
    4. Triangle(삼각형 : 점 3개로 표현 )
    5. AABB ( 축정렬 바운딩박스 : min.xyz 와 max.xyz로 표현)
    6. OBB
    7. 기타 등등

    Ref) http://www.realtimerendering.com/intersections.html

  2. 사실적인 충돌 검출은 매우 많은 연산을 필요로 한다.
  3. 따라서 연산횟수를 줄이기 위한 많은 트릭과 똑똑한 자료구조가 필요하다.
  4. 충돌 판정이 되었다면, 충돌결과에 따른 오브젝트의 충돌 후 효과 또한 중요하다.

 

말 보다는 코드가 낮다. 아래를 참조하자.