太阳系的问题

时间:2011-05-28 13:05:28

标签: c++ opengl

所以,这是我的问题。我应该制造一个太阳系,太阳位于中心,行星围绕着旋转;每个星球都应该有自己的卫星。

所以,我做了一切,但我无法让地球自行旋转......地球围绕太阳旋转,月球围绕地球旋转......我怎样才能让地球自行旋转?当我在代码中放入另一个“glrotating”命令时,月亮从地球上掉下来或发生了一些奇怪的事情......

以下是我的代码......

// EARTH
// INFO: 1) it's 3rd planet from the Sun;
//       2) it's 5th largest planet in the Solar System, with an equatorial radius of 6378.388km;
//       3) it's 3rd fastest planet, because its orbital period is of 365 earth-days (1 year).
void Earth(void)
{
    DrawOrbit(5.5, 1);
    glRotatef((GLfloat) year*6.2, 0.0, 1.0, 0.0); //orbital movement for the Earth around the Sun
    glTranslatef(5.5, 0.0, 0.0);
    glColor3f(0.0, 0.3, 1.0);
    glutSolidSphere(0.28, 20, 10); //draw Earth: more or less, the Earth has got the same dimension of Venus.

    // The Earth has got one natural satellites: the Moon. Let's draw it:
    glPushMatrix();
    glRotatef((GLfloat) day*2, 0.0, 1.0, 0.0); //rotate for the moon
    glTranslatef(0.5, 0.0, 0.0);
    glColor3f(1.0f, 1.0f, 1.0f);
    glutSolidSphere(0.05, 5, 4); //draw moon: its diameter is about a quarter the diameter of Earth 
    glPopMatrix();

}

3 个答案:

答案 0 :(得分:5)

将地球改为此

glPushMatrix();
glRotatef(earth_rotation);
glutSolidSphere(0.28, 20, 10); //draw Earth: more or less, the Earth has got the same dimension of Venus.
glPopMatrix();

一些天文学笔记:地球实际上比金星略大。到目前为止,你所有的轨道都是共面的。此外,地球旋转轴相对于轨道平面(称为黄道)倾斜约23°。月球的轨道再次向黄道倾斜约5°。当然,行星不是在完美的圆形旋转中绕太阳运行,而是以椭圆曲线运行。

答案 1 :(得分:1)

月球围绕地球的旋转与地球围绕其自身轴的旋转无关(至少为了渲染目的)

所以你应该pushmatrix旋转地球和弹出并使用你的月亮的逻辑。此外,如果您只是将地球绘制为实心球体,即使它围绕自身旋转,它也不会在您的应用中出现,除非您的纹理很好

答案 2 :(得分:0)

如果你想准确地做到这一点,那么你所做的就是直言不讳。

行星并不完全绕太阳运行。它们绕太阳系重心轨道运行,太阳系重心位于太阳表面之外。月球的质量约为地球的0.0123,这意味着你可以更好地模拟地球和月球围绕它们共同的质心轨道,而不是围绕地球轨道运行的月球。

冥王星和卡戎同样如此,但嘿,冥王星不再是一个星球了,所以谁在乎呢?