0

任何人都可以教我如何在原点 (0, 0, 0) 中绘制 2 个对象,例如一个立方体和一个球体,当我移动立方体时,球体仍然保持在原点。与移动球体相同,立方体仍然存在..使用键盘功能。

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 绘制立方体是正确的。您说您正在使用键盘功能,当您只想移动一个时,它会将它们一起移动。我相信您正在更新键盘功能中的两组变量。尝试打印出 CubeXYZ 和 AxisXYZ 并确保您得到正确的结果。

于 2013-02-21T06:30:23.133 回答