太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx

上传人:b****4 文档编号:8238989 上传时间:2023-05-10 格式:DOCX 页数:13 大小:106.58KB
下载 相关 举报
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第1页
第1页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第2页
第2页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第3页
第3页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第4页
第4页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第5页
第5页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第6页
第6页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第7页
第7页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第8页
第8页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第9页
第9页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第10页
第10页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第11页
第11页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第12页
第12页 / 共13页
太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx

《太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx》由会员分享,可在线阅读,更多相关《太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx(13页珍藏版)》请在冰点文库上搜索。

太阳系行星运行模拟C++程序语言之欧阳体创编Word文档格式.docx

基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。

其变换方法有利于减少算法的运行时间,提高三维图形的显示速度。

  3.颜色模式设置:

OpenGL颜色模式有两种,即RGBA模式和颜色索引(ColorIndex)。

  4.光照和材质和镜面光(SpecularLight)。

材质是用光反射率来表示。

场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。

  5:

纹理映射(TextureMapping)。

利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。

  6:

位图显示和图象增强图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。

以上三条可使被仿真物更具真实感,增强图形显示的效果。

  7:

双缓存动画(DoubleBuffering)双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。

  此外,利用OpenGL还能实现深度暗示(DepthCue)、运动模糊(MotionBlur)等特殊效果。

从而实现了消隐算法。

具体实现

利用VC6.0和OpenGL绘制太阳系模拟,以最简单的方式,新建一个win32consoleapplication,加入以下代码:

#include<

windows.h>

stdio.h>

stdlib.h>

#include"

gl/glut.h"

//行星

GLfloatrot0=30.0;

GLfloatrot1=0.0;

GLfloatrot2=0.0;

GLfloatrot3=0.0;

GLfloatrot4=0.0;

GLfloatrot5=0.0;

GLfloatrot6=0.0;

GLfloatrot7=0.0;

GLfloatrot8=0.0;

//卫星

GLfloatrot9=0.0;

GLfloatrot10=0.0;

GLfloatrot11=0.0;

voidinit()

{

glClearColor(0.0,0.0,0.0,0.0);

glClearDepth(1.0);

glShadeModel(GL_FLAT);

}

voiddisplay()

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glColor3f(1.0,1.0,1.0);

glLoadIdentity();

//gluLookAt(0,10,10,0,0,0,0,1,0);

//glRotatef(45.0,0.0,0.0,1.0);

glTranslatef(0.0,0.0,-20.0);

glRotatef(90.0,1.0,0.0,0);

glPushMatrix();

//绘制太阳

glColor3f(1.0,0.0,0.0);

glutSolidSphere(2.0,32,32);

//绘制地球

glColor3f(0.0,0.0,1.0);

//绘制辅助轨道

glRotatef(90,1.0,0,0.0);

glutSolidTorus(0.02,5.0,10,64);

glRotatef(-90,1.0,0,0.0);

//设置地球公转速度

glRotatef(rot0,0.0,1.0,0.0);

//设置地球半径

glTranslatef(5.0,0.0,0.0);

//设置地球自转速度

//glRotatef(rot1,0.0,1.0,0.0);

//绘制地球

glutSolidSphere(0.4,32,32);

//绘制地球的卫星-月亮

glColor3f(0.5,0.6,0.5);

//抵消地球自转影响

//glRotatef(-rot1,0.0,1.0,0.0);

//设置月亮公转速度

glRotatef(rot9,0.0,1.0,0.0);

//设置月亮公转半径

glTranslatef(0.6,0.0,0.0);

//绘制月亮

glutSolidSphere(0.1,10,8);

glPopMatrix();

//绘制水星

glColor3f(0.0,1.0,1.0);

glutSolidTorus(0.02,2.5,10,64);

//设置水星公转速度

glRotatef(rot1,0.0,1.0,0.0);

//设置水星公转半径

glTranslatef(2.5,0.0,0.0);

//设置水星自传

glRotatef(rot3,0.0,1.0,0.0);

glutSolidSphere(0.2,32,32);

//绘制金星

glColor3f(0.0,1.0,0.0);

//绘制辅助轨道

glutSolidTorus(0.02,3.4,10,64);

//设置金星公转速度

glRotatef(rot2,0.0,3.0,0.0);

//设置金星公转半径

glTranslatef(3.4,0.0,0.0);

//设置金星自传

//绘制金星

glutSolidSphere(0.3,32,32);

//绘制火星

glutSolidTorus(0.02,6.6,10,64);

//设置火星公转速度

glRotatef(rot3,0.0,4.0,0.0);

//设置火星公转半径

glTranslatef(6.6,0.0,0.0);

//设置火星自传

glRotatef(rot7,0.0,2.0,0.0);

//绘制火星

glutSolidSphere(0.5,32,32);

//绘制木星

glColor3f(2.0,0.1,1.0);

glutSolidTorus(0.02,8.5,10,64);

//设置木星公转速度

