我有一个从传感器派生的四元数,它在 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