Как получить углы вращения камеры из кватерниона

Класс камеры использует кватернион для хранения вращения. Вот сеттер:

void camera::setCameraAng(vec3 ang) {
    quat yaw = angleAxis(-ang.y, vec3(0.0f, 0.0f, 1.0f));
    quat pitch = angleAxis(-ang.x, vec3(0.0f, 1.0f, 0.0f) * yaw);
    quat roll = angleAxis(-ang.z, vec3(1.0f, 0.0f, 0.0f) * (pitch * yaw));
    rot = yaw * pitch * roll;
}

Yaw-вращение всегда происходит вокруг оси Z, pitch зависит от yaw, но не зависит от roll, а вращение roll зависит от pitch и yaw. Помогите пожалуйста написать геттер, возвращающий vec3 ang.


Ответы (1 шт):

Автор решения: jdoseIOO

Вы можете добавить поле с вектором в класс камеры, при вызове camera::setCameraAng просто обновлять его, а при вызове геттера возвращать. Вот псевдо c++ код описывающий это

class Camera {
    private:
        vec3 angl;
        // ...
    public:
        void setCameraAng(vec3 ang) {
            this->angl = ang;
            ...
        }
        vec3 getCameraAng() const { return angl; }
        ...
};
→ Ссылка