방향이 일정하고 정확하면 방향이 바뀌지 않으므로 방향이 _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)));