이번에는 지난 글에서 다룬 GJK 이후, 충돌 방향과 충돌 깊이를 찾아주는 EPA 알고리즘에 대해 알아보자.
EPA(Expanding Polytope Algorithm)는 두 도형 A, B의 Minkowski Difference를 활용해 충돌 해소의 최소 깊이와 충돌 방향을 찾아주는 알고리즘이다.
이 알고리즘은 GJK에서 생성된 4개의 simplex로 이루어진 사면체에서 시작한다.
GJK에서 충돌이 감지된 경우에만 EPA 단계를 진행하기 때문에, 사면체 내부에 원점이 포함된 상태가 확정적이다.
이후, 아래의 과정을 반복하며 충돌 깊이와 충돌 방향 벡터를 계산한다.
반복 과정이 끝나면, 원점에서 가장 가까운 평면이 확정된다.
이때:
이 정보를 활용해, 충돌 방향으로 오브젝트를 최소 깊이만큼 이동시키면 충돌을 해소할 수 있다.
2D에서의 EPA 알고리즘을 다룬 자료를 확인해 보면 비슷한 흐름을 이해하는 데 도움이 된다.
2D 사례와 3D 사례의 원리는 동일하므로 한 번 살펴보기를 추천한다.
https://myprogramming.tistory.com/66
다음 글에서는 EPA에서 구한 충돌 벡터와 충돌 깊이를 통해 충돌점을 구하는 clipping에 대해 알아볼 예정이다.
FT_Newton: Physics Loop의 마지막 단계 Solve - (8) (0) | 2025.01.16 |
---|---|
FT_Newton: Narrow Phase / Clipping - (7) (0) | 2025.01.15 |
FT_Newton: Narrow Phase / SAT vs GJK - (5) (0) | 2025.01.15 |
FT_Newton: 『게임 물리 엔진 개발』 vs Box2D - (4) (0) | 2025.01.15 |
FT_Newton: Initialization, Integrate, Broad Phase - (3) (0) | 2025.01.10 |