动画glutWireSphere

时间:2012-11-03 04:27:41

标签: c++ opengl glut

如何让一个线球保持静止而另一个球体平移?

这是我现在的代码:

void animate ()
{
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode (GL_MODELVIEW);    
    glPushMatrix ();

    glColor3f (1.0, 0.0, 0.0);
    glutWireSphere (1.0, 20, 20);

    glColor3f (0.0, 1.0, 0.0);
    glPushMatrix ();
    glTranslatef (0, 0.01, 0);
    glutWireSphere (0.2, 20, 20);
    glPopMatrix ();

    glPopMatrix();

    glFlush ();
    glSwapBuffers ();

    glutTimerFunc (10, animate);
}

目前发生的一切都是两个球体都是静止的。我想要的行为是让较大的红色球体保持静止,而较小的绿色球体慢慢平移。我做错了什么?

1 个答案:

答案 0 :(得分:2)

这里的问题是你在每个帧的y轴上翻译相同的量。您的矩阵设置为标识每个帧,因此较小的绿色球体始终位于(0.0,0.01,0.0)

尝试跟踪位置并增加。

static float yPos = 0.0f;

glColor3f (0.0, 1.0, 0.0);
glPushMatrix ();
glTranslatef (0, yPos, 0);
glutWireSphere (0.2, 20, 20);
glPopMatrix ();

yPos += 0.01f;