C++四元数旋转不按预期工作

问题描述:

我试图围绕一个四元数轴旋转模型 例如Y. 我正在使用这个算法,非常简单 axis =(0,1,0) 角度+ = 0.01F(辐射点)C++四元数旋转不按预期工作

quat.w = cos(angle); 
quat.x = axis.x* sin(angle/2.0); 
quat.y = axis.y* sin(angle/2.0); 
quat.z = axis.z* sin(angle/2.0); 

它适用于可能是第一个60度(编辑:它可能是90,说实话),比模型只是行为怪异,并在其中心延伸。我正在使用GLUT和C++

这是我用来将它再次转换为矩阵并在模型视图透视矩阵中使用它的方法。 我做了一些调试和数学似乎好,我可能丢失(以四元新)东西很明显

void Quaternion::QuatToMatrix(Quaternion& a, GLfloat* matrix) 

// First row 
matrix[0] = 1.0f - 2.0f * (a.y * a.y + a.z * a.z); 
matrix[1] = 2.0f * (a.x * a.y - a.w * a.z); 
matrix[2] = 2.0f * (a.x * a.z + a.w * a.y); 
matrix[3] = 0.0f; 
// Second row 
matrix[4] = 2.0f * (a.x * a.y + a.w * a.z); 
matrix[5] = 1.0f - 2.0f * (a.x * a.x + a.z * a.z); 
matrix[6] = 2.0f * (a.y * a.z - a.w * a.x); 
matrix[7] = 0.0f; 

// Third row 
matrix[8] = 2.0f * (a.x * a.z - a.w * a.y); 
matrix[9] = 2.0f * (a.y * a.z + a.w * a.x); 
matrix[10] = 1.0f - 2.0f * (a.x * a.x + a.y * a.y); 
matrix[11] = 0.0f; 

// Fourth row 
matrix[12] = 0; 
matrix[13] = 0; 
matrix[14] = 0; 
matrix[15] = 1.0f; 

希望你能帮助我,对不起,如果这是一个愚蠢的问题提前 感谢。

+0

如何使用矩阵?你使用'glMultMatrixf()'以及如何? – user7185318

四元数也应使用半角的实部:

quat.w = cos(angle/2.0);