glPushMatrix () ;
glTranslatef(0.0f, -500.0f, 1200.0f ) ;
glRotatef ( 270.0f, 1.0f, 0.0f, 0.0f );
glColor3f ( 0.0f, 1.0f, 1.0f );
gluCylinder(quadric,10.0f,10.0f,1000.0f,32,32);
glPopMatrix();
glPushMatrix () ;
glTranslatef(0.0f, -500.0f, 1200.0f ) ;
glRotatef ( 270.0f, 0.0f, 1.0f, 0.0f );
glColor3f ( 0.0f, 1.0f, 1.0f );
gluCylinder(quadric,10.0f,10.0f,1000.0f,32,32);
glPopMatrix();
(このコードは 2 つの独立したオブジェクトを描画します。1 つは回転した x 軸、もう 1 つは回転した y 軸です)
すべてglPushMatrix()
の呼び出しには、対応するglPopMatrix()
呼び出しが必要です。1 つのオブジェクトに対して「ローカル」変換 (つまり、平行移動、回転) を行いたい場合は、単に を呼び出しglPushMatrix()
て変換を行い、オブジェクトを描画して を呼び出すだけglPopMatrix()
です。その後、座標系は最終的に再び変換されなくなり、次のオブジェクトを描画できます。
それが得られない場合は、glLoadIdentity()
いくつかの変換を適用した後に Modelview Matrix で使用することもできます (すべての変換を再度リセットするため) - ただし、ModelviewMatrix で変換関連のコード (つまり gluLookAt) を使用している場合は、それを行う必要があります。繰り返しますが、すべてのglLoadIdentity()
呼び出しの後。
glLoadIdentity();
glTranslatef(0.0f, -500.0f, 1200.0f ) ;
glRotatef ( 270.0f, 1.0f, 0.0f, 0.0f );
glColor3f ( 0.0f, 1.0f, 1.0f );
gluCylinder(quadric,10.0f,10.0f,1000.0f,32,32);
glLoadIdentity();
glTranslatef(0.0f, -500.0f, 1200.0f ) ;
glRotatef ( 270.0f, 0.0f, 1.0f, 0.0f );
glColor3f ( 0.0f, 1.0f, 1.0f );
gluCylinder(quadric,10.0f,10.0f,1000.0f,32,32);