Práctica 2: Decimation of Triangle Meshes - Javi Agenjo at UPF

Práctica 2: Decimation of Triangle Meshes

Última actualización 13/10/2010

Introducción

Esta práctica consiste en la implementación del algoritmo de diezmado de triángulos para reducir el número de polígonos de una malla triangulada manteniendo la apariencia de la superficie.

William J. Schroeder, Jonathan A. Zarge, and William E. Lorensen

Decimation of Triangle Meshes

Computer Graphics (SIGGRAPH ’92 Proceedings), Vol. 26, no. 2, July 1992, pp. 65–70.

También puede ser muy útil consultar el manual de VTK disponible en la biblioteca u online.

Objetivo

Escribir un programa en C++ para Linux que implemente el algoritmo de Decimation of Triangle Meshes citado previamente. El algoritmo recibe como entrada una superficie triangulada y la simplifica, reduciendo el número de triángulos pero manteniendo la apariencia de la superficie.

Material

Desarrollo

Para leer los datos tridimensionales y visualizar la superficie poligonal generada se tendrá que utilizar la biblioteca VTK. Para instalarla en las aulas, ir al menú: “Aplicacions -> Gràfics -> VTK”.

Una vez instalada:

1.  Descargar el framework de la Práctica 2 (decimation.tar)

2.  Descomprimirlo: ejecutar desde la línea de comando la instrucción

tar xvf decimation.tar

3.  Ahora podemos compilar el código ejemplo:

cd decimation/src

Hay dos cpp de ejemplo:

Politext.cpp crea una superficie muy sencilla. Se compila con:

make -k poli

cara.cpp carga de disco la superficie con la que trabajaremos, una cara, y muestra ejemplos de cómo recorrer sus triángulos y puntos, evaluando conectividades y pertenencias. Se compila con:

make -k cara

Para la práctica 2, trabajaremos sobre el archivo “cara.cpp”.

4.  Se habrá creado un binario el la carpeta “obj” llamado poli.o/cara.o respectivamente. Para ejecutarlo desde la carpeta “decimation”:

./obj/cara

Experimentos

Probar con diferentes parámetros, tanto externos (elegidos por el usuario), como internos del algoritmo.

Entrega

Fecha límite: Martes 9 de Noviembre a las 08:00AM; No se aceptan entregas tardías, no se hacen excepciones.

Qué se entrega:

  • Informe: introducción, el algoritmo, explicación del código, experimentos, conclusiones. En formatos html, ps, pdf o rtf.
  • Código C++, comentado, listo para compilar (con su Makefile). Formato: ASCII.
  • Las imágenes (cualquier formato) y parámetros usados en los experimentos.
  • Se deben poder reproducir los experimentos con todos los materiales entregados, en cualquier PC de aulas, en Linux.
  • En caso de copia (entre equipos, o de otras fuentes) todos los integrantes de los equipos involucrados suspenderán inmediatamente la asignatura, y el Departament abrirá un expediente solicitando la expulsión temporal de dichos estudiantes.

Defensa

Martes 9 de Noviembre

Duración: 10 minutos por equipo, con preguntas individuales. Todos los integrantes deben estar plenamente familiarizados con el trabajo. Esta clase es de asistencia obligatoria. No hay que traer Slides, será una presentación oral delante del código.

Consejos

  • Leer el artículo con atención.
  • Leer el código de ejemplo con atención, hasta entender todos los pasos y ejemplos.
  • Mirar el archivo fran_cut2.vtk, en textura/vtkdata. Reconocer su estructura: primero hay una lista de coordenadas 3D de puntos (3 puntos por línea), después una lista de polígonos, donde cada línea tiene el formato: <núm. de lados del polígono> <Id del punto A> <Id del punto B> <Id del punto C> donde siempre el polígono será el triángulo formado por los puntos ABC, en ese orden (normal saliente).
  • Invertir un buen tiempo en planear el código, no ponerse a programar directamente.
  • Hacer código modular: desglosar la tarea global en partes, hacer funciones para estas partes, llamar a las funciones desde un programa principal corto.
  • Consultar la documentación de la librería VTK.