任何人都可以教我如何在原点(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();
答案 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,确保你做对了。