围绕不断旋转的物体旋转物体

时间:2014-10-31 17:11:34

标签: c++ opengl rotation glut

我正在试图模拟太阳系并需要让月球环绕绕太阳运行的行星

我目前正在使用以下代码来旋转行星

glPushMatrix();
        glRotated((GLdouble)(spin*earth.speed), 0.0, 0.0, 1.0);
        glTranslated(earth.xPos, earth.yPos, earth.zPos);
        earth.draw();
glPopMatrix();

我正在尝试使用下面的代码让我的月球绕地球运行,但此刻我所能做的就是围绕一个特定的点旋转。

glPushMatrix();
    //define one time only start location
    bool start = true;
    if (start)
    {
        glTranslated(earthMoon.xPos, earthMoon.yPos, earthMoon.zPos);
        start = false;
    }
    //orbit earths start point
    //perfectly fits around earth
        glTranslatef(-0.1, -0.1, 0);
        glRotatef(spin*10, 0, 0, 1);
        glTranslatef(0.1, 0.1, 0);
        // need translation vector to follow earth


    //glTranslated(earthMoon.xPos, earthMoon.yPos, earthMoon.zPos);
    earthMoon.draw();
glPopMatrix();

我认为我需要做的是从rotatef函数中找到一些了解地球位置的方法。

我有一个具有以下属性和方法的行星类:

float radius;
float xPos;
float yPos;
float zPos;
float speed;
planet(float r, float x, float y, float z, float speed);
~planet();
void draw(void)
{
    glPushMatrix();
        glColor3f(0.0, 1.0, 1.0);
        glutSolidSphere(radius, 20, 10);
    glPopMatrix();
}

当行星旋转时,类的坐标不会更新

有谁知道如何让它发挥作用?

2 个答案:

答案 0 :(得分:1)

一旦你画了地球,就不要弹出你的矩阵 那么你的新参考将是地球的位置, 你只需要调用月球绘图代码,它就会围绕你的地球旋转。

答案 1 :(得分:0)

找到一个可以按预期工作的修复,以防其他人在使用这个概念

//earth
    glPushMatrix();
        //earth orbit
        glRotated((GLdouble)(spin*earth.speed), 0.0, 0.0, 1.0);
        glTranslated(earth.xPos, earth.yPos, earth.zPos);
            //earth mooon
        glPushMatrix();
            //orbit around earth
            glRotatef(spin * 5, 0, 0, 1);
            glTranslatef(0.1, 0.1, 0.0);
            //rotate around self
            glRotated((GLdouble)spin, 0.0, 1.0, 0.0);
            //draw moon
            earthMoon.draw();
        glPopMatrix();
        //rotate around self
        glRotated((GLdouble)spin, 0.0, 1.0, 0.0);
        //draw earth
        earth.draw();
    glPopMatrix();
    //

希望这有助于其他任何人