0

画面上の 2 つのオブジェクトのうちの 1 つを回転させようとしています。どうすればいいですか?画面上のすべてのオブジェクトを回転させることしかできません。コード:

            glColor3f(1, 0, 0);
        glBegin(GL_QUADS);
            glVertex3f(0f, 0f, 0f);
            glVertex3f(0f, .5f, 0f);
            glVertex3f(.5f, .5f, 0f);
            glVertex3f(.5f, 0f, 0f);
        glEnd();
        glRotated(.1, 0f, 1f, 0f);
        glRotated(.1, 1f, 0f, 0f);
        glRotated(.1, 0f, 0f, 1f);
        glBegin(GL_QUADS);
            glVertex3f(2f, 0f, 0f);
            glVertex3f(2f, .5f, 0f);
            glVertex3f(2.5f, .5f, 0f);
            glVertex3f(2.5f, 0f, 0f);
        glEnd();

私がこれまでに持っているコード。

4

2 に答える 2

1

glRotated行列をリセットせずに無限に呼び出すのは悪い考えです。丸め誤差が蓄積されます。glIdentity現在、各フレームを呼び出していません。各フレームを次の方法でレンダリングします。

  1. 電話glIdentity
  2. 最初のクワッドを描く
  3. 回転する
  4. 2 番目のクワッドを描画します

2 つのクワッドの回転差をレンダリングする方法は、3 つの軸上でわずか 1/10 度です。これは目立ちません。

OpenGL プログラミングの現在の方法を学び、コードを改善するために、必ず OpenGL を読んでください。自分のしていることをよく理解していないように見えますが、問題はありません。

于 2012-09-05T01:53:48.703 に答える
1

glPushMatrix() を使用します。回転が変換される前と glPopMatrix(); 2 番目のクワッドがレンダリングされると、2 番目のクワッドのみが回転変換の影響を受けます。

于 2012-11-14T06:44:04.207 に答える