Я использую Glut
, чтобы сделать простую анимацию. В основной функции вызывается 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()
. Но почему это все еще работает?