Infografia I: Practica 2. Bresenham - Javi Agenjo at UPF

Infografia I: Practica 2. Bresenham

Última actualización 3/05/2010

La practica consiste en programar algoritmos de rasterizado de lineas y circulos. Sirve como toma de contacto con los conceptos de optimización y pintado en framebuffer.

Material

Requisitos

  • Codigo en C o C++ que implemente:
    • El algoritmo de DDA.
    • El algoritmo de Bresenham para lineas.
    • El algoritmo de Bresenham para circulos.
    • Tienen que poderse dibujar lineas con cualquier tipo de pendiente.
    • Tiene que poderse elegir qué algoritmo usar (mediante teclado o menus).
    • Tiene que poderse usar el ratón para elegir los puntos tanto de las lineas como del centro y un punto de la circunferencia.
  • Opcional
    • Adjuntar alguna opción de benchmarking (testeo de rapidez del algoritmo), que calcule el tiempo que tarda cada algoritmo en pintar un numero elevado de lineas.
    • Se valorará que el código sea legible, esté bien estructurado y sea óptimo.

Fallos comunes

  • Poner partes del algoritmo que calcula los puntos de la linea o el circulo en el main.cpp. Las funciones tienen que ser completas, es decir, retornan TODOS los puntos que forman la primitiva, no importa en qué condicion estoy, si hay que hacer ajustes se hacen desde dentro de la función, externamente el main no tiene ni idea de cómo lo hace ni le importa.
  • Modificar la función drawPoints para poner parte del algoritmo, esta funcion SOLO pinta los puntos que hay en el vector de puntos, nada más.
  • Liarse haciendo swaps de los puntos en lugar de ajustar las condiciones y los incrementos.
  • Tratar los 8 octantes por separado en Bresenham
  • Añadir atributos a las clases para calculos locales de funciones.
  • Cambiar los prototipos de las funciones para pasarle los puntos por parametro.
  • Usar floats en las variables del loop de Bresenham
  • Hacer scanf para coger el input del usuario.
  • No usar la asignacion con el constructor p.e. Point B = Point(10,10);
  • Hacer bucles para deshacer cambios al acabar el algoritmo.