包括太阳、一颗行星和一颗卫星。 d按键控制行星自转,y按键控制行星绕太阳公转,p控制卫星的公转。 代码: #include <GL/glut.h> static int year = 0,day = 0,d = 0; void init() { glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT);//着色模型 } 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);//创建一个表示对称透视视图平截头体的矩阵,并把它与当前矩阵相乘 glMatrixMode(GL_MODELVIEW);//对模型视景矩阵堆栈应用随后的矩阵操作 glLoadIdentity(); gluLookAt(0.0,5.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);//定义一条视线 } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,0.0,0.0); glPushMatrix();//pushes the current matrix stack down by one, duplicating the current matrix //绘制太阳 glutWireSphere(1.0,20,16);//render a wireframe sphere //绘制行星 glRotatef((GLfloat)year,0.0,1.0,0.0);//绕向量(0.0,1.0,0.0)旋转角度(第一个参数) glTranslatef(2.0,0.0,0.0);//平移 glRotatef((GLfloat)day,0.0,1.0,0.0); glutWireSphere(0.2,10,8); //增加一颗卫星 glTranslatef(1.0,0.0,0.0);//平移 glRotatef((GLfloat)d,0.0,1.0,0.0); glutWireSphere(0.5,10,8); glPopMatrix(); glutSwapBuffers();//互换缓存(双缓存时候) } void keyboard(unsigned char key,int x,int y) { switch(key){ case 'd': day = (day + 10) % 360; glutPostRedisplay();//标记当前窗口需要重新绘制。通过glutMainLoop下一次循环时, //窗口显示将被回调以重新显示窗口的正常面板 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; case 'p': d = (d + 5) % 360; glutPostRedisplay(); break; case 'P': d = (d - 5) % 360; glutPostRedisplay(); break; default: break; } } int main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(100,100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 运行结果: 相关文章: 2021-05-31 2021-10-08 2021-07-02 2022-12-23 2021-12-10 2021-04-05 2021-07-11 2022-12-23