내가 만들고있는 2D 게임에서 충돌 시스템을 구현하려고합니다. 메타 축의 충돌 튜토리얼에 설명 된 것처럼 분리 축 정리 는 효율적이고 강력한 충돌 감지 처리 방법처럼 보이지만 사용하는 충돌 응답 방법은 마음에 들지 않습니다. 최소 오버랩 축을 따라 맹목적으로 변위함으로써, 알고리즘은 단순히 움직이는 물체의 이전 위치를 무시합니다. 즉, 정지 한 물체가 들어가고 튀어 나오는만큼 충돌하지 않습니다.
다음은 이것이 중요한 상황의 예입니다.

위에서 설명한 SAT 방법에 따르면 사각형은 빗변에 수직 인 삼각형에서 간단히 튀어 나옵니다.

그러나 실제로 사각형은 변위 벡터를 따라 연속적으로 이동하는 경우 첫 번째 충돌 지점이므로 삼각형의 오른쪽 아래 모서리에서 멈춰야합니다.

이제는 게임 플레이 중에 실제로 중요하지 않을 수도 있지만, 효율적이고 일반적으로 이러한 방식으로 정확한 변위를 얻는 방법이 있는지 알고 싶습니다. 나는 지난 며칠 동안 내 두뇌를 쌓아 올렸지 만 아직 포기하고 싶지 않습니다!
(StackOverflow에서 교차 게시되었으므로 규칙에 위배되지 않기를 바랍니다!)
1 단계 : 각 다각형에 대해 해당 다각형의 투영을 따라 모션 벡터에 수직 인 선에서 가장 먼 두 점을 찾습니다.
2 단계 : 이 점들을 연결하는 선을 따라 각 다각형을 나눕니다. 모션 벡터를 따라 다른 다각형을 향하는 다각형의 절반은 "정방향 선체"입니다. 이것은 충돌 할 수있는 다각형의 유일한 부분입니다.
3 단계 :모션 벡터를 따라 각 다각형의 "정방향 선체"에있는 각 점의 벡터를 반대쪽 다각형으로 투영하고 반대쪽 다각형의 "정방향 선체"의 각 모서리와 교차하는지 확인합니다. (아마도 속도는 느리지 만 요즘 컴퓨터 속도는 매우 빠릅니다.) (기울어 진 화살표는 유감입니다. 모든 화살표는 평행해야합니다.)
4 단계 : 가장 짧은 벡터를 가져옵니다. 정확한 충돌 거리입니다.
5 단계 : 짜잔!
