C++17实现OpenGL地球与月亮绕太阳旋转的3D动画

版权申诉
5星 · 超过95%的资源 2 下载量 161 浏览量 更新于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中创建简单的天体系统动画,通过计算和变换来模拟地球和月亮围绕太阳的旋转运动。