參看:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html
#include<gl/GLUT.H> #include<Windows.h>static int day = 200; //一年中已經過去的天數,變化範圍[0, 359)void Display(void){ glEnable(GL_DEPTH_TEST); //繪製3D圖形式啟用,開啟更新深度緩衝區功能 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清楚螢幕顏色,深度緩衝區 glDepthFunc(GL_LEQUAL); //測試方式:小於等於 glMatrixMode(GL_PROJECTION); //投影變換操作,需要一種“近大遠小”的感覺 glLoadIdentity(); //操作前把當前矩陣設為單位矩陣 gluPerspective(75, 1, 1, 400000000); //視角大小為75度,實際視窗縱橫比為x/y=1,最近可視距離為1,最遠可視距離為400000000 glMatrixMode(GL_MODELVIEW); //視圖變換操作,從不同位置去觀察 glLoadIdentity(); gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0, 0, 1); //觀察點位置(0, -200000000,200000000), 目標位置(0,0,0), 眼睛朝向(0, 0, 1) //繪製紅色的太陽 glColor3f(1.0f, 0.0f, 0.0f); glutSolidSphere(69600000, 20, 20); //在原點繪製一個球體,球的半徑為69600000,以z軸上線段為直徑的圓周線條數為20,圍繞在z軸周圍線的條數為20 //繪製藍色的地球 glColor3f(0.0f, 0.0f, 1.0f); glRotatef(day, 0.0f, 0.0f, -1.0f); //以day/一年的天數*360度為旋轉的角度(這裡假設一年360天),圍繞z軸順時針方向旋轉,如果將-1該為1,則為逆時針 glTranslatef(150000000, 0.0f, 0.0f); //移動到位置(150000000, 0.0, 0.0) glutSolidSphere(15945000, 20, 20); //繪製黃色月球 glColor3f(1.0f, 1.0f, 0.0f); glRotatef(day/30.0*360.0, 0.0f, 0.0f, -1.0f); //以day/一個月的天數*360度為旋轉角度 glTranslatef(38000000, 0.0f, 0.0f); glutSolidSphere(4345000, 20, 20); glFlush(); //立即執行} void myDisplay(){ day++; if(day >= 360) day = 0; Display(); Sleep(100); glutPostRedisplay(); }int main(int argc, char *argv[]) { glutInit(&argc,argv); //對GLUT進行初始化,必須在其它的GLUT使用之前調用一次 glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); //設定顯示方式,使用RGB顏色,單緩衝 glutInitWindowPosition(400, 400); //設定視窗在螢幕中的位置 glutInitWindowSize(400, 400); //設定視窗的大小 glutCreateWindow("opengl"); //建立視窗,視窗標題為“opengl” glutDisplayFunc(myDisplay); //設定畫圖的函數 glutMainLoop(); //訊息迴圈 return 0; }