四元数不能运行的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