OpenGL で簡単なアプリケーションをプログラミングしています。中心 (ローカル座標) を中心に回転させたいモデルがあり、ローカル座標も一緒に変換します。回転してから平行移動するシナリオと、その逆のシナリオの 2 つを実行しました。最初のシナリオでは、正しい回転が得られましたが、モデルはモデル (ローカル) 座標ではなくワールド座標に基づいて変換されます。最初に平行移動すると、正しく平行移動できましたが、回転がモデルの中心を中心としていません。ここにコードがあります、
glPushMatrix();
// ignore this
/*glRotatef(_zRoll, 0.0, 0.0, 1.0);
glRotatef(_yTilt, 1.0, 0.0, 0.0);
glRotatef(_xPan, 0.0, 1.0, 0.0);*/
glScalef(scale, scale, scale);
glTranslatef(0.0, 0.0, -2.0);
glTranslatef(_xTranslate, _yTranslate, _zTranslate); // The required translation
// The required rotation
glRotatef(_yangle, 0.0, 1.0, 0.0);
glRotatef(_zangle, 0.0, 0.0, 1.0);
glRotatef(_xangle, 1.0, 0.0, 0.0);
glTranslatef(coord.x, coord.y, coord.z); // translate to the model center
glCallList(aHelix);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glPopMatrix();
glutSwapBuffers();