Je veux que mon appareil photo à la première personne change doucement sa direction de vision de la direction d1 à la direction d2. Cette dernière direction est indiquée par une position cible t2.
Jusqu'à présent, j'ai mis en œuvre une rotation qui fonctionne bien, mais la vitesse de la rotation ralentit à mesure que la direction actuelle se rapproche de la direction souhaitée. Voilà ce que je veux éviter.
Voici les deux méthodes très simples que j'ai écrites jusqu'à présent:
// 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;
}
}
Encore une fois, la rotation fonctionne bien; la caméra atteint la direction souhaitée. Mais la vitesse n'est pas égale au cours du mouvement -> elle ralentit.
Comment réaliser une rotation à vitesse constante?
Quaternion.Slerp
Est-ce juste moi ou cela ressemble-t-il à un nom dans un roman fantastique vraiment mauvais ou vraiment bon? Moins le point, bien sûr.