如何在另一个函数中调用显示回调函数,以便我的计时器函数也可以执行?

时间:2011-04-16 16:26:30

标签: c glut

我有一个绘制圆形的显示功能,我有一个更新功能,使用它可以沿y轴移动圆圈。一旦圆圈到达窗口的底部,我想在顶部绘制一个新圆圈,并以与前一个圆圈相同的方式移动圆圈。 我该怎么做?

void display(void)
{
 int i;
 flag=0;
 glPointSize(2.0);
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 disp2();
 glFlush();
}


void update(int a)
{
  if(y1center>=100)
  {
                      y1center-=5;
                      glutPostRedisplay();
                      glutTimerFunc(40,update,0);
  }
  else
  {
      y1center=950;
      glutDisplayFunc(display);
      //glutPostRedisplay();
      display();
  }
}

这是我在更新功能中尝试做的,但它没有用。它只是在顶部画了一个新的圆圈,但那个圆圈没有移动.. disp2()绘制圆圈

2 个答案:

答案 0 :(得分:1)

它可能会失败,因为你的更新函数没有告诉过剩在40毫秒(glutTimerFunc)再次调用更新函数,所以一旦更新函数不再执行任何操作,它就会在else中。

无论如何,我做了一些小修改,这应该使这项工作改变/创建以下更新功能:

void update(int a)
{
  if(y1center>=100)
  {
        y1center-=5;      
  }
  else
  {
        y1center=950;      
  }  

  glutTimerFunc(40,update,0);
  glutPostRedisplay();
}

答案 1 :(得分:0)

在更新功能中,如果你落入else(y1center< 100),你将不会再次注册计时器(glutTimerFunc(40,update,0)调用)。