LABORATORIO COMPUTACIÓN GRAFICA


Save this PDF as:
 WORD  PNG  TXT  JPG

Tamaño: px
Comenzar la demostración a partir de la página:

Download "LABORATORIO COMPUTACIÓN GRAFICA"

Transcripción

1 UNIVERSIDAD NACIONAL AUTONOMA DE MÉXICO FACULTAD DE INGENIERIA PRACTICA 5. INTERACTIVIDAD LABORATORIO COMPUTACIÓN GRAFICA PROFESORA: M.I. ELIZABETH FONSECA CHAVEZ GRUPO: 4 VAZQUEZ TOUNGATE REYNA CATALINA

2 INTERACTIVIDAD OBJETIVOS: 1. Preparar una ventana Windows para su uso con OpenGL. 2. Realizar un programa iterativo mediante el uso del mouse. 3. Lograr interactividad con objetos en la escena. 4. Lograr interactividad con la cámara en la escena. CUESTIONARIO PREVIO: 1. Investigue y reporte que hace la función glutidlefunc() ; GlutIdleFunc(void *(func)(void)), GLUT llama a ésta función todo el tiempo, haciendo que se logre una animación. 2. Investigue y reporte que hace función glutmotionfunc() ; "glutmotionfunc", se ejecuta cuando hay eventos del ratón, tales como tener pulsado el botón izquierdo o derecho. Al principio en ambas ventanas "glutmotionfunc" llamaba a la misma función: "glutmotionfunc(mousemotion)", lo cual hacía que al pinchar con el ratón en cualquiera de las ventanas las variables quedarán modificadas para cuando pinchaba con el ratón en la otra ventana. 3. Investigue y reporte que hace la función glutdisplayfunc() glutdisplayfunc(). Esta función es la más importante de las funciones callback. Gracias a la definición de las funciones callback, GLUT hace posible una dinámica de programación de aplicaciones OpenGL. Una función callback será llamada por GLUT para hacer alguna operación especifica cada vez que se produzca un evento. En este caso, glutdisplayfunc(display), define que la función display que es pasada como argumento sea ejecutada cada vez que GLUT determine que la ventana debe ser dibujada (la primera vez que se muestra la ventana) o dibujada (cuando se maximiza, cuando se superponen varias ventanas, etc). 4. Investigue y reporte que hace la función glutidlefunc(). Si esta activada, la llamada a idle es continuamente invocada cuando no es recibido algún evento. 5. Investigue y reporte que hace la función glutmainloop(); Ingresa el bucle de procesamiento de eventos de GLUT INTRODUCCION: Opengl proporciona una función que permiten registrar los eventos producidos por los clicks del ratón.

3 El nombre de esta función es glutmousefunc() y se suele llamar en la fase de inicialización de la aplicación. Su sintaxis se puede ver en el siguiente ejemplo: void glutmousefunc(raton); Donde ratón es el nombre de la función a la que se llamará cuando se invoque al manejador de eventos del ratón. Esta función tiene que estar definida de la siguiente forma: void raton (int button, int state, int x, int y) Al igual que en el caso de la función que manejaba eventos del teclado, ésta no devuelve datos, simplemente da la oportunidad de modificar atributos de nuestro programa. Los parámetros de entrada que necesita son cuatro. El primero de ellos se refiere al botón que ha sido presionado (botón izquierdo, central o derecho), puede contener uno de estos 3 valores: GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON El segundo argumento se refiere al estado que presentaba el botón cuando fue generada la llamada (callback), por ejemplo pulsado o no pulsado. Los valores que puede tener son: GLUT_DOWN GLUT_UP Cuando se genera una llamada con el estado GLUT_DOWN, la aplicación asume que este estado será sucedido por el estado GLUT_UP, incluso si la posición del ratón se sale fuera de la ventana actual. Sin embargo, si se llama a la función de nuevo, pasándole NULL como argumento, el proceso dejará de enviar cambios de estado. Los dos parámetros restantes proporcionan las coordenadas (x,y) del ratón relativas a la esquina superior izquierda de la ventana cuando se pulsa el botón del ratón. Detección de movimientos Opengl proporciona también un método de detección de movimientos de ratón. Existen dos tipos de movimientos manejados por GLUT, son movimiento activo y pasivo. El primer tipo aparece cuando se mueve el ratón mientras está pulsado un botón. En cambio, el movimiento pasivo, se produce con el sólo movimiento del ratón. Si una aplicación está ejecutándose, se generará un evento por frame durante el periodo en el que el ratón está haciendo un movimiento de arrastre. Por lo general se debe registrar la función que será responsable del manejo de los eventos de movimiento. GLUT permite especificar dos tipos diferentes de funciones: una para los movimientos pasivos y otra para los activos. Las cabeceras para estas funciones son las siguientes:

