Taller 2: Líneas y Curvas 2D - Departamento de Ingeniería de

Pontificia Universidad Javeriana
Departamento de Ingeniería de Sistemas
Introducción a la Computación Gráfica
Taller 2: Líneas y curvas 2D, 2015-10
Objetivo
Aplicar los algoritmos básicos para dibujar primitivas 2D lineales y curvas en la creación de una
escena gráfica. En especial, se desea evaluar las habilidades del estudiante en la implementación
y uso de los algoritmos para el dibujo de líneas y curvas y para el recorte de primitivas, así como
la creación de efectos gráficos a partir de la manipulación de los atributos (color, grosor, tamaño)
de las primitivas.
Desarrollo del taller
Las interacciones gráficas que se han trabajado en el curso incluyen ahora la manipulación de
primitivas 2D lineales y curvas (puntos, líneas, círculos, elipses). En términos de programación, se
espera mantener librerías con los algoritmos de dibujo y recorte ya aprendidos, para simplificar la
programación y facilitar la lectura del código. En términos gráficos, se busca entonces la
aplicación de estas primitivas en la reproducción de una escena gráfica. En esta ocasión, se
tomará una pintura famosa y se realizará una reproducción gráfica lo más aproximada posible
(una reinterpretación gráfica, si se quiere), a partir de la manipulación de las primitivas 2D y de
sus atributos. Las posibles pinturas incluyen:
Small Rhythmic Landscape
Paul Klee (Austria, 1879 - 1940)
1920
Heroische Rosen (Heroic Roses)
Paul Klee (Austria, 1879 – 1940)
1938
Water-Lilies, Evening Effect
Claude Monet (Francia, 1840 - 1926)
1897–1899
Asleep
Pablo Picasso (España, 1881 - 1973)
1932
Starry Night
Vincent van Gogh (Holanda, 1853 – 1890)
1889
A Wheatfield with Cypresses
Vincent van Gogh (Holanda, 1853 – 1890)
1889
Pueden seleccionarse otras pinturas siempre y cuando contengan una variedad de elementos
diferentes que puedan ser representados a partir de líneas y curvas e incluyan una paleta amplia
de colores y texturas (por ejemplo, no se aceptan pinturas como las de Piet Mondrian).
Paso #1: Para el desarrollo del taller se requiere contar con:
– Código C++ base (plantilla) para realizar la implementación (disponible en
sophia.javeriana.edu.co/~rueda-andrea/intrCoGr/docs/introOpenGl.cpp)
– Implementación en C++ de los algoritmos de dibujo de líneas, círculos y elipses, y de los
algoritmos de recorte (en librerías)
– Imagen de la pintura seleccionada para reproducir
– Hoja de papel milimetrado
Nota: el código fuente debe compilar con gcc (g++) v. 4.7.2 y con las librerías de OpenGL Utility
Toolkit (GLUT) v. 2.8.0
Paso #2: Realizar el diseño de la pintura utilizando una hoja de papel milimetrado. El diseño
previo a mano sobre una hoja de papel milimetrado facilita la localización en el espacio de
coordenadas universal (o de los objetos) de cada uno de los elementos que componen la pintura.
Para cada uno de los elementos gráficos, establezca las propiedades o atributos particulares.
Adicionalmente, identifique si hay elementos que se repiten, de forma que de cara a la
implementación pueda reutilizar y simplificar código. Intente reproducir (o reinterpretar) de la
manera más exacta posible la pintura seleccionada, se verificará que el diseño en papel
milimetrado incluya la mayor parte posible de los detalles de la pintura. Mucha creatividad!
Paso #3: Implementar el código necesario para dibujar la escena en una ventana de OpenGL. Para
el dibujo de líneas y polilíneas utilice sólo los algoritmos DDA y Bresenham, NO las primitivas de
OpenGL para líneas y polilíneas. Para el dibujo de círculos y elipses, utilice sólo el algoritmo del
punto medio. Para el dibujo de otras curvas, aproxímelas a partir de polilíneas o versiones
parciales de círculos y elipses. Aproveche la posibilidad de modificar los atributos de color y
grosor de los puntos para dibujar elementos de diferentes colores (incluso con variación de
color), grosores y tamaños. Verifique que la proporción y ubicación de los elementos corresponde
con el diseño en el papel milimetrado. No deje nada por fuera! Se verificará que la escena en
pantalla coincida con el diseño en papel milimetrado.
Paso #4: Una vez satisfecho con la escena implementada, genere una copia del código y en esta
nueva versión aplique los algoritmos de recorte a cada uno de los elementos de la escena. Asuma
que la escena completa se divide en nueve partes (en una matriz de 3x3), y con los algoritmos de
recorte garantice que sólo la parte que se ubica en todo el centro de la escena (centro de la
matriz) es la que se dibuja en pantalla. Ejecute los dos programas en paralelo (sin recorte y con
recorte) para verificar y garantizar que el segundo sólo muestra la porción central de la escena.
Evaluación del taller
•
•
•
•
•
•
Excelente (5.0/5.0): el estudiante propone un código que dibuja completamente la
escena, hace uso de las implementaciones de algoritmos de dibujo de primitivas lineales y
curvas, así como de la manipulación de atributos y de los algoritmos de recorte, y la
escena virtual coincide con el diseño físico en papel milimetrado y aproxima lo más
posible la pintura seleccionada.
Bueno (4.0/5.0): el estudiante propone un código que dibuja completamente la escena y
la escena virtual coincide con el diseño físico en papel milimetrado y aproxima bien la
pintura seleccionada, sin embargo, no hace uso de las implementaciones de algoritmos de
dibujo de primitivas lineales y/o de la manipulación de atributos y/o de los algoritmos de
recorte.
Aceptable (3.5/5.0): el estudiante presenta un código que dibuja completamente la
escena, hace uso de las implementaciones de algoritmos de dibujo de primitivas lineales y
curvas, así como de la manipulación de atributos y de los algoritmos de recorte, pero la
escena virtual no coincide con el diseño físico en papel milimetrado y/o con la pintura
seleccionada.
Regular (2.0/5.0): el estudiante presenta un código incompleto o que dibuja una escena
incompleta.
Malo (1.0/5.0): el estudiante presenta el diseño físico en papel milimetrado, pero no el
código que dibuja la escena.
No entregó (0.0/5.0): el estudiante no presenta nada.