次のコードがあります。
void setupCamera() {
// Clear the screen buffer
glClear(GL_COLOR_BUFFER_BIT);
// reset the projection matrix //
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// and set the perspective with the current field of view,
// and the current height and width
gluPerspective(fov, ratio, objDepth - objRadius * 2,
objDepth + objRadius * 2);
glViewport(0, 0, WINDOW_SIZE, WINDOW_SIZE);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
if(first){
glMultMatrixf(rotMatrix);
}
first = true;
//translate everything to be in objDepth//
glTranslatef(initX * 0.01, initY * 0.01, (-1) * objDepth);
glRotatef(200 * angle, rotationVector[0], rotationVector[1],
rotationVector[2]);
glutWireTeapot(1.5);
glGetFloatv (GL_MODELVIEW_MATRIX, rotMatrix);
}
回転ベクトルは回転軸を保持し、
translate は、すべてを正しい位置に移動するために使用されます。
glMultMatrixf
問題は、最後に保存したマトリックスを使用するために使用していることです。
回転してから平行移動し、 で行列を再度保存しglGetFloatv
ます。
この関数はタイマーで常に呼び出されますが、何らかの理由で
わかりません。マトリックスは何も保存せず、常に何度も初期化されます。
つまり、回転は常に小さな角度で使用されます (行列が保存されないため)。
保存された行列は、コード内の他の場所では使用されていません。
何か案は?