4 void glutmotionfunc(void (*func) (int x,int y)); (arrastre activo) void glutpassivemotionfunc(void (*func) (int x, int y)); (arrastre pasivo) Donde func es la función que se llamará cuando se detecta el evento. Los parámetros que se le pasan a estas funciones de procesado son los mismos para ambas, las coordenadas (x,y). Detección de abandono de la pantalla de la aplicación GLUT es capaz de detectar cuando se entra o se sale de la ventana de la aplicación. Se puede usar una función para manejar estos dos eventos: void glutentryfunc(void (*func)(int state)); Donde el parámetro state se refiere al estado actual de la posición del ratón en cuanto a si ha salido o ha entrado en la ventana de la aplicación. Sus posibles valores son los siguientes: GLUT_LEFT GLUT_ENTERED Detección de pulsación en teclas especiales OpenGL proporciona una función que indica si están pulsadas en cada momento las teclas especiales SHIFT, ALT y CONTROL. int glutgetmodifiers() Devuelve los códigos (como bitmask, que se pueden combinar con operadores lógicos: &) GLUT_ACTIVE_SHIFT, GLUT_ACTIVE_ALT o GLUT_ACTIVE_CTRL como enteros. Se puede usar dentro de las funciones asociadas a los callbacks de teclado y glutmousefunc, asociado al ratón (no funciona dentro de los otros callbacks de gestión del ratón), para detectar combinaciones de entrada, de teclas del teclado y del ratón, con estas teclas especiales. La instrucción de comprobación sería del tipo: if (glutgetmodifiers() == GLUT_ACTIVE_SHIFT) Relacionado con este tema está el callback glutspecialfunc que permite detectar la pulsación de teclas especiales como las de función o las flechas de dirección. DESARROLLO: Ejercicio 1 Para este experimento tenemos un programa que luego de iniciada la ventana Windows, pone a la PC a esperar un evento de teclado, ratón o josytick. La función glutmainloop() hace que el computador espere la ocurrencia de un evento para entonces invocar a la función respectiva (callback).

5 Mientras no ocurra un evento, GLUT invocará la función glutidlefunc(), la cual a su vez invoca la generación de la escena en la función RenderScene(). La función 1. Vamos a crear un nuevo proyecto dentro de la carpeta prácticas_gl. Así que presione en secuencia menú File->New Project o simplemente presione simultáneamente las teclas ctrl+shift+n. El nuevo proyecto se llamará ejer Localice el archivo el archivo ejemplomouse.cpp y cópielo de su origen a la carpeta \prácticas_gl\ejer Presione la secuencia menú Project->Add Existing_Item o simplemente presione la combinación de teclas Shift+Alt+A. 4. El programa consta de las siguientes partes a. Sección de variables globales. b. Subrutina luces() para habilitar la ecuación de iluminación de OpenGL. c. Subrutina EjesReferencia() para dibujar los ejes del sistema de referencia de OpenGL.habilitar d. Subrutina cubo() Para definir una lista de primitivas que luego serán invocadas. e. Subrutina idle() Es una subrutina que se invoca mientras GLUT no percibe ningún evento de teclado, ratón o joystic y que se encarga de redibujar la escena tan pronto como sea posible. f. Subrutina ControlMovimientoRaton() Esta subrutina es un callback que se invoca en respuesta a un evento de ratón. g. Subrutina RenderScene() Para invocar las subrutinas anteriores. h. Subrutina main() Para crear una ventana Windows para uso con OpenGL. 5. Construya y ejecute. 6. Reporte la gráfica obtenida.

6 *El cubo se va moviendo cuando ocurre con un clic del ratón, se mueve con el movimiento del ratón y las imágenes muestran los diferentes movimientos que tuvo con el ratón. Ejercicio 2 7. Elabore un diagrama de bloques que ilustre el funcionamiento del programa del ejercicio 1.

7 Ejercicio 3 8. Modifique el programa del ejercicio para que sea la cámara la que se mueva en respuesta a eventos del ratón.

8 CONCLUSIONES: Al realizar esta práctica aprendí el código que se necesita para tener interactividad con algún dispositivo como el mouse, el teclado, etc, pues al crear la animación en este caso el cubo se movía conforme al movimiento del ratón.

SitemapLegend of the Demon Cat (2017) Hindi Dub 720p WEB-DL x264 AAC | The Deleted | Intensa-mente (2015) HD Latino 1 LINK