DirectX/DirectX 3D_(구)

35_ObbCollision

컴맹학자 2021. 8. 17. 15:20
728x90

Framework(솔루션) -> Collider.cpp, h


UnitTest(솔루션) -> ColliderDemo.cpp, h


실행

 


보충

OBB 관련 1

더보기

2D 관련에 AABB, OBB 충돌 관련 설명이 있지만 OBB충돌로 2D X축 기준으로 놓고 설명하자면

BOX2 중심점과 BOX1 중심점의 거리를 빼면 T라는 전체 길이가 나오고

BOX1 길이의 절반 값과 T벡터를 내적을 하면 길이가 나오는데 마찬가지로 BOX2도 동일하게 길이를 구함

그럼 충돌여부는 T > A + B 를해서 만약 T가 크면 충돌이 안된거고 작으면 충돌이 된다는 판정이 SepratePlane()함수를 통해서 구해지는 것이고 X, Y, Z 기준으로 검사를 해서 모든게 충족 할때 그때 서야 충돌 판정이 된다.

 

OBB 관련 2

더보기

2D에선 X,Y,Z 축 확인만 하면 끝인줄 알지만 3D에선 추가로 더 확인 해야한다.

 

 

위에 그림을 보면 단순히 2D에서 OBB 충돌을 한다면 빨강색 박스 조건만 써서 충돌여부를 확인 하면 되지만

3D 에서는 주황색 박스에 있는 추가적으로 Top, Side, Foward 같은 제 3자의 입장으로 바라보는 다시 검사하는 조건을 9가지를 추가 작성을 해서 충돌 여부를 해야한다. 

 

그림으로 추가적으로 표현하면

 

빨강색 박스 조건으로 위에 그림을 검사를 하면 충돌 됬다고 판정이 된다. 아주 미세한 틈이 있어도 박스 시점에서 검사를 하면 x,y,z 시점을 봐도 충돌이 됬다고 나오지만 제 3자인 시점으로 보면 아래와 같은 그림으로 인해 충돌 판정이 안되기 때문에 주황색 박스 조건으로 좀더 정확한 충돌 판정을 할 수 있다.

 

'DirectX > DirectX 3D_(구)' 카테고리의 다른 글

37_Specular  (0) 2021.08.20
36_Material  (0) 2021.08.20
34_Framework  (0) 2021.08.13
33_AnimationInstancing  (0) 2021.08.13
32_ModelInstancing  (0) 2021.08.10