Получение вектора вращения или кватерниона для камеры, которая всегда указывает на (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

0 ответов

Другие вопросы по тегам