最も重要なのは、四元から回転行列を構築する方法を実装することです:)完了です。次に、通常の回転行列で行うように、modelview行列に乗算するだけです。
これは、マウスの動きとキューブを回転させるために使用した簡単な例です。ご覧のとおり、私はtoMatrix
,quaternionFromAxis
,multiplyWith
の3つのメソッドを実装する必要がありました。四元数を理解していると仮定すると、これは彼らが何をしているのかを明確にするはずです。
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
// Multiply quaternion with current modelview matrix
glMultMatrixf(cameraQuaternion.toMatrix());
// Some other transformations
glTranslatef(-0.5f, -0.5f, -0.5f);
// Draw something, i.e. cube
glDrawArrays(GL_TRIANGLES, 0, 36);
glDrawArrays(GL_TRIANGLES, 0, 36);
glPopMatrix();
}
void mouseMoved(float dx, float dy) {
float axisY[] = { 0, 1, 0 },
axisX[] = { 1, 0, 0 };
float sensitivity = 0.005f;
Quaternion *q1 = Quaternion.quaternionFromAxis(axisY, dx * sensitivity];
Quaternion *q2 = Quaternion.quaternionFromAxis(axisX, dy * sensitivity];
// Multiply two quaternions with camera
cameraQuaternion = (q1.multiplyWith(q2)).multiplyWith(cameraQuaternion);
}
一度に複数の質問をするのはおすすめしません。私はあなたの[新しい質問](http://stackoverflow.com/questions/7939770/rotation-with-quaternion-not-quite-right)からここにリンクしています。 – Kev