前已经实现了两个太阳,并排,各自自转的程序 该实验需要实现 太阳自转,地球公转 ,地球自转,月球公转的演示。 目前已有全局变量 float angle_sun_self=0.0; //太阳自传 float angle_earth=0.0; //地球公转 float angle_earth_self=0.0; //地球自转 float angle_moon=0.0; //月球公转 定义了当前的旋转角度。 主要功能在renderScene中,实现了两个太阳的旋转,请改写这个函数,实现上述功能。 其中,renderScene的最后定义了各自的旋转速度,可自行修改 //改变转动角度 angle_sun_self+=0.1; angle_earth+=0.3; angle_earth_self+=0.5; angle_moon+=0.3;
时间: 2024-01-21 21:16:58 浏览: 108
好的,我来给你修改一下renderScene函数,实现太阳自转,地球公转,地球自转和月球公转的演示:
```
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 绘制太阳
glPushMatrix();
glColor3f(1.0f, 1.0f, 0.0f);
glRotatef(angle_sun_self, 0.0f, 1.0f, 0.0f); // 太阳自转
glutSolidSphere(10.0f, 100, 100);
glPopMatrix();
// 绘制地球
glPushMatrix();
glColor3f(0.0f, 0.0f, 1.0f);
glRotatef(angle_earth, 0.0f, 1.0f, 0.0f); // 地球公转
glTranslatef(30.0f, 0.0f, 0.0f);
glRotatef(angle_earth_self, 0.0f, 1.0f, 0.0f); // 地球自转
glutSolidSphere(5.0f, 100, 100);
// 绘制月球
glColor3f(1.0f, 1.0f, 1.0f);
glRotatef(angle_moon, 0.0f, 1.0f, 0.0f); // 月球公转
glTranslatef(10.0f, 0.0f, 0.0f);
glutSolidSphere(2.0f, 100, 100);
glPopMatrix();
glutSwapBuffers();
// 改变转动角度
angle_sun_self += 0.1;
angle_earth += 0.3;
angle_earth_self += 0.5;
angle_moon += 0.7;
}
```
需要注意的是,地球公转和月球公转是相对于太阳的,所以需要在绘制地球和月球时先进行一次平移操作,将它们放在正确的位置上。另外,月球的公转速度可以适当调整,这里我将其设置为0.7。
阅读全文