计算机图形学模拟天体运动的方法
天体运动:
1、模拟地球自转和公转
2、模拟月亮卫星绕地球转

以下涉及了计算机图形学中的三维观察的内容

  glViewport(0, 0, (GLsizei)w, (GLsizei)h);//定义视区大小glMatrixMode(GL_PROJECTION);//将矩阵设置成投影模式,满足绘图所需执行的矩阵变换glLoadIdentity();//将当前矩阵设为单位矩阵,在变换前需要将矩阵设置为单位矩阵gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0);/*透视投影gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)fovy: 眼睛上下睁开的幅度,值越小,视野范围越狭小(眯眼),值越大,视野范围越宽阔(睁开铜铃般的大眼),值为0,闭眼aspect: 实际窗口的横纵比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);

glutWireSphere函数是openGL里面自定义的一个函数,用来画球体

    void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);radius: 球体的半径slices: 以Z轴上线段为直径分布的圆周线的条数(将Z轴看成地球的地轴,类似于经线)stacks: 围绕在Z轴周围的线的条数(类似于地球上纬线)

year表示行星绕着太阳中心公转时,每次改变的角度的变量
day表示地球自转时,每次旋转的角度变量

    glPushMatrix();//保存当前位置/*太阳*/glColor3f(1.0, 0.0, 0.0);glutWireSphere(1.0, 20, 16); //网状球体,模拟太阳,红色/*太阳与地球之间的行星*/glRotatef((GLfloat)year1, 0.0, 1.0, 0.0);//绕y逆时针旋转year度,GLfloat32位浮点数,模拟行星绕太阳转动glTranslatef(1.5, 0.0, 0.0);//平移,x正方向glColor3f(0.0, 0.0, 1.0);glutWireSphere(0.15, 10, 8); //绘制一个小的网状球体,模拟行星,蓝色glPopMatrix();//恢复之前保存的位置glPushMatrix();//保存当前位置/*地球*/   glRotatef((GLfloat)year, 0.0, 1.0, 0.0);//绕y逆时针旋转year度,GLfloat32位浮点数,模拟地球绕太阳转动glTranslatef(2.0, 0.0, 0.0);//平移,x正方向glRotatef((GLfloat)day, 0.0, 1.0, 0.0);//绕y逆时针旋转day度,GLfloat32位浮点数,模拟地球自转glPushMatrix();//保存当前位置glMatrixMode(GL_MODELVIEW);//设置为模型视图模式,使用该模式能够良好的对当前对象进行变换glRotatef(60.0, 0.0, 1.0, 1.0);//地球轴旋转变换glColor3f(0.0, 1.0, 0.0);glutWireSphere(0.2, 10, 8); //绘制一个小的网状球体,模拟地球,绿色glPopMatrix();//恢复之前保存的位置/*月亮*/glRotatef((GLfloat)year, 0.0, 1.0, 0.0);//绕y逆时针旋转year度,GLfloat32位浮点数,模拟月亮绕地球转动glTranslatef(0.5, 0.0, 0.0);//平移,x正方向glColor3f(1.0, 1.0, 0.0);glutWireSphere(0.05, 10, 8); //绘制一个小的网状球体,模拟月亮,黄色glPopMatrix();//恢复之前保存的位置glutSwapBuffers();//GLUT_DOUBLE双缓冲,屏幕显示调用glutSwapBuffers()

在刚开始做这个天体运动的时候,对于月亮卫星绕地球转动时,总是不成功,原因是在编写代码的时候,总是使用glPopMatrix();函数回到画太阳的最初位置,最后导致月亮在转动时总是绕着太阳转,没有达到最初想要的效果。
所以,要达到月亮转的效果,必须使月亮相对位置的是地球,才能够达到所需效果。

实现效果图(依次分别为:最初,公转,自转月亮绕地球转)


