lunes, 10 de septiembre de 2007

Previo Práctica 4

1. ¿Qué es una escena?

Es el lugar donde interactúan 2 o más objetos ya sea que esten relacionados entre sí o no. Esta escena es un espacio donde se juntan varios objetos creados anteriormente para recrear o crear un entorno.

2. ¿Cómo podemos definir una escena jerárquicamente?

Consiste en ordenar objetos geométricos complejos a partir de un objeto raiz. Teniendo diferentes ramificaciones de este objeto raíz que derivan en los demás objetos. Esto se usa para poder organizar mejor una escena ya que haciendo dependencias entre ellos podemos construir de objetos sencillos una escena compleja.

3. Describa el funcionamiento y parámetros de la función:

glutSwapBuffers(...)

void glutSwapBuffers(void);

Realiza un intercambio de buffer en la capa en uso para la ventana actual. Específicamente, hace que el contenido del buffer trasero de la capa en uso se convierta en contenido del buffer frontal. En este paso el contenido del buffer trasero se considera cono undefined o indefinido. La actualización usualmente se realiza durante el re-trazado vertical del monitor, en vez de ser realizado inmediatamente después de llamar a la función glutSwapBuffers. Antes de retornar, esta función realiza un glFlush. Los comandos subsecuentes de OpenGL pueden ser ordenados inmediatamente después de llamar a la función, pero no son ejecutados hasta que el intercambio de buffers se complete.

glutKeyBoardFunc(…)

void glutKeyboardFunc(void (*func)(unsigned char tecla, int x, int y));

glutKeyboardFunc dispone la función de teclado para la ventana actual. Cuando el usuario teclea en la ventana, cada tecla presionada genera un carácter ASCII el cual generará un una función de teclado. El parámetro tecla es el carácter ASCII generado. El estado de teclas modificadoras como Shift no pueden ser determinadas directamente; su único efecto será al regresar un dato ASCII los parámetros x y y indican la posición de mouse en coordenadas relativas dentro de la ventana cuando la tecla fue presionada. Cuando una nueva ventana es creada, no hay ninguna función de teclado asignada, y todos los caracteres ASCII creados en la ventana serán ignorados.

glutIdleFunc(…)

void glutIdleFunc(void (*func)(void));

glutIdleFunc coloca el callback de inactividad global para ser func para que así un programa GLUT pueda realizar procesos continuos de animación cuando el los eventos de sistema de ventana no estén siendo recibidos. Si se habilita, el callback de inactividad se llama continuamente cuando no haya eventos recibidos. La rutina de callback no tiene parámetros. La ventana actual y el menú actual no serán cambiados antes del callback de inactividad. Los programas con ventanas o menús múltiples deben colocar explícitamente la ventana y/o el menú actual y no deberán confiar en su configuración actual.

4. ¿Qué es un double buffer (búfer doble)? ¿Para qué sive? ¿Cómo se declara con GLUT?

El doble buffering es una técnica muy simple, que dibuja la escena en un buffer fuera de la pantalla, mientras que la imágen de la pantalla no se toca para nada. Una vez que la imágen se ha dibujado en el buffer de fondo, se intercambia por el de la pantalla, de manera que eliminamos el parpadeo. El siguiente frame lo dibujaremos en lo que antes era el buffer de pantalla (ahora oculto), y luego se cambiará, y así sucesivamente.

Activar el doble buffering es algo muy sencillo. Hemos de indicar a GLUT que vamos a utilizar doble buffering al crear la pantalla con GLUT_DOUBLE, en lugar de GLUT_SINGLE:

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

5. ¿Qué es un function callback (llamada a función) pista: sirve para manejo de eventos.

Cuando GLUT detecta un evento, manda llamar a una función, conocida como callback. Esta función tiene un conjunto de parámetros conocidos que describirán el evento. De esta manera se detectan eventos producidos por el usuario o por el sistema de ventanas.

No hay comentarios: