DirectX
Separating Axis Theorem(SAT)충돌처리 구현
DevAlice
2022. 1. 12. 19:32
크기가 바뀌어도, 회전을 하더라도 잘 작동한다
DirectX11을 이용해 제작했다
Separating Axis Theorem에 대해 간략하게 알아보고 끝내도록 하자
두 도형 AB가 있다 이때 한 도형의 변에 평행하는 가상의 선을 하나 그어준다
그 후 가상의 선에 직교하는 선을 하나 그어준다
이 직교하는 선을 선분 L 이라고 부르자
그후 두 도형에 위 그림에서 초록색 선으로 보이는 벡터을 찾아주자(이 벡터을 뭐라고 불러야 할지를 모르겠다 하지만 이 벡터의 길이는 이 도형을 선분 L에 투영시켰을때의 길이의 절반이다)
그후 두 벡터을 선분 L에 투영시켜주자
이 투영시킨 벡터의 길이를 각각 ra, rb라고 불러주자
그 이후에는 도형 a의 중심에서 도형 b의 중심으로 가는 벡터를 하나 만들어준다
이를 벡터 t 라고하자 이제 이 벡터 t를 L에 투영시켜준다.
이렇게 distance를 구해주자 이제 구해야할건 모두 구했다 이제 충돌 여부만 보면된다
distance >= ra + rb일경우 충돌하지 않은경우이고
distance < ra + rb일경우 충돌한 것이다
이를 모든 변에 대해서 탐색해주면 충돌을 감지할 수 있다