我想做一个简单的矢量旋转。
目标是引导我的第一人称相机,该相机当前指向具有方向 d 的目标 t,指向具有新方向 d1 的新目标 t1。
d 和 d1 之间的过渡应该是平滑的运动。
和
public void FlyLookTo(Vector3 target) {
_flyTargetDirection = target - _cameraPosition;
_flyTargetDirection.Normalize();
_rotation = new Matrix();
_rotationAxis = Vector3.Cross(Direction, _flyTargetDirection);
// This bool tells the Update()-method to trigger the changeDirection() method.
_isLooking = true;
}
我正在使用其新参数和
// this method gets executed by the Update()-method if the isLooking flag is up.
private void _changeDirection() {
dist = Vector3.Distance(Direction, _flyTargetDirection);
// check whether we have reached the desired direction
if (dist >= 0.00001f) {
_rotationAxis = Vector3.Cross(Direction, _flyTargetDirection);
_rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(_flyViewingSpeed - Math.ToRadians(rotationSpeed)));
// update the cameras direction.
Direction = Vector3.TransformNormal(Direction, _rotation);
} else {
_onDirectionReached();
_isLooking = false;
}
}
我正在执行实际的动作。
我的问题:实际的运动效果很好,但是运动的速度越慢,当前方向越接近所需的方向,如果连续执行几次,这将是一个非常不愉快的运动。
如何使相机从 d 方向移动到 d1 方向,其移动速度相同?