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.