2013-03-03 114 views
0

我想在OpenGL 2.0中創建一個雪人。我想旋轉整個形狀,但每次運行程序都不起作用。在OpenGL中旋轉的多個對象

glPushMatrix(); 

    //bottom sphere 
    glTranslated(tranX,tranY-2,tranZ); 
    glRotated(rotX,1,0,0); 
    glRotated(rotY,0,1,0); 
    glRotated(rotZ,0,0,1); 
    glScaled(scaX,scaY,scaZ); 

    glColor3f(1.1,.7,.99); 
    glutSolidSphere(1.5,30,30); 

    //middle sphere 
    glTranslated(tranX,tranY+2.3,tranZ+8); 
    glRotated(rotX,1,0,0); 
    glRotated(rotY,0,1,0); 
    glRotated(rotZ,0,0,1); 
    glScaled(scaX,scaY,scaZ); 

    glColor3f(1.1,.7,.99); 
    glutSolidSphere(1.3,30,30); 

    //top sphere 
    glTranslated(tranX,tranY+2,tranZ+10); 
    glRotated(rotX,1,0,0); 
    glRotated(rotY,0,1,0); 
    glRotated(rotZ,0,0,1); 
    glScaled(scaX,scaY,scaZ); 

    glColor3f(1.1,.7,.99); 
    glutSolidSphere(1,30,30); 
glPopMatrix(); 
+1

你能比'不行'更具體嗎? – icktoofay 2013-03-03 03:09:44

+0

答案已經給出,但我想添加一個建議:您可以嘗試避免舊的固定功能管道,並使用glm(http://glm.g-truc.net/)來構建自己的小場景圖發動機。 – dinony 2013-05-16 16:10:15

回答

0

瞭解OpenGL轉換的一點是,它們修改當前座標系而不是單個對象。例如,當您調用glRotated時,它將圍繞所提供的軸旋轉座標系提供的角度,並在調用它之後影響您呈現的每個幾何幾何位置,直到您更改或替換矩陣(通過調用glPopMatrix,glLoadMatrix等) 。

在你的例子中,你旋轉雪人的每個球體,但沒有影響場景中所有對象的總體旋轉。嘗試將您希望影響整個場景的旋轉放置在日程表頂部的glPushMatrix呼叫之後。