솔직히 다른곳은 설명을 봐도 잘모르겠더라고요
여기 링크된곳이 가장 설명이 좋은것 같습니다. 혹시나 다른곳이 있으면 링크라도 남겨주세요
저는 위 링크 블로그를 참조하여 좀더 보기좋게 직관적으로 설명을 드리려고합니다.

예를들어 박스의 충돌이 일어날때 AABB충돌은 면과 면의 충돌이지만 여기서 보이는 A박스와 B박스는 A박스가 기울어진 상태로 부딫치면 면과면이 아닌 모서리가 먼저 닿게 됩니다.
그래서 박스가 좀더 커진 상태로 충돌이 될 위험성이 있습니다. 이를 방지하기 위해 만들어진 obb 충돌이 있습니다.
그렇다면 어떤걸 이용해서 충돌이 일어나는지에 대해서 알아야합니다.

이런식으로 A박스가 움직이는 박스이고 B가 이제 멈춰있는 박스라고 가정을 해보겠습니다.

이부분은 제가 글을 보면서 이해하는 부분이어서 확실치는 않습니다 만약 틀리면 조금더 수정을 하도록하겠습니다.
Separation axis는 가상의 선으로서 마치 저희가 보는 실제하는 차원이 3차원이라는 공간의 영역입니다.
그렇다면 사진을 찍으면 저희는 2차원이라는 면의 영역으로 나타납니다. 이를 저는 projection이라고 이해했습니다.
즉 Separation axis는 카메라의 역할을 하는 부분이라고 생각하면될것 같습니다.
그렇다면 저희는 A박스와 B박스를 separation axis로 projection(투영)을 합니다. separation axis를 L이라는 벡터라고 가정하겠습니다. 투영할때는 가장 긴 가장자리로 합니다.

위의 그림처러 이제 빨간 부분이 바로 projection(투영) 된 A와 B입니다.
이 projection(투영)을 시킨 영역을 이용해서 저희는 충돌이 되었는지 안되었는지를 감지합니다.
그림을보시면

조금 헷갈릴수도 있습니다 하나씩 설명드리겠습니다. A중점와 B 중점의 거리는 T라고 하겠습니다
마찬가지로 T 또한 projection이 가능합니다. 그리고 저희는 이 T는 방향성을 가진 벡터입니다.
즉 A에서 B로 가는 방향성을 가진 벡터라고 가정을 하면 저희는 이걸 스칼라로 바꾸기 위해서 L과
T의 내적을 구합니다. 그렇다면 즉 충돌의 범위가 나오게됩니다.(이부분은 벡터의 내적에 대해서 이해하셔야합니다.)
그다음 저희는 ra(노란범위)라는 projection된 범위와 rb(노란범위)라는 projection된 범위가 T ,L 내적보다 작으면 충돌이 발생하지 않고 있다는 뜻입니다 반대로 T,L내적보다 ra,rb (노란범위)합이 더 크면 충돌이 발생했다는 뜻입니다.
수식으로 나타내면 -> T·L >ra+rb (충돌 아님)
T·L <=ra+rb (충돌)
T L은 내적이기에 스칼라이면 ra,rb또한 스칼라입니다. 그렇다면 ra, rb는 어떻게 구하는지 알아보도록 하겠습니다.
기억하셔야합니다. 벡터의 내적은 벡터가 아니라 스칼라입니다.
ra, rb 이번에 어떻게 구해야하는지 알아보겠습니다.

먼저 벡터의 합과 곱을 알아보도록 하겠습니다. 벡터는 합은 벡터 그대로 나오며 벡터의 내적은 스칼라는 사실을 알고 가야합니다. 위의 그림을 참고하시면 같은 90도의 벡터를 계산을 해도 합과 내적은 다른계산이 된다는 사실을 잊으면 안됩니다.
ra는 먼저

그림을 보시면 a1 과 a2의 벡터의 합입니다. 그리고 아래 그림의 분리축인 L에게 내적을 한 값이

그리고 위 그림의 분리축벡터 L과 벡터 (a1+a2)의 내적을 한 값 ra입니다.
rb도 같은 방법으로 계산을 하면됩니다.
나머지 방향으로도 마찬가지로 계산을 해주시면됩니다.
글 내용 출처 :
https://kwaksh2319.tistory.com/46
OBB(Object Oriented Bounding Box) Collision
OBB충돌을 이해하기 위해서 조금 시간이 걸리긴 했지만 외국 사이트 내용이 생각보다 쉽지 않아서 국내 블로그를 전전하다가 굉장히 설명이 잘되있는곳을 알게 되었습니다. 링크:http://www.gingaming
kwaksh2319.tistory.com
OBB(Oriented Bounding Box)
축이 정렬되지 않고 물체와 함께 변환되는 경계상자
분리축 이론(SAT – Separating Axi Theory)을 이용
장점은 변환시 새롭게 경계를 갱신할 필요가 없고 AABB에 비해서 상대적으로 세밀한 충돌검출 가능
단점은 계산량 증가
분리축 이론 임의의 두 볼록 다면체 A, B에 대해 어떤 축이 존재해서 그 축으로의 다면체들의 투영 구간이 서로 겹치지 않는 다면 A, B는 서로 분리 분리축은 다음의 축들 중 하나에 평행한 축으로 결정됩니다. 1. A의 면 중, 하나의 법선 벡터 2. B의 면 중, 하나의 법선 벡터 3. A와 B의 변에 동시에 수직인 벡터 |
두 직육면체에 분리축이 될 수 있는 후보는 총 A의 면법선벡터 6개, B의 면법선벡터 6개, A의 변12개와 B의 변12개의 조합(12×12) 144개로 총 156(6+6+144)개
하지만 직육면체는 평행한 면과 변이 있으므로 면의 개수 1/2로 감소. 변의 개수 1/4로 감소.
총 15(3+3+(3×3))개만 검사하면 된다는 뜻
투영된 OBB의 범위가 서로 교차되지 않으므로 두 OBB는 충돌되지 않음.
(이 부분은 평면 방정식 보면 이해가 된다.)
각 면은 수직인 법선벡터를 1개씩 가지기 때문
출처 : https://flaria.wordpress.com/2010/08/05/aabb-obb/
AABB & OBB
1. AABB(Axis Aligned Bounding Box) 물체의 경계상자가 똑같은 축의 방향으로 만들어진다. 장점은 충돌처리에 계산량이 적고 직관적으로 구현 가능 단점은 물체와 경계상자와 차이가 클 수 있고 물체의
flaria.wordpress.com
'DirectX11 3D > 기타' 카테고리의 다른 글
셰이더 기법 수식 참고사이트(3D Api) (0) | 2022.03.29 |
---|---|
<메모> 앞으로 추가적으로 공부할 내용 정리 (0) | 2022.03.28 |
DeadLock(교착상태) (0) | 2022.02.23 |
Interrupt(인터럽트) 발생 원인 (0) | 2022.02.22 |
<DirectX11 3D> Lerp (0) | 2022.02.21 |