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.
© Copyright 2024 ExpyDoc