Получение вектора вращения или кватерниона для камеры, которая всегда указывает на (0,0,0), учитывая ее положение
У меня есть планета с координатами (0,0,0) и камера, которую я могу перемещать по планете. Мне даны сферические координаты (высота, азимут, расстояние) и нормализованный "начальный вектор", описывающий вектор, где высота =0, азимут =0, фактически широта = 0 долгота =0.
У меня есть местоположение камеры, которое уже работает, как предполагалось - однако я не могу понять математику, чтобы ориентация всегда указывала на (0,0,0). Есть ли простой способ получить вращение здесь? В идеале, как кватернион, но углы Эйлера хороши, поскольку я могу конвертировать между ними.
Вот мой код, который получает позицию (псевдокод, который я подтвердил, работает):
STARTING_VECTOR = {0, 1, 0};
SetCameraPositionAndOrientation(double elevation, double azimuth, double distance)
position = STARTING_VECTOR * distance;
//rotateByEulerAngles takes pan, tilt, roll.
position.rotateByEulerAngles(0, 0, -azimuth);
position.rotateByEulerAngles(0, -elevation, 0);
//Insert code to change rotation