前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10.4.3 编程实例-太阳系动画

10.4.3 编程实例-太阳系动画

作者头像
步行者08
发布2018-10-09 17:58:29
4510
发布2018-10-09 17:58:29
举报
文章被收录于专栏:图形学与OpenGL图形学与OpenGL
clip_image002
clip_image002

#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 w, int h)

{

if (0 == h)

h = 1;

glViewport(0, 0, w, h); //设置视区尺寸

glMatrixMode(GL_PROJECTION); //指定当前操作投影矩阵堆栈

glLoadIdentity(); //重置投影矩阵

//指定透视投影的观察空间

gluPerspective(45.0f, (float)w / (float)h, 1.0f, 1000.0f);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

void Display(void)

{

//清除颜色和深度缓冲区

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW); //指定当前操作模型视图矩阵堆栈

glLoadIdentity(); //重置模型视图矩阵

glTranslatef(0.0f, 0.0f, -500.0f); //将图形沿z轴负向移动

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(100,100);

glutInitWindowSize(600, 400);

glutCreateWindow("太阳系动画");

glutReshapeFunc(Reshape);

glutDisplayFunc(Display);

glutIdleFunc(&myIdle);

Init();

glutMainLoop();

return 0;

}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年04月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档