2012-06-25 4 views
3

좋아요, 그래서이 충돌 감지 코드가 있고, 벽면을 가로 질러 남은 거리 (0에서 +5로 이동, +2에서 벽, 나머지 = +3)를 밀려고합니다. 이와 같이 : enter image description here충돌면까지 남은 거리를 밀어 넣으시겠습니까?

이제 나는 그것을 최대한 활용하고 벽과 벽의 평상시와의 거리를 필요로한다는 것을 알았지 만, 공개 토론을 올바르게하는 데 도움이 필요합니다.

제 질문은 벽면을 따라 남은 거리를 이동하는 데 필요한 올바른 포럼은 무엇입니까?

if(distRemaining.length() > 0){ 
      cProduct = cross(distRemaining, wallNormal); 
      dest += new Vector3f(cProduct.x, 0, cProduct.z); 
     } 
+0

물체와 벽 사이의 움직임의 마찰은 무엇입니까? –

+0

움직임의 마찰? 나는 아무 것도 있다고 생각하지 않는다. – CyanPrime

답변

2

은 시작 지점 A, 충격 B의 점, 그리고 벽면에 법선 벡터 N를 호출합니다. A에서 B를 취하는 벡터 (AB)를 계산하고 벡터 결과를 N 사이에서 계산합니다. 이 X

X = AB x N 

이 전화하는 것은 N하고 또한 벽의 평면에 놓여 AB 모두에 수직 인 벡터이다. 이 이제 충돌 후 벽을 따라 당신의 입자의 운동 방향을 가리키는 당신의 벽에 또 다른 벡터이다

Y = X x N 

X 사이 N를 벡터 제품으로 추가 벡터 Y를 가져 가라. 이 벡터 (계산 Y/|Y|)을 정규화하고 벽을 따라 이동하려는 양을 곱한 다음 충돌 점 B에 추가해야합니다. 이 벡터가 반대 방향을 가리킬 수도 있지만, 벡터 제품을 가져 오는 순서를 신중히한다면 괜찮을 것입니다.

이것은 질문에서 원하는 것으로 가정하는 3D에서 할 수있는 방법입니다. 2D에서는 상당히 간단합니다.

관련 문제