0

誰でも、原点(0、0、0)で2つのオブジェクト、たとえば立方体と球を描画する方法を教えてくれます。立方体を移動しても、球は原点にとどまります。球を移動するのと同じように、立方体は残ります。keyboardfuncを使用します。

if (!LightSwitch)
{ 
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glPushMatrix();
glTranslatef(CubeX, CubeY, CubeZ);
glColor3f(1.0, 0.0, 0.0);
glPushAttrib(GL_LIGHTING_BIT | GL_CURRENT_BIT);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Green);
glutSolidCube(2.0);
glPopAttrib();
glPopMatrix();
glEnd(); 
}

if (!LightSwitch1)
{
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
glPushMatrix();
glTranslatef(AxisX, AxisY, AxisZ);
glColor3f(1.0, 0.0, 0.0);
glPushAttrib(GL_LIGHTING_BIT | GL_CURRENT_BIT);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Blue);
glutSolidSphere(2.0, 10.0, 5.0);
glPopAttrib();
glPopMatrix();
}
glEnd();
4

2 に答える 2

0

私は専門家ではありませんが、球体と立方体に別々の glPushMatrix() / glPopMatrix() ブロックを用意することで、各オブジェクトに独自のローカル座標系を与えることができると信じています。これが、それらが互いに独立して変形する理由です。

それらを一緒に移動したい場合は、最初に glPushMatrix() / glPopMatrix() の外で glTranslate() を指定する必要があります:

glTranslatef(translation....);     // Translates the whole scene 
glPushMatrix();
   glTranslatef(the sphere);       // Sphere & cube locations changeable via keyb.
   glTranslatef(the cube);
glPopMatrix();

たとえば、球に対して立方体を回転させたい (つまり、球の中心を立方体の座標系の原点にする) 場合は、最初のブロック内にネストされた新しい glPushMatrix()/glPopMatrix() ブロックを作成します。 :

glPushMatrix();
   glTranslatef(the sphere);       
        glPushMatrix();
        glRotatef(the cube);       // Rotate about specific axis of the sphere
        glPopMatrix();
glPopMatrix();
于 2013-02-20T22:49:36.840 に答える
0

あなたのコードは、球を Axis の位置に、立方体を Cube の位置に描画するのに正しいと思います。あなたはキーボード機能を使用していて、1つだけを移動したいときに両方を一緒に移動していると言います。キーボード関数で両方の変数セットを更新していると思います。CubeXYZ と AxisXYZ を出力してみて、正しい結果が得られていることを確認してください。

于 2013-02-21T06:30:23.133 に答える