#include <GL\glut.h>

float fEarth = 2.0f;//地球绕太阳的旋转角度
float fMoon = 24.0f;//月球绕地球的旋转角度

void Init()
{
  glEnable(GL_DEPTH_TEST);//启用深度测试
  glClearColor(0.0f,0.0f,0.0f,0.8f);//背景为黑色
}

void Reshape(int width, int height)
{
  if (0==height)
  {
    height = 1;
  }
  
  glViewport(0,0,width,height);//设置视区尺寸
  glMatrixMode(GL_PROJECTION);//指定当前操作投影矩阵堆栈
  glLoadIdentity();//重置投影矩阵

  //指定透视投影的观察空间
  gluPerspective(45.0f,(float)width/(float)height,1.0f,1000.0f);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

void Display(void)
{
  //清除颜色和深度缓冲区
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  //指定当前操作模型师徒矩阵堆栈
  glMatrixMode(GL_MODELVIEW);
  //重置模型视图矩阵
  glLoadIdentity();

  //图形沿Z轴负向移动
  glTranslatef(0.0f,0.0f,-500.0f);
  //绘制太阳
  glColor3f(1.0f,0.0f,0.0f);
  glutSolidSphere(50.0f,20,20);

  glColor3f(0.0f,0.0f,1.0f);
  //地球与太阳的黄赤交角
  glRotatef(23.27,0.0,0.0,1.0);
  glRotatef(fEarth,0.0f,1.0f,0.0f);

  glTranslatef(200.0f,0.0f,0.0f);
  //画地球
  glutSolidSphere(20.0f,20,20);
  glPopMatrix();
  glPopMatrix();

  glRotatef(6.0f,1.0f,1.0f,1.0f);
  glRotatef(fMoon,0.0f,1.0f,0.0f);
  glColor3f(1.0f,1.0f,0.0f);

  glTranslatef(30.0f,0.0f,0.0f);
  //月球
  glutSolidSphere(5.0f,20,20);
  glLoadIdentity();
  glFlush();

  glutSwapBuffers();
}

/*
在空闲时调用,动画效果
*/
void myIdle(void)
{
  fEarth += 0.03f;//增加旋转步长,产生动画效果
  if (fEarth>360.0f)
  {
    fEarth = 2.0f;
  }

  fMoon += 0.24f;
  if (fMoon>360.0f)
  {
     fMoon = 24.0f;
  }
  Display();
}

int main(int argc,char* argv[])
{
  glutInit(&argc,argv);
  //窗口使用RGB色,双缓存和深度缓存
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  glutInitWindowPosition(200,100);//窗口位置

  //窗口尺寸
  glutInitWindowSize(600,460);
  glutCreateWindow("基于Opengl的太阳系动画");
  glutReshapeFunc(Reshape);

  glutDisplayFunc(Display);
  glutIdleFunc(&myIdle);
  Init();

  glutMainLoop();//
  return 0;
}

运行效果:

基于Opengl的太阳系动画实现的更多相关文章

  1. 基于OpenGL三维软件开发

    实验原理: OpenGL在MFC下编程原理---- Windows操作系统对OpenGL的支持 在Windows下用GDI作图必须通过设备上下文(DeviceContext简写DC)调用相应的函数:用 ...

  2. 学习基于OpenGL的CAD程序的开发计划(一)

    本人目前从事的工作面对的客户中很多来自高端制造业,他们对CAD/CAE/CAM软件的应用比较多.公司现有的软件产品主要是用于渲染展示及交互,但面对诸如CAD方面的应用(比如基于约束的装配.制造工艺的流 ...

  3. 基于HTML5 Tab选项卡动画切换特效

    基于HTML5 Tab选项卡动画切换特效.这是一款基于HTML5+CSS3实现的带有动画切换效果的Tab选项卡插件cbpFWTabs.效果图如下: 在线预览   源码下载 实现的代码. html代码: ...

  4. 基于animation.css实现动画旋转特效

    分享一款基于animation.css实现动画旋转特效.这是一款基于CSS3实现的酷炫的动画旋转特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class ...

  5. 基于OpenGL编写一个简易的2D渲染框架-05 渲染文本

    阅读文章前需要了解的知识:文本渲染 https://learnopengl-cn.github.io/06%20In%20Practice/02%20Text%20Rendering/ 简要步骤: 获 ...

  6. 一款基于jquery ui的动画提交表单

    今天要给大家分享一款基于jquery ui的动画提交表单.这款提交表单的的效果是以动画的形式依次列表所需填写的信息.效果非常不错,效果图如下: 在线预览   源码下载 实现的代码. html代码: & ...

  7. 分享一款基于jquery的圆形动画按钮

    之前为大家介绍过一款纯css3实现的圆形旋转分享按钮.今天要给大家带来一款基于jquery的圆形动画按钮.这款按钮鼠标经过的时候以边框转圈,然后逐渐消息,在实例中给出了四种颜色的demo.效果图如下: ...

  8. 基于js全屏动画焦点图幻灯片

    今天给大家分享一款基于js全屏动画焦点图幻灯片.这款焦点图内的内容以动画形式出现和消失.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="sl ...

  9. 一款基于jquery的喜欢动画按钮

    今天给大家带来一款基于jquery的喜欢动画按钮.这个实例中给了三种动画特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <p class='heading'> C ...

随机推荐

  1. python MySQLdb连接mysql失败(转载)

    最近了解了一下django,数据库选用了mysql, 在连接数据库的过程中,遇到一点小问题,在这里记录一下,希望能够对遇到同样的问题的朋友有所帮助,少走一些弯路.关于django,想在这里也额外说一句 ...

  2. 使用smart-npm和npm安装完毕之后发现 不是内部命令和外部命令!

    我明明记得加入过path环境变量.我想一定是什么原因 一查bing.com然后发现没有在全局环境  .所以 只需要过npm install -g gulp 一句执行cmd这样就好 $ gulp提示gu ...

  3. 条款44:将与参数无关的代码剥离template

    使用template时,不小心的时候可能就会带来代码膨胀的问题: template<typename T, std::size_t n> class SquareMatrix{ publi ...

  4. hdu-2544-最短路(Bellman-Ford算法模板)

    题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...

  5. 2018.8.11E-mail

    1发送附件 Attached please find the XXX  for your review and comment. Outlook的附件最好不超过10M,文件要用英语命名,视频音频要压缩 ...

  6. 7.MySQL优化---存储过程和存储函数

    转自互联网. 当一个大型系统在建立时,会发现,很多的SQL操作是有重叠的,个别计算是相同的,比如:业务系统中,计算一张工单的计算方式.当遇到这些情况时,我们运用存储过程就是一个非常棒的优化啦.那么,什 ...

  7. 分析 PHP升级导致系统负载过高问题(转载)

    原文:http://chuansongme.com/n/797172 背景 据XX部门兄弟反应, 其在将PHP从5.3.8 升级到5.5.13 时, 开始运行正常, 运行一段时间后, 系统负载变高,达 ...

  8. 1109. Group Photo (25)

    Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...

  9. Mxgraph使用总结一

    一.Mxgraph介绍: mxGraph 是一个 JS 绘图组件适用于需要在网页中设计/编辑 Workflow/BPM流程图.图表.网络图和普通图形的 Web 应用程序.mxgraph 下载包中包括j ...

  10. 添加gitolite用户和仓库

    1.在linux工作机上生成密钥对 ssh-keygen -t rsa 输入用户名但不输入passphrase,这样连接时就不用每次都输入passphrase了. 2.添加用户和仓库 在管理员的工作机 ...