C++17实现OpenGL地球与月亮绕太阳旋转的3D动画
版权申诉
5星 · 超过95%的资源 152 浏览量
更新于2024-08-11
收藏 15KB DOCX 举报
本资源是关于在C++17环境下利用OpenGL 4.5版本在MacPro13-inch 2020 M1搭载的Xcode 13.3中实现地球和月亮围绕太阳旋转的示例代码。作者通过`#include`语句导入了必要的库函数,如GLUT、OpenGL和数学库,以实现3D图形渲染。
首先,代码定义了一个全局变量`day`用于控制地球和月亮的旋转速度,初始值设为1,表示一天。`myDisplay`函数是OpenGL的核心部分,它负责每帧的图形绘制。在这个函数中:
1. **启用深度测试**:确保物体的遮挡关系被正确处理。
2. **设置背景颜色**:将背景设置为淡黄色(0.5f,0.5f,0.0f)。
3. **初始化投影矩阵**:采用透视视角,视口比例1:1,远裁剪平面设定为400000000,使得太阳位于远处。
4. **设置模型视图矩阵**:设置观察者位置在远离地球的上方,便于观察地球和月亮的运动。
5. **太阳的绘制**:用红色绘制一个球体,代表太阳,半径为69600000单位。
6. **地球的绘制**:
- 设置地球颜色为蓝色。
- 使用`glRotatef`函数,根据`day`的值以一定的速度(一天360度)绕Y轴旋转,同时向X轴平移150000000单位,使地球移动到适当的位置。
- 绘制一个较小的蓝色球体,代表地球,半径为15945000单位。
7. **月亮的绘制**:
- 月亮的颜色设为黄色。
- 月亮绕地球旋转,速度稍快于地球,通过减去与地球旋转速度的差值实现相对位置的变化。
- 月亮也向X轴平移38000000单位,远离太阳。
- 月亮的半径为4345000单位。
8. **更新`day`值**:如果`day`超过365天,重置为1,以模拟地球绕太阳一周。
9. **调用`glutPostRedisplay`**:通知OpenGL重绘当前帧,确保动画效果连续。
`main`函数中,初始化GLUT库,设置显示模式为RGB,并开始主循环,不断调用`myDisplay`函数以更新屏幕内容。这个程序展示了如何在OpenGL中创建简单的天体系统动画,通过计算和变换来模拟地球和月亮围绕太阳的旋转运动。
2010-12-17 上传
2017-12-17 上传
109 浏览量
2019-05-05 上传
2008-12-25 上传
2023-05-24 上传
2012-11-11 上传
小明的程序
- 粉丝: 5
- 资源: 32
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