四元数不能运行的OpenGL旋转

我正在尝试使用四元数围绕固定轴旋转多维数据集。 这是我使用四元数生成的代码:

            glMatrixMode( GL_MODELVIEW_MATRIX );
        Quaternion rot1;
        Quaternion rot2;
        rot1.FromAxis(Vector3(1.0,0.0,0.0),angleY);
        rot2.FromAxis(Vector3(0.0,1.0,0.0),angleX);
        rot1.normalise();
        rot2.normalise();
        QAccumulative = QAccumulative * rot1;
        QAccumulative = QAccumulative * rot2;


        Matrix4 mat;
        mat = QAccumulative.getMatrix();

        angleY = 0;
        angleX = 0;
        glMultMatrixf(mat.get());

你认为我的代码不正确吗?与没有这个代码的代码相比,我的多维数据集似乎是无限大的。

编辑:

得到一些帮助后,事实证明,标准化QAcc使其具有同一性,但使rot1和rot2正常化使得QAcc不稳定,这是我的标准化方法:

      void Quaternion::normalise()
{
    // Don't normalize if we don't have to
    float mag2 = w * w + x * x + y * y + z * z;
    if (fabs(mag2) > TOLERANCE && fabs(mag2 - 1.0f) > TOLERANCE) {
        float mag = sqrt(mag2);
        w /= mag;
        x /= mag;
        y /= mag;
        z /= mag;
    }
}

编辑:

这是我的FromAxis代码:

void Quaternion::FromAxis(const Vector3 &v, float angle)
{
    float sinAngle;
    angle *= 0.5f;
    Vector3 vn(v);
    vn.normalize();

    sinAngle = sin(angle);

    x = (vn.x * sinAngle);
    y = (vn.y * sinAngle);
    z = (vn.z * sinAngle);
    w = cos(angle);
}

我确实没有检查矢量正常化,增加了一个容差阈值解决了我的问题。

感谢大家的帮助。

链接地址: http://www.djcxy.com/p/81855.html

上一篇: OpenGL Rotation with quaternions not working

下一篇: How to Rotate a object3D in PyOpenGL?