Quiero que mi cámara en primera persona cambie suavemente su dirección de visualización de la dirección d1 a la dirección d2. La última dirección se indica mediante una posición objetivo t2.
Hasta ahora he implementado una rotación que funciona bien, pero la velocidad de la rotación se ralentiza cuanto más se acerca la dirección actual a la deseada. Esto es lo que quiero evitar.
Aquí están los dos métodos muy simples que he escrito hasta ahora:
// 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;
}
}
De nuevo, la rotación funciona bien; La cámara alcanza la dirección deseada. Pero la velocidad no es igual en el curso del movimiento -> se ralentiza.
¿Cómo lograr una rotación con velocidad constante?
Quaternion.Slerp
¿Soy solo yo, o suena como un nombre en una novela de fantasía realmente mala o muy buena? Menos el punto, por supuesto.