glRotatef(rot4,0.0,0.4,0.0);

//设置木星公转半径

glTranslatef(8.5,0.0,0.0);

//设置木星自传

glRotatef(rot3,0.0,0.3,0.0);

//绘制木星

glutSolidSphere(1.0,32,32);

//绘制木星卫星-木卫1

glColor3f(0.4,0.3,0.5);

//设置木卫1公转速度

glRotatef(rot10,0.0,1.0,0.0);

//设置木卫1公转半径

glTranslatef(1.3,0.0,0.0);

//绘制木卫1

//绘制木星卫星-木卫2

glColor3f(0.5f,0.5f,0.5f);

//设置木卫2公转速度

glRotatef(rot11,0.0,1.0,0.0);

//设置木卫2公转半径

glTranslatef(1.2,0.0,0.0);

//绘制木卫2

glutSolidSphere(0.08,10,8);

//绘制土星

glColor3f(1.0f,1.0f,0.0f);

glutSolidTorus(0.02,12.5,10,64);

//设置土星公转速度

glRotatef(rot5,0.0,0.4,0.0);

//设置土星公转半径

glTranslatef(12.5,0.0,0.0);

//设置土星自传

//绘制土星

glutSolidSphere(0.85,32,32);

//绘制土星光环

glutSolidTorus(0.1,1.25,10,64);

glutSolidTorus(0.07,1.65,10,64);

//绘制天王星

glColor3f(0.0f,1.0f,1.0f);

glutSolidTorus(0.02,15.5,10,64);

//设置天王星公转速度

glRotatef(rot6,0.0,0.4,0.0);

//设置天王星公转半径

glTranslatef(15.5,0.0,0.0);

//设置天王星自传

glRotatef(rot1,0.0,0.3,0.0);

//绘制天王星

glutSolidSphere(0.15,32,32);

//绘制海王星

glColor3f(0.0f,0.0,8.0f);

glutSolidTorus(0.02,17.5,10,64);

//设置海王星公转速度

glRotatef(rot7,0.0,0.4,0.0);

//设置海王星公转半径

glTranslatef(17.5,0.0,0.0);

//设置海王星自传

//绘制海王星

glutSolidSphere(0.145,32,32);

//绘制冥王星

glColor3f(0.5f,0.5f,0.5f);

glutSolidTorus(0.02,19.5,10,64);

//设置冥王星公转速度

glRotatef(rot8,0.0,0.4,0.0);

//设置冥王星公转半径

glTranslatef(19.5,0.0,0.0);

//设置冥王星自传

glRotatef(rot2,0.0,0.3,0.0);

//绘制冥王星

glutSwapBuffers();

glFlush();

voididle()

rot0+=0.1;

if(rot0>

=360.0)

rot0-=360.0;

rot1+=0.416;

if(rot1>

rot1-=360.0;

rot2+=0.1631;

if(rot2>

rot2-=360.0;

rot3+=0.053;

if(rot3>

rot3-=360.0;

rot4+=0.0083;

if(rot4>

rot4-=360.0;

rot5+=0.0034;

if(rot5>

rot5-=360.0;

rot6+=0.00119;

if(rot6>

rot6-=360.0;

rot7+=0.00069;

if(rot7>

rot7-=360.0;

rot8+=0.0008;

if(rot8>

rot8-=360.0;

rot9+=1.0;

if(rot9>

rot9-=360.0;

rot10+=0.005;

if(rot10>

rot10-=360.0;

rot11+=0.01;

if(rot11>

rot11-=360.0;

glutPostRedisplay();

voidreshape(intw,inth)

glViewport(0,0,(GLsizei)w,(GLsizei)h);

glMatrixMode(GL_PROJECTION);

gluPerspective(60.0,(GLdouble)w/(GLdouble)h,1.0,100.0);

glMatrixMode(GL_MODELVIEW);

voidmain(intargc,char**argv)

glutInit(&

argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);

glutInitWindowSize(600,400);

glutInitWindowPosition(500,500);

glutCreateWindow("

planetsim"

);

init();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutIdleFunc(idle);

glutMainLoop();

return;

运行结果

总结

本次设计是基于VC++6.0平台和OpenGL,进行太阳系九大行星的运行模拟,虽说取得了比较好的效果,但是在某些方面还是不足:

1.运行的轨道是简化的圆形轨道,不是实际中的椭圆轨道,没遵循开普勒三大定律;

2.视角固定,没有实现任意视角观察;

3.由于对OpenGL不熟悉,时间不短,大部分代码是在参考别人的基础上写出;

4.没有实现纹理光照等效果。

通过这次设计,对OpenGL有了一定的了解,对计算机图形学的知识也有了更深一步的理解,发现自己的不足,有利于以后的学习与工作。

5.参考书目

1.《计算机图形学》DonaldHearnM.PaulineBaker著电子工业出版社

2.《OpenGl编程基础》安吉尔 著清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2