Cuando se programa con la librería GLUT.H OpenGL es encargado
de detectar cualquier evento que se genera durante la ejecución de la
aplicación, y de esta manera mandar llamar una funcion definida por el programador
donde se puede especificar, mediante estructuras y variables, como es que se
debe responder o que cambios se deben hacer al registrarse dicho evento. Los
eventos mas comunes son los generados por el raton, el teclado, el mismo
procesador y eventos basados en tiempo. Cuando se programa con OpenGL y no se
utiliza la libreria glut.h, entonces la detección y administración de los eventos
corre acargo del lenguaje sobre el que esta ejecutando y compilando OpenGL.
Tiempo Real
Se denomina aplicaciones de tiempo real, aquellas que van
ejecutando cálculos mientras van desplegando las imágenes. Esto es util para lograr
que la interactvidad del usuario sea mas
natural y realista, ya que al generar un evento en el que el usuario presiona
un tecla, entonces se puede cambiar alguna variable y obligar a redibujar la
escena realizando de nueva cuenta todos los cálculos que son necesarios. El
tiempo real es muy utilizado en simulaciones, videojuegos, programas de diseño e incluso en
animaciones. La principal desventaja de esta tecnica es que las computadoras
requieren mayor poder de cómputo y muchas veces la calidad grafica no es la
optima.
Por otro lado se tiene el manejo de graficas precalculadas o
bien graficas en tiempo muerto, en las cuales todos los cálculos matemáticos se
encuentran realizados previamente, con lo que el procesador solo se limita a
mostrar solo una secuencia de imágenes. Esta técnica es muy útil para generar
animaciones, películas, DVD’s etc.Su principal ventaja es el lograr graficas de
alta calidad, pero requieren mayor cantidad de memoria para que puedan
funcionar.
Funciones para
interactividad con OpenGL
-
glutIdleFunc
-
glutMouseFunc
-
gluMotionFunc
-
glutPassiveFunc
-
glutKeyboardFunc
-
glutSpecialFunc
-
glutTimerFunc
glutIdleFunc
Esta función se manda a ejecutar cada vez que el procesador
este inactivo, por lo que cada vez que el procesador no tenga nada que hacer se
disparara este evento. Funciones de este tipo pueden ser muy utiles para hacer
animaciones, solo que estas dependen de la velocidad del microprocesador, del
tamaño de la ventana y de la resolucion de la pantalla para determinar la velocidad a la que
correrá la animación.
void glutIdleFunc(nombre_función);
glutMouseFunc
Esta función se manda llamar cada vez que se presiona o se
libera un boton del mouse.
void
glutMouseFunc(nombre función);
Nombre función = void nombre función(int, int, int,int);
Boton que se presiona o libera:
-
GLUT_RIGHT_BUTTON
-
GLUT_LEFT_BUTTON
-
GLUT_MIDDLE_BUTTON
Estado del boton:
-
GLUT_UP
-
GLUT_DOWN
Posición:
La posición en pixeles del cursor del Mouse relativa a la
ventana(x,y)
glutMotionFunc y
glutPassiveFunc
Esta función se manda llamar cada vez que ocurra un
desplazamiento del mouse, mientras se presiona un boton.
void
glutMotionFunc(nombre función);
Nombre
función = void nombre(int x, int y);
glutPassiveFunc
Esta función se manda llamar cuando se mueve el mouse sin
mantener presionado ningun boton.
void
glutPassiveFunc(nombre función);
Nombre
función = void nombre(int x, int y);
glutKeyboardFunc
Esta función se manda
llamar cada vez que se presiona una tecla que tiene codigo ASCII definido, es
decir, este evento se genera al presionar teclas de letras, números, signos de
puntuación, ortográficos, y otras teclas especiales como el enter, el tab, barra
espaciadora, escape, suprimir, etc.
void
KeyboardFun(nombre función);
void nombre
función = (unsigned char, int , int);
glutSpecialFunc
Esta función se ejecuta cada vez que se presiona una tecla
que no tiene codigo ASCII y que OpenGL maneja como tecla especial, se puede
decir que es el complemento de la función anterior.
voidSpecialFunc(nombre
función);
void nombre
función(int, int, int);
Constantes:
-
GLUT_KEY_F1
-
GLUT_KEY_F2
-
GLUT_KEY_F12
-
GLUT_KEY_UP
-
GLUT_KEY_DOWN
-
GLUT_KEY_LEFT
-
GLUT_KEY_RIGHT
-
GLUT_KEY_INSERT
-
GLUT_KEY_HOME
-
GLUT_KEY_END
-
GLUT_KEY_PAGE_DOWN
-
GLUT_KEY_PAGE_UP
glutTimerFunc
Esta función se ejecuta despues de un cierto tiempo, el cual se especifica
en milisegundos, esta función puede ser muy util para generar animaciones que
no dependan de la velocidad del micorprocesador. La principal diferencia con la
función glutIdleFunc es que la función glutTimerFunc no se manda llamar sola
indefinidamente, por lo que si se desea generar la animacion sea necesario
llamarla recursivamente de manera explicita.