2013-02-20 75 views
0

任何人都可以教我如何在原點(0,0,0)繪製2個對象,例如一個立方體和一個球體,當我移動該立方體時,球體只保留在原點。與移動球體相同,立方體保持不變。 使用keyboardfunc。opengl物體移動/開關語句

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

glEnd()是不必要的,但否則您的繪圖代碼似乎沒問題。問題可能在其他地方。你打印了CubeXYZ和AxisXYZ的值以確保它們符合你的期望嗎? – 2013-02-20 15:11:55

+0

這些值是(0,0,0)這是我猜測的原點..但是用我的代碼,它們都在同一時間移動 – 2013-02-20 15:32:09

回答

0

我不是專家,但我相信,通過具有用於球體和立方體獨立glPushMatrix()/ glPopMatrix()塊,你給每個對象自身的局部座標系。這就是爲什麼他們互相獨立轉換。

如果你想他們一起運動,你需要在你glPushMatrix(外指定glTranslate())/ glPopMatrix()第一名:

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

我相信你的代碼是正確繪製Axis位置的球體和Cube位置的立方體。你說你正在使用鍵盤功能,當你想移動它們時,它們一起移動它們。我相信你正在更新鍵盤功能中的兩組變量。嘗試打印出CubeXYZ和AxisXYZ,並確保你得到正確的東西。