У меня есть кватернион, полученный из датчиков, который вращает «камеру» в сцене OpenGL ES. Также я применяю инверсию этого кватерниона к определенным объектам в сцене, так что они «обращены» к «камере» - это работает, как и ожидалось. Проблема в том, что мне нужно отключить вращение по оси Z для этих объектов. Как мне придумать кватернион, у которого нет вращения в Z-компоненте?
Мои тесты: я попытался извлечь углы Эйлера, создать отрицательный кватернион и построить матрицу вращения для этих объектов из умножения двух кватернионов - результаты неверны.
glm::quat rMQ = cam->getCameraQuaternion();// retrieve camera quat
glm::vec3 a = glm::eulerAngles((rMQ))* 3.14159f / 180.f; // Euler angle set derived
glm::quat rMZ = glm::angleAxis(-a.z, vec3(0.0f, 0.0f, 1.0f)); // negating quaternion
glm::mat4 fM = glm::inverse(glm::mat4_cast(rMQ*rMZ)); //final mat4 for GL rotation