#include <gl/glut.h> static int year=0,day=0; void init(void){ glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); //********************************************************************************************************/ //GL_FLAT:单调着色。对点,直线或多边形采用一种颜色进行绘制,整个图元的颜色就是它的任何一点的颜色。 //GL_SMOOTH:平滑着色:用多种颜色进行绘制,每个顶点都是单独进行处理的,各顶点和各图元之间采用均匀插值。 //********************************************************************************************************/ } void display(void){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); glPushMatrix(); glutWireSphere(1.0,20,16); //********************************************************************************************************/ //radius:球体的半径 //slices:围绕在Z轴周围的线的条数(类似于地球上经线把地球表面分成的一块块“细小部分”) //stacks:沿Z轴分布的线的条数(类似于纬线) //********************************************************************************************************/ glRotatef((GLfloat)year,0.0,1.0,0.0); glTranslated(2.0,0.0,0.0); glRotatef((GLfloat)day,0.0,1.0,0.0); glutWireSphere(0.2,10,8); glPopMatrix(); glutSwapBuffers(); } void reshape(int w,int h){ glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,20.0); //*****************************************************************/ //fovy:指定视景体的视野的角度,以度数为单位,y轴的上下方向 //aspect:指定你的视景体的宽高比(x 平面上) //zNear:指定观察者到视景体的最近的裁剪面的距离(必须为正数) //zFar:与上面的参数相反,不再啰嗦的翻译了(这个参数也必须是正数) //*****************************************************************/ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0); //*****************************************************************/ //第一组eyex, eyey,eyez 相机在世界坐标的位置 //第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置 //第三组upx,upy,upz 相机向上的方向在世界坐标中的方向 //*****************************************************************/ } void keyboard(unsigned char key,int x,int y){ switch (key){ case 'd': day = (day+10)%360; glutPostRedisplay(); break; case 'D': day = (day-10)%360; glutPostRedisplay(); break; case 'y': year = (year+5)%360; glutPostRedisplay(); break; case 'Y': year = (year-5)%360; glutPostRedisplay(); break; default: break; } } int main(int argc,char**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE); glutInitWindowPosition(300,100); glutInitWindowSize(800,600); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }