Universidad Católica Andrés Bello
Facultad de Ingeniería
Escuela de Ingeniería Informática
Computación Gráfica (Mar - Jul 2013, TERM201322)
Proyecto 2: 3D e iluminación
El segundo proyecto de este curso presume una mayor familiaridad con el lenguaje Processing, y su objetivo es que elabore un modelo de aplicación que permita renderizar un escenario 3D interactivo.
El proyecto se debe hacer entre 2 personas. El proyecto se entrega con código fuente y una presentación el día de la entrega. La fecha de entrega de este proyecto es el jueves 27 de junio de 2013, día en el que se hará una presentación ante el salón del programa.
Objetivo
El objetivo de este proyecto es elaborar un escenario 3D interactivo con OpenGL.
El escenario consiste en los siguientes elementos:
- Un terreno generado con parches superficiales de Bezier. Puede utilizar la libreria patchy para lograr esto (disponible en http://mrfeinberg.com/patchy/). Los puntos de control del parche están dispuestos a distancias regulares en el plano XZ, y las coordenadas de Y de los puntos de control están a diferentes alturas. Estas coordenadas se deben generar con ruido de Perlin (la función noise() en Processing).

- El terreno debe tener una textura generada algorítmicamente por usted, que emplee ruido de Perlin. Usted debe crear una imagen fuera de la pantalla, hacer render del terreno, y luego con esa imagen crear una textura y aplicarla sobre el modelo del terreno.

- El terreno está intersectado por un parche semi-transparente que simula agua (dispuesto sobre el plano XZ, con Y=0). La textura del agua también está generada algorítmicamente. El parche debe tener una animación similar a la del agua. Para obtener la animación del agua modifique los puntos de control del parche del agua usando un factor multiplicado por seno del tiempo de la aplicación.
- Tanto el terreno como el agua tienen su origen en el origen del sistema de coordenadas del mundo.
- La cámara está a una cierta distancia del origen del sistema de coordenadas del mundo. La cámara se debe controlar mediante las siguientes propiedades: distancia del origen, rotación alrededor del escenario, ángulo de altura.

- Sobre el terreno se debe incorporar una esfera que está fija en el punto más alto del terreno.
- Existen dos puntos de iluminación que rotan en torno al origen del sistema de coordenadas mundial. Un punto representa al sol, y el otro punto representa la luna. Ambos puntos están a la misma distancia del origen del mundo, y rotan alrededor del plano YZ. La contribución de la luz de cada uno está dada por un factor que está entre 0 y 1 (cuando el factor es 0, los modelos del escenario no son iluminados en absoluto por el elemento, y cuando el factor es 1, el modelo está completamente iluminado por el elemento), siendo la función de la contribución el seno del ángulo de rotación (de esta manera, la contribución es 0 cuando el elemento está en el horizonte del escenario, y 1 cuando está completamente perpendicular al escenario).

- El posicionamiento y factor de iluminación de ambos puntos se debe controlar a través de un slider que manipule la hora del dia del escenario.
Interfaz
- La pantalla debe incluir los nombres de los integrantes del equipo dentro de la ventana, en la esquina inferior derecha, no en la consola ni en la ventana de título.
- Debe implementar un componente Slider, y tendrá 4 instancias de este componente:
- Uno para la hora del escenario (12am a 12pm), y estará en la esquina inferior izquierda.
- 3 para los parámetros de posicionamiento de la cámara, dispuestos en la parte superior de la ventana:
- Distancia de la cámara (determine el mínimo y el máximo de acuerdo a los planos de clipping de su programa)
- Ángulo alfa sobre el plano XZ (0 a 360 grados)
- Angulo beta sobre el plano del ángulo alfa con el eje Y. (-90 a 90 grados, siendo 0 grados el ángulo sobre el plano XZ)
- Esta página presenta un ejemplo de un Slider: http://developer.yahoo.com/yui/examples/slider/slider-ticks.html - Su slider no tiene que ser tan complejo, limitándose solamente a dibujar una línea para representar los extremos, un círculo para indicar el valor, y un texto a la izquierda para indicar qué está controlando el slider. La interacción de un slider consiste en que al hacer click sobre el círculo, éste se puede mover sobre la línea, sin salirse de ella. El nuevo valor del slider se actualiza a medida que se arrastra el círculo de posición. Existe un ejemplo de Slider en Processing, yendo a Ejemplos -> Topics -> GUI -> Handles o Scrollbar.
- La BARRA ESPACIADORA genera un terreno nuevo y texturas nuevas para el agua y la tierra.
- La tecla ESCAPE cierra el programa.
Guíese en el posicionamiento de estos elementos con el siguiente diagrama:

Gráficos
- El programa debe tener una resolución de 800x600 pixeles.
Evaluación
El proyecto se evaluará en base a los objetivos que se hayan logrado implementar efectivamente. La evaluación se hará en el momento de la presentación.
Copia
Aunque la conversación entre equipos es necesaria, bienvenida y alentada, la copia textual de código entre equipos no esta permitida. Cualquier caso detectado de copia ameritará una nota de cero uno (01) en el proyecto para todos los involucrados y se aplicarán las sanciones que permita el reglamento de la UCAB.
¿Preguntas?
Todas las preguntas se harán a mi correo ciro.duran@gmail.com y se responderán públicamente en la página del curso en http://www.ciroduran.com/disenajuegos/cg.