|
PRÁCTICA 2. Introducción a OpenGL. Interactividad.
|
|
En esta práctica vas a escribir tu primer código
que utilizará la librería gráfica OpenGL para dibujar.
Partirás del ejemplo que utilizamos la semana pasada (cuadrado.c)
y harás una serie de modificaciones para conseguir los resultados
que se te piden en los ejercicios que hay a continuación. Una
breve descripción de la librería puede encontrarse en
el siguiente Tutorial de OpenGL,
aunque probablemente tendrás suficiente con los apuntes de clase.
|
|
En primer lugar repasa cuidadosamente el código
fuente del ejemplo cuadrado.c. Cualquier duda que tengas pregúntasela
a tu profesor de prácticas. Cuando tengas claro como funciona
el programa haz los siguientes ejercicios.
1. Prueba a modificar los parámetros de las función glutInitWindowSize y glutInitWindowPosition. Observa lo que ocurre cuando defines una ventana no cuadrada. ¿Sabes porqué? 2. Modifica el código del programa cuadrado.c a fin de obtener
uno a uno los siguientes resultados.
3. Modifica de nuevo el código del programa cuadrado.c a fin
de obtener los siguientes resultados.
|
|
En esta parte de la práctica aprenderás
a utilizar las posibilidades que ofrece la biblioteca funciones de utilidades
glut de OpenGL (Manual glut) para dotar
a tu aplicación de interacción con el usuario. Estudia
como maneja los eventos producidos por la pulsación de los botones
del ratón o de las teclas en el teclado alfanumérico.
La tarea interactiva más simple que implementa la librería glut es permitir que se controle la ejecución de la aplicación mediante un bucle principal de visualización. El formato de la orden es: void glutMainLoop (void); La ejecución de esta función espera a que se produzcan eventos. Cada vez que se produce un evento lo atiende y ejecuta la función registrada, encargada de responder al evento (función de callback). Los posibles eventos que puede responder OpenGL se dividen en tres grupos: Eventos de ventana. Se generan al crear la ventana de la aplicación,
cambiar su tamaño o su posición en la pantalla. Los eventos
de ventana se atienden registrando una función de respuesta con
la función: void glutReshapeFunc (void (*func)(int ancho, int alto)); Eventos de teclado. Se generan al pulsar alguna tecla. Se atienden definiendo
una función de respuesta con la función: void glutKeyboardFunc (void (*func)(unsigned char key, int x, int y)); Eventos de ratón. Para registrar la función de respuesta cuando se
produce una pulsación de algún botón del ratón
se usa: void glutMouseFunc (void (*func) (int boton, int estado, int x, int y); Para registrar la función de respuesta cuando el ratón
se está moviendo sobre la ventana activa se usa; void glutMotionFunc (void (*func)(int x, int y)); En esta práctica vamos a trabajar con los eventos de teclado y ratón, dejando los de ventana para prácticas posteriores.
|
|
1. Crea un proyecto nuevo y añade los ficheros:
raton.c y raton.h. En primer
lugar examina el código y pregunta a tu profesor de prácticas
cualquier cosa que no entiendas. Compila y ejecuta el código.
Comprueba el funcionamiento del programa presionando el botón izquierdo del ratón y las teclas r , g y Esc.
2. Modifica el código para que además atienda a los siguientes eventos de teclado: Tecla
'b' fija el color a azul OpenGL trabaja con el espacio de colores llamado RGB (Red Green Blue, o bién rojo verde azul). Así lo especificamos al haber llamado a glutInitDisplayMode(). Cada color está definido por tres valores entre 0 y 1, ambos incluídos. La siguiente tabla contiene las definiciones de los colores mas llamativos:
3. Modifica el código para que al pulsar el botón derecho del ratón se borre la ventana. 4. Modifica de nuevo el código de forma que al pulsar el botón izquierdo del ratón se capture el primer punto de la recta, y al soltarlo se capture el segundo y se dibuje la recta que une ambos puntos. 5. Modifica el código para que antes de soltar el botón izquierdo siempre sea visible la recta que se dibujaría. 6. Modifica el código de forma que los dos puntos indicados por el usuario sean la diagonal de un rectángulo y lo visualice. 7. Añade un evento de teclado que te permita seleccionar entre dibujar líneas y rectángulos. |