0

使用第一人称相机观察方向 d.

为了让相机指向目标 t(具有关联的方向 d2),我必须围绕某个轴旋转 d,对吗?该轴应该穿过相机并且应该垂直于由 d 和 d2 形成的平面,对吗?

假设我每帧将向量 d 旋转一定程度,旋转轴不应该改变,因为虽然 d 正在慢慢接近 d2,但它们对应的平面不会改变,对吗?

好吧,如果这一切都是真的,那么我想知道为什么下面示例中的旋转轴在每次调用时都会发生变化。旋转工作准确,但从旋转开始到结束速度会降低。

这篇文章来自当前问题的上下文,您还可以在此处查看源代码。

4

1 回答 1

0

方向_rotationAxis点不会改变,因此您所说的旋转方向是恒定且正确的。但是 的大小_rotationAxis正在变化,因此您会得到 x、y、z 分量的不同值和不同的旋转量。

当您执行交叉以获得旋转轴时,生成的向量的长度是交叉的两个向量的长度和将它们分开的角度的函数。结果向量的方向始终与两个输入向量成 90 度。

最有可能的是,您使用的 2 个向量的长度是一致的并且最有可能是单位长度,但是由于它们之间的角度小于每帧,因此会导致_rotationAxis每帧的长度不同。

在 Xna 中,产生的旋转量CreateFromAxisAngle不仅取决于作为参数插入的角度,还取决于轴矢量的长度(在文档中并不明显,但仍然如此)。因此,您在每帧使用越来越短的旋转轴,这会导致每帧的旋转量越来越小。如果旋转轴矢量的长度为 1.0(单位长度矢量),它只会产生您插入的旋转角度。

_rotationAxisCreateFromAxisAngle. _

_rotationAxis = Vector3.Cross(Direction, _flyTargetDirection);
_rotationAxis.Normalize();
_rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(_flyViewingSpeed - Math.ToRadians(rotationSpeed)));
于 2012-10-09T20:10:56.590 回答