2012-10-09 2 views
0

방향 1을 바라 보는 1 인칭 카메라를 가짐.회전을 수행 할 회전 축

카메라가 목표 t (연관된 방향 d2)를 가리 키도록하기 위해서는 축을 중심으로 d를 회전시켜야합니다. 이 축은 카메라를 통과해야하며 d와 d2에 의해 형성된 평면에 수직이어야합니다. 맞습니까?

d가 천천히 d2에 가까워 지지만 해당 평면이 변경되지 않기 때문에 프레임 당 어느 정도 벡터 d를 회전한다고 가정합니다.

글쎄, 그게 사실이라면, 나는 아래의 예에서 회전축이 모든 호출에서 왜 변하는 지 궁금해하고있다. 회전은 정확하지만 속도는 회전 시작에서 끝까지 감소합니다.

이 게시물은 current question here의 컨텍스트에서 제공되며 여기에서 소스 코드를 볼 수도 있습니다.

답변

0

방향이 일정하고 정확하면 방향이 바뀌지 않으므로 방향이 _rotationAxis입니다. 그러나 _rotationAxis의 크기가 변하기 때문에 x, y, z 구성 요소와 회전량이 다른 값을 얻게됩니다. 당신이 회전축을 얻기 위해 십자가를 수행 할 때

는 결과 벡터의 길이는 을 분리 각도를 교차 된 두 벡터의 길이의 함수이다. 결과로 생성되는 벡터의 방향은 두 입력 된 벡터 모두에 대해 항상 90도입니다.

대부분의 경우, 사용하는 2 개의 벡터의 길이는 일관되고 가장 비슷한 단위 길이이지만 각 프레임보다 작기 때문에 각 프레임의 길이는 각각 _rotationAxis이됩니다.

Xna에서 생성 된 회전 각도는 CreateFromAxisAngle에서 매개 변수로 입력하는 각도뿐만 아니라 축 벡터의 길이도 결정됩니다 (설명서에는 명확하지 않지만 사실은 그보다 작습니다) . 따라서 각 프레임마다 더 짧고 짧은 회전축을 사용하므로 각 프레임의 회전 수가 작아집니다. 회전 축 벡터의 길이가 1.0 (단위 길이 벡터)이면 연결 한 회전 각도 만 나타납니다.

CreateFromAxisAngle에서 사용하기 전에 _rotationAxis을 단위 길이로 만들기 위해 정규화해야합니다.

_rotationAxis = Vector3.Cross(Direction, _flyTargetDirection); 
_rotationAxis.Normalize(); 
_rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(_flyViewingSpeed - Math.ToRadians(rotationSpeed))); 
관련 문제