0

正方形があり、それが特定の場所に変換された後、オブジェクト内の点を中心に回転させたいとします。

     glPushMatrix();
       glTranslatef(50, 50, 0.0);
       glRotatef(joint, 0.0, 0.0, 1.0);
       glScalef(10,20, 1.0);
       glTranslatef(0.0, -0.5, 0.0);
       glColor3f(1.0, 0.0, 0.0);
       drawSquare(1.0);
     glPopMatrix();

上記のものは、スケーリングされた後、(0.0)ポイントを中心に回転するだけです。glRotatef(joint、0.0、0.0、1.0)をglRotatef(joint、0.0、5.0、1.0)に変更すると、オブジェクトがねじれ始めます。

ここに画像の説明を入力してください

4

1 に答える 1

1

OpenGLの回転は、原点(0、0、0)に配置された軸を中心に回転します。特定のポイントを中心に回転するには、最初にそのポイントを原点に変換し、回転を実行する必要があります。OPでは、ポイント(-50、-50、0)を中心に回転し(平行移動は特定のポイントではなく座標系を移動するため)、次にZ軸を中心にジョイント角度を回転します。

OPから、ジョイントがフレームごとに更新されると仮定すると、コードはポイント(-50、-50、0)の周りを周回する正方形を持つと予想されます。

于 2013-01-30T05:41:25.613 に答える