openGL之天体运动
计算机图形学模拟天体运动的方法
天体运动:
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之天体运动相关推荐
- OpenGL “太阳、地球和月亮”天体运动动画 例子
http://oulehui.blog.163.com/blog/static/7961469820119186616743/ OpenGL "太阳.地球和月亮"天体运动动画 例子 ...
- 用.NET模拟天体运动
用.NET模拟天体运动 这将是一篇罕见而偏极客的文章. 我上大学时就见过一些模拟太阳系等天体运动的软件和网站,觉得非常酷炫,比如这个(http://www.astronoo.com/en/articl ...
- 考粒子静态能源公式、太阳系天体运动原理...中国银行笔试题刷屏,网友:这是在招总行行长?...
转载于 每日经济新闻 9月开始,校园招聘如火如荼的进行着.9月26日,"中国银行笔试"这一话题登上微博热搜.这条热搜下,不少考生吐槽,"怀疑自己在考中科院".中 ...
- 宇宙天体运动仿真项目c++实现
需求 模拟宇宙中天体运动,对于宇宙中的每一个天体,计算其速度和位置.满足谷歌测试框架进行测试. 架构 涉及的类:宇宙,天体对象,天体创建工厂,数学计算类,遍历宇宙中天体类,解析文本类 设计模式:宇宙是 ...
- OpenGL之仿“天体”运动渲染球体之间的旋转效果
前文 本文是基于OpenGL之渲染大小球自转和公转的效果完成的,之前的文章已详细地说明了整体的地板的绘制.球体的颜色绘制,以及指定球体之间的旋转和自转等逻辑. 本文在其基础上继续实现图元上纹理的渲染和 ...
- pstate0 vid数值意义_天体运动的简单数值计算
(建议阅读全文) 预备知识 万有引力, 弹簧振子受迫运动的简单数值计算 下面我们来用一种极其简单的算法对单个天体在中心天体的万有引力作用下的运动进行数值计算. 事实上该问题存在解析解(见开普勒三定律) ...
- 简易天体运动—— sun earth moon(计算机图形学)
曾经的图形学作业,顺手放上来吧.(手动滑稽 PS:工程下载:https://download.csdn.net/download/weixin_41918712/10652828 一些概念 OpenG ...
- Matlab模拟三个天体运动
1 简介 这是一个三体运动模拟软件,描述自由空间中存在的两至三颗可视作质点的星体在相互之间的万有引力作用下所做的运动.基于牛顿经典力学原理,采用迭代法进行数值模拟,实时显示星体的位置以及轨迹. 2 部 ...
- matlab制作天体运动动画,天体运动 动态演示
为 什 么 太 阳 . 月 球及 行 星 会 在 天 球 上 「 移 动 」 , 但 恒 星 则 好 像 永 恒 不 变 ? 一.恒 星 的 运 动 太 阳 每 天 东 升西 落 , 可 说 人 尽 ...
最新文章
- android 程序运行不了,当应用程序在后台运行或不运行时,Android – 推送通知工作不正确...
- 使用CURL调用接口[*示例*]
- 【讨论】拿什么来维护原创作者的权益?
- 【机器学习基础】机器学习模型什么时候需要做数据标准化?
- 简单易懂的 pwnable.kr 第六题[random]Writeupt
- internal/validators.js:124 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value);
- Upload LABS Pass-5
- Swift - Realm数据库的使用详解(附样例)
- xshell 执行脚本API介绍(附带xsh的python包)
- 【优化求解】基于天牛须算法PID控制器优化设计matlab代码
- Hinton 2006 science 文章 RBM 预训练 AutoEncoder
- python表求列平均值_python中表列的平均值
- 解决安装在虚拟机VMware的Ubuntu-18-04系统与主机之间的复制粘贴问题
- 学校计算机及设备维护维修管理制度,《计算机设备维护维修管理制度.doc
- pulp platform 的搭建
- Android9怎样安装xposed,EdXposed 在android 9 上的安装和使用
- Java实现 LeetCode 400 第N个数字
- 游戏运营岗位介绍和面试题答案
- fiddler工具使用大全(全网最详细)
- 淘宝框架atlas基本使用说明