opengl对象移动/切换语句

时间:2013-02-20 15:03:38

标签: opengl object cube

任何人都可以教我如何在原点(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();

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

我相信你的代码在Axis位置和位于Cube位置的立方体绘制球体是正确的。你说你正在使用键盘功能,当你想只移动一个键盘时它会将它们移动到一起。我相信你正在更新键盘功能中的两组变量。尝试打印CubeXYZ和AxisXYZ,确保你做对了。