Cada vez que se ha acabado el tiempo de un temporizador ejecutamos tres funciones
El temporizador tiene que aceptar un parámetro que es la identificación de la ventana. Nosotros usamos por el momento dicho parámetro solamente para pasarlo de nuevo registrando el temporizador otra vez.
Para no complicar la cosa mucho, usamos dos variables globales que nos indican si estamos en modo de animación y cuantos milisegundos dejamos pasar con el temporizador.
static bool animate =false;
static int timer_interval=500;
static void Timer(
int ident
) {
if(animate) {
TransformWorld();
glutPostRedisplay();
glutTimerFunc(timer_interval,Timer,ident);
}
}
Dedicamos la tecla `t' para comenzar y terminar la animación, es decir, si no estamos en modo animación ( animate==false) activamos el temporizador la primera vez, si estamos en modo animación solamente lo desactivamos. Un fragmento de código que se coloca en la función KeyPress() sería:
...
case 'a':
if(animate==false) {
animate=true;
// para lanzar el temporizador la primera vez
// usamos la identificaci'on que devuelve la
// funci'on glutCreateWindow() guardada en una
// variable global llamado ident
glutTimerFunc(timer_interval,Timer,ident);
}
else animate=false;
break;
...
Podemos usar otras teclas para cortar o ampliar el intervalo del temporizador.