Sliding Vector

캐릭터끼리 충돌, 캐릭터와 배경이 충돌할 때, 그리고 캐릭터가 지면을 따라 미끄러질때의 벡터를 미끄러짐 벡터 혹은 Sliding Vector라 부른다.

Sliding Vector의 유도 과정을 알아보자.

그림처럼 속도 V의 벡터가 노멀값 N의 벽과 충돌하면 슬라이딩 벡터 S가 생긴다.
슬라이딩 벡터 S를 구해보자.

1) A 벡터를 B 벡터에 투영시키면 다음과 같다.
투영 벡터  = ( A • B ) B   /   |  B² |

2) B가 단위 벡터이면 더 간단해진다.
투영 벡터 = ( A • B ) B

3) 슬라이딩 벡터 S는 K와 V의 합이다.
S = V + K

4) K만 구하면 슬라이딩 벡터를 구할 수 있다. ( 속도 벡터 V를 벡터 N에 투영한다. )
K = (  -V • N ) N

5) 그러므로 최종값은
S = V + K = V + (  -V • N ) N =  V - (  V • N ) N

위의 공식을 다이렉트 X로 표현하면 다음과 같다.

 

D3DXVECTOR3 slidingVector =
          moveVec - D3DXVec3Dot( &moveVec, &contactNormal) * contactNormal

 

참고 :
투영 벡터 : tutorial01.html

http://toymaker.tistory.com/entry/미끄러짐-벡터-Sliding-Vector