2016-11-27 22 views
0

我試圖圍繞一個四元數軸旋轉模型 例如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

回答

3

四元數也應使用半角的實部:

quat.w = cos(angle/2.0);