方向_rotationAxis
点不会改变,因此您所说的旋转方向是恒定且正确的。但是 的大小_rotationAxis
正在变化,因此您会得到 x、y、z 分量的不同值和不同的旋转量。
当您执行交叉以获得旋转轴时,生成的向量的长度是交叉的两个向量的长度和将它们分开的角度的函数。结果向量的方向始终与两个输入向量成 90 度。
最有可能的是,您使用的 2 个向量的长度是一致的并且最有可能是单位长度,但是由于它们之间的角度小于每帧,因此会导致_rotationAxis
每帧的长度不同。
在 Xna 中,产生的旋转量CreateFromAxisAngle
不仅取决于作为参数插入的角度,还取决于轴矢量的长度(在文档中并不明显,但仍然如此)。因此,您在每帧使用越来越短的旋转轴,这会导致每帧的旋转量越来越小。如果旋转轴矢量的长度为 1.0(单位长度矢量),它只会产生您插入的旋转角度。
_rotationAxis
在CreateFromAxisAngle
. _
_rotationAxis = Vector3.Cross(Direction, _flyTargetDirection);
_rotationAxis.Normalize();
_rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(_flyViewingSpeed - Math.ToRadians(rotationSpeed)));