opengl对象移动/切换语句

opengl对象移动/切换语句,opengl,object,cube,Opengl,Object,Cube,任何人都可以教我如何在原点(0,0,0)中绘制两个对象,例如立方体和球体,当我移动立方体时,球体只保留在原点中。与移动球体相同,立方体仍保留。。 使用键盘功能 if (!LightSwitch) { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glPushMatrix(); glTranslatef(CubeX, CubeY, CubeZ); glColor3f(1.0, 0.0, 0.0); glPushAttrib(GL_LIGHTING_BIT

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

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();

我不是专家,但我相信,通过为球体和立方体使用单独的glPushMatrix()/glPopMatrix()块,可以为每个对象提供自己的局部坐标系。这就是它们相互独立变换的原因

如果要将它们一起移动,首先需要在glPushMatrix()/glPopMatrix()外部指定glTranslate():

例如,如果要相对于球体旋转立方体(即,使球体中心成为立方体坐标系的原点),请在第一个块中嵌套一个新的glPushMatrix()/glPopMatrix()块:

glPushMatrix();
   glTranslatef(the sphere);       
        glPushMatrix();
        glRotatef(the cube);       // Rotate about specific axis of the sphere
        glPopMatrix();
glPopMatrix();

我相信您的代码在位置轴绘制球体和位置立方体时是正确的。你说你正在使用一个键盘func,当你只想移动一个的时候,它会同时移动它们。我相信您正在更新键盘函数中的两组变量。尝试打印CubeXYZ和AxisXYZ,确保得到正确的结果。

glEnd()是不必要的,但在其他情况下,绘图代码似乎没有问题。问题可能在其他地方。您是否打印了CubeXYZ和AxisXYZ的值以确保它们是您期望的值?这些值是(0,0,0),我猜这是原点。。但在我的代码中,它们同时移动
glPushMatrix();
   glTranslatef(the sphere);       
        glPushMatrix();
        glRotatef(the cube);       // Rotate about specific axis of the sphere
        glPopMatrix();
glPopMatrix();