Как получить углы вращения камеры из кватерниона
Класс камеры использует кватернион для хранения вращения. Вот сеттер:
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; }
...
};