LabHub
배우기 러닝패스 코스

물리 엔진의 뼈대 · 충돌 감지 · 실습

겹침을 찾는 네 가지 방법

LabHub 에서 이어서 보기

목표

AABB, 원, 분리축 정리로 겹침을 판정하고, 넓은 단계로 검사 횟수를 줄이고, 광선과 상자의 교차를 풉니다. 이 실습이 끝나면 물리 엔진의 충돌 감지 층을 직접 만들 수 있게 됩니다.

왜 중요한가

물체가 200개면 쌍이 19,900개입니다. 전부 정밀 판정을 하면 물리 계산이 시작되기도 전에 프레임이 끝납니다. 그런데 실제로 겹치는 쌍은 300개도 되지 않습니다. 그래서 충돌 감지는 두 층으로 나뉩니다 — 겹칠 수도 없는 쌍을 아주 싸게 걸러 내는 넓은 단계와, 남은 쌍을 정확히 보는 좁은 단계입니다.

좁은 단계의 일반해가 분리축 정리입니다. 두 볼록 도형이 떨어져 있다면 그것을 갈라놓는 직선이 반드시 존재하고, 그 방향은 두 도형의 변 중 하나와 나란합니다. 그래서 변 법선 방향으로만 투영해 보면 됩니다. 그리고 겹쳤을 때 가장 작은 겹침을 준 축이 곧 가장 짧게 밀어낼 방향이라, 감지와 반응이 같은 계산에서 나옵니다.

단계

1. /root/collide 에 도구 상자를 놓습니다.
2. /root/collide/aabb.py — 축 정렬 경계 상자.
3. /root/collide/circle.py — 원과 원.
4. /root/collide/sat.py — 분리축 정리.
5. /root/collide/out/sat.png — 겹친 도형과 최소 이동 벡터.
6. /root/collide/boxes.txt/root/collide/out/06-broad.txt — 전수 검사 대 정렬-훑기.
7. /root/collide/ray.py/root/collide/out/07-ray.txt, ray.png — 광선과 상자.

참고

단계 7개

  1. 그리기 도구 상자를 놓는다
  2. 축 정렬 경계 상자
  3. 원과 원
  4. 분리축 정리
  5. 겹침과 밀어낼 방향을 그린다
  6. 정렬해 놓고 훑는다
  7. 광선과 상자 — 슬랩 방법