openGL之天体运动相关推荐

  1. OpenGL “太阳、地球和月亮”天体运动动画 例子

    http://oulehui.blog.163.com/blog/static/7961469820119186616743/ OpenGL "太阳.地球和月亮"天体运动动画 例子 ...

  2. 用.NET模拟天体运动

    用.NET模拟天体运动 这将是一篇罕见而偏极客的文章. 我上大学时就见过一些模拟太阳系等天体运动的软件和网站,觉得非常酷炫,比如这个(http://www.astronoo.com/en/articl ...

  3. 考粒子静态能源公式、太阳系天体运动原理...中国银行笔试题刷屏,网友:这是在招总行行长?...

    转载于 每日经济新闻 9月开始,校园招聘如火如荼的进行着.9月26日,"中国银行笔试"这一话题登上微博热搜.这条热搜下,不少考生吐槽,"怀疑自己在考中科院".中 ...

  4. 宇宙天体运动仿真项目c++实现

    需求 模拟宇宙中天体运动,对于宇宙中的每一个天体,计算其速度和位置.满足谷歌测试框架进行测试. 架构 涉及的类:宇宙,天体对象,天体创建工厂,数学计算类,遍历宇宙中天体类,解析文本类 设计模式:宇宙是 ...

  5. OpenGL之仿“天体”运动渲染球体之间的旋转效果

    前文 本文是基于OpenGL之渲染大小球自转和公转的效果完成的,之前的文章已详细地说明了整体的地板的绘制.球体的颜色绘制,以及指定球体之间的旋转和自转等逻辑. 本文在其基础上继续实现图元上纹理的渲染和 ...

  6. pstate0 vid数值意义_天体运动的简单数值计算

    (建议阅读全文) 预备知识 万有引力, 弹簧振子受迫运动的简单数值计算 下面我们来用一种极其简单的算法对单个天体在中心天体的万有引力作用下的运动进行数值计算. 事实上该问题存在解析解(见开普勒三定律) ...

  7. 简易天体运动—— sun earth moon(计算机图形学)

    曾经的图形学作业,顺手放上来吧.(手动滑稽 PS:工程下载:https://download.csdn.net/download/weixin_41918712/10652828 一些概念 OpenG ...

  8. Matlab模拟三个天体运动

    1 简介 这是一个三体运动模拟软件,描述自由空间中存在的两至三颗可视作质点的星体在相互之间的万有引力作用下所做的运动.基于牛顿经典力学原理,采用迭代法进行数值模拟,实时显示星体的位置以及轨迹. 2 部 ...

  9. matlab制作天体运动动画,天体运动 动态演示

    为 什 么 太 阳 . 月 球及 行 星 会 在 天 球 上 「 移 动 」 , 但 恒 星 则 好 像 永 恒 不 变 ? 一.恒 星 的 运 动 太 阳 每 天 东 升西 落 , 可 说 人 尽 ...

最新文章

  1. 手动部署OpenStack环境(四:安装控制器必备软件)
  2. DataGuard physical standby创建与维护
  3. GRE核心词汇助记与精练-List9切分、部分
  4. 使用python写一个名片管理系统
  5. vectorvn1610报价_【8.5873.5444.G323】价格_厂家 - 中国供应商
  6. Balanced Ternary String
  7. apt-get update碰到错误
  8. bp神经网络预测_股指期货价格变动趋势往往反映的是股票价格的走势,因此BP神经网络对股指期货价格的准确预测就是对股票价格的准确预测。...
  9. Android官方开发文档Training系列课程中文版:添加ActionBar之添加Action按钮
  10. 2020年中国智能客服行业研究报告
  11. 开源内容管理系统 php mysql_30 个很棒的PHP开源CMS内容管理系统小结
  12. 星巴克饮品中竟喝出活蟑螂?官方回应了...
  13. 与饿了么三年“独家合作”即将到期 星巴克正与顺丰、美团等商谈配送合作
  14. pymongo基本方法使用笔记
  15. python怎么关闭csv_Python2.7.1:如何打开、编辑和关闭CSV fi
  16. UE4 虚幻引擎,LOD设置
  17. 双三次插值及Matlab实现
  18. 入门图形学:Texture3D
  19. CentOS域名解析失败
  20. Java8新特性之三:Stream API

热门文章

  1. 1.5万字讲清楚从0到1搭建电商营销中心(建议收藏)
  2. Docker 从入门到精通全套视频教程 百度云下载
  3. 【C\C++】空间中求一点到两点所构成的直线的距离
  4. 2022 John Locke 论文竞赛题目
  5. 收集的Redhat RHEL6 RHEL7 ISO百度云下载地址
  6. 中点Bresenham画圆算法|MFC|计算机图形学
  7. 综艺《燃烧吧!天才程序员》:科技类真人秀凭什么吸引人?它是在消费群体吗?
  8. java window10 等64位系统调用32位dll库
  9. 40、 最小的k个数
  10. 利用VC实现Word预览功能