2016-11-27 7 views
0

私はこのアルゴリズムを使用している例のY. のための四元 と軸の1を中心にモデルを回転しようとしている、非常に簡単 軸=(0,1,0)モデルはちょうど奇妙な動作とその中心に伸ばすより:それはおそらく最初の60度(それは正直に言うと、おそらく90の編集)のために働く 角度+ = 0.01f(radiants)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); 

。私は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); 
関連する問題