문제 상황


지금까지 움직임을 구현한 방식은 Collide and Slide 알고리즘이다. 알고리즘에 대해 짧게 소개하자면

slide.png

내가 가고자 하는 경로에 충돌 날 물체가 존재하는 경우, 내 속도 벡터를 최대한 소진 시켜서 slide연산 한 후, 다음 위치를 예상한다는 것이다.

그러니까 내가 v의 속도로 움직인다고 하면, 다음 위치를 구할 때

image.png

  1. 현재 위치에서 v를 더한 위치 사이를 Sweep Test해본다.
  2. 경로 상 뭐 하나 부딪히면 그 자리에서 멈춘다.

이런 로직을 쓰지 않겠다는 것이고, 대신

  1. 현재 위치에서 v를 더한 위치 사이를 Sweep Test해본다.
  2. 경로 상 뭐 하나 부딪힐 때, 내가 움직일 수 있는 경사로거나 그런 물체인지 확인한다. (collide)
  3. 움직일 수 있다면 부딪힌 위치까지 움직인 후, 남은 v를 이용해 경사로를 따라 다시 Sweep Test해준다. (slide)
  4. 이후 1, 2와 같은 작업을 원하는 횟수만큼 반복한다. (사실 재귀임)