glutTimerFunc问题

时间:2011-08-26 20:28:14

标签: glut

我使用Glut制作一个简单的动画。在main函数中,调用glutTimerFunc(TIMERMSECS, animate, 0)。这两段代码生成相同的图形。

const int TIMERMSECS = 20;
float animation_time = 0;
const float  animation_step = .5;

方法1:

   void animate(int t){
        float time_elapsed = TIMERMSECS/1000.0;
        float current_step = animation_step* time_elapsed;
        glutTimerFunc(TIMERMSECS, animate, 0);
        if(current_step < animation_step*2) 
                animation_time += current_step;
        glutPostRedisplay();
}

方法2:

   void animate(int t){
        float time_elapsed = TIMERMSECS/1000.0;
        float current_step = animation_step* time_elapsed;      
        if(current_step < animation_step*2) 
                animation_time += current_step;
        glutPostRedisplay();
       glutTimerFunc(TIMERMSECS, animate, 0);
}

他们之间的唯一区别是glutTimerFunc的位置。对于Method 1,它看起来像递归,永远不会到达animate()函数的末尾。但为什么这仍然有效?

1 个答案:

答案 0 :(得分:3)

在任何情况下,

glutTimerFunc都不会立即调用计时器功能。即使时间为0.它总是等待消息处理循环,即使这样,它也只会在所有其他消息处理完成时调用所请求的函数。这样,“重新绘制窗口”和“调整大小窗口”等重要消息仍然会得到处理。

通常,您不应该依赖计时器功能特别准确。