我的四元数旋转有什么问题?

时间:2015-03-09 02:01:56

标签: opengl camera quaternions glm-math

我正试图在没有滚动效果的情况下旋转相机。

我积累了0到359.9度的3个角度。然后我用累积的角度(一半)用全局轴向矢量制作3个四元数(glm :: quat)并将它们乘以1个四元数。然后我将此四元数转换为旋转矩阵。至少我将这个3x3矩阵插入4x4视图变换矩阵(到[0] [0]角)。

void View::rotate(const float& angleX, const  float& angleY, const  float& angleZ)
{
    float rad = 3.14159265359/180.0;

    pitchAngle += angleX;
    degree360(pitchAngle);

    yawAngle   += angleY;
    degree360(yawAngle);

    rollAngle  += angleZ;
    degree360(rollAngle);

    float angle_x = pitchAngle*rad/2;
    float angle_y = yawAngle*rad/2;
    float angle_z = rollAngle*rad/2;

    glm::quat qX = glm::quat(angle_x, glm::vec3(1.0, 0.0, 0.0));
    glm::quat qY = glm::quat(angle_y, glm::vec3(0.0, 1.0, 0.0));
    glm::quat qZ = glm::quat(angle_z, glm::vec3(0.0, 0.0, -1.0));

    glm::quat q = qZ * qX * qY;

    glm::mat4 spin_mat = glm::mat4_cast(q);

    matrix[0][0] = spin_mat[0][0];
    matrix[0][1] = spin_mat[0][1];
    matrix[0][2] = spin_mat[0][2];
    matrix[1][0] = spin_mat[1][0];
    matrix[1][1] = spin_mat[1][1];
    matrix[1][2] = spin_mat[1][2];
    matrix[2][0] = spin_mat[2][0];
    matrix[2][1] = spin_mat[2][1];
    matrix[2][2] = spin_mat[2][2];
}

我无法理解我做错了什么。这个功能以奇怪的方向和角度旋转。

0 个答案:

没有答案