【循序渐进学图形学之】OpenGL绘制太阳系模型
2011-10-28 15:38
295 查看
包括太阳、一颗行星和一颗卫星。
d按键控制行星自转,y按键控制行星绕太阳公转,p控制卫星的公转。
代码:
运行结果:
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; }
运行结果:
相关文章推荐
- OpenGL学习三:绘制矢量图形模型
- 【循序渐进学图形学之】OpenGL视图和模型变换中各变换发生顺序的思考
- OpenGL 第二课,绘制几何图形
- 3.6WorldWind利用opengl绘制地球模型
- OpenGL_Qt学习笔记之_02(绘制简单平面几何图形)
- OpenGL笔记:二. 绘制几何图形
- 每天一个OpenGL程序 第六篇 图形的组合绘制
- android opengl 原理及开发(2)绘制基本图形
- 学习OpenGL(四)绘制直线图形
- 单文档视图结构中利用OpenGL绘制图形
- opengl 绘制简单图形
- OpenGL绘制基本图形单元的方法
- OpenGL(二)图形绘制之平面多面体的绘制
- OpenGL入门学习——第二课 绘制几何图形
- OpenGL 绘制二维图形
- OpenGL_Qt学习笔记之_04(3D图形的绘制和旋转)
- 图解opengl 3D 图形绘制实例
- 【循序渐进学图形学之】OpenGL GLUT扩展库安装与配置(Windows Visual Studio2008)
- 【循序渐进学图形学之】OpenGL使用多边形近似模拟法构建表面
- QGLWidget类用来绘制OpenGL图形的窗口