Я хочу, чтобы камера от первого лица плавно меняла направление просмотра с направления d1 на направление d2. Последнее направление указывается целевой позицией t2.
До сих пор я реализовал вращение, которое работает нормально, но скорость вращения замедляется по мере приближения текущего направления к желаемому. Это то, чего я хочу избежать.
Вот два очень простых метода, которые я написал до сих пор:
// this method initiates the direction change and sets the parameter
public void LookAt(Vector3 target) {
_desiredDirection = target - _cameraPosition;
_desiredDirection.Normalize();
_rotation = new Matrix();
_rotationAxis = Vector3.Cross(Direction, _desiredDirection);
_isLooking = true;
}
// this method gets execute by the Update()-method if _isLooking flag is up.
private void _lookingAt() {
dist = Vector3.Distance(Direction, _desiredDirection);
// check whether the current direction has reached the desired one.
if (dist >= 0.00001f) {
_rotationAxis = Vector3.Cross(Direction, _desiredDirection);
_rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(1));
Direction = Vector3.TransformNormal(Direction, _rotation);
} else {
_onDirectionReached();
_isLooking = false;
}
}
Опять вращение работает нормально; камера достигает желаемого направления. Но скорость не равна на протяжении движения -> она замедляется.
Как добиться вращения с постоянной скоростью?
Quaternion.Slerp
Это только я, или это звучит как имя в действительно плохом или действительно хорошем фэнтезийном романе? Минус точка, конечно.