Quero que minha câmera em primeira pessoa mude suavemente sua direção de visualização da direção d1 para a direção d2. A última direção é indicada por uma posição alvo t2.
Até agora, implementei uma rotação que funciona bem, mas a velocidade da rotação diminui quanto mais perto a direção atual chegar da desejada. É isso que eu quero evitar.
Aqui estão os dois métodos muito simples que escrevi até agora:
// 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;
}
}
Mais uma vez, a rotação funciona bem; a câmera atinge a direção desejada. Mas a velocidade não é igual no decorrer do movimento -> diminui.
Como conseguir uma rotação com velocidade constante?
Quaternion.Slerp
Sou apenas eu, ou isso soa como um nome em um romance de fantasia muito ruim ou muito bom? Menos o ponto, é claro.