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;
が欠落することは、事前に おかげで愚かな質問であれば、あなたは申し訳ありませんが、私を助けることができる願っています。
どのように行列を使うのですか?あなたは 'glMultMatrixf()'を使いますか? – user7185318