Subdivision

Objectifs

L'objectif de ce TP est de subdiviser des maillages avec le schéma de Catmull Clark. Pour cela vous allez vous servir d'une structure de donnée de demi arête (halfedge). Pour cela nous utiliserons la bibliothèque OpenMesh.

Scène initiale
Image 1 : exemple de la subdivision sur un cube : les fichiers cube.obj et cube.mtl

Installation

Telecharger : mg3d-tp.tar.gz et décompresser.
Installation du tp :


mkdir libStatic

wget http://www.libqglviewer.com/src/libQGLViewer-2.3.10.tar.gz
tar zxvf libQGLViewer-2.3.10.tar.gz
cd libQGLViewer-2.3.10/QGLViewer
qmake-qt4 QGLVIEWER_STATIC=yes
make -j4
cp libQGLViewer.a ../../libStatic
cd ../../

wget http://openmesh.org/fileadmin/openmesh-files/2.0.1/OpenMesh-2.0.1.tar.gz
tar zxvf OpenMesh-2.0.1.tar.gz
mkdir OpenMesh-build
cd OpenMesh-build/
cmake ../OpenMesh-2.0.1
make -j4
cp Build/lib/OpenMesh/libOpenMeshCore.a ../libStatic/
cd ../


cd mg3d-tp
qmake-qt4
make -j4


./mg3d-tp
nota pour recompiler "propre" faire make distclean, qmake-qt4, make

Principe

La description de la subdivision Catmull-Clark est disponible sur la page wikipedia. Une autre version donne les règles pour les arêtes franches (et les bords) : le cours de Loic Barthe sur les surfaces de subdivision (notamment à la fin sur la gestion des bords).

Travail à réaliser

OpenMesh

La doc d'OpenMesh vous permet de comprendre son fonctionnement. Commencez par lire la définition de la structure en demi arête. Les points importants sont la définition du maillage MyMesh, qu'il vous faudra étendre par la structure OGRLTraits, et dont la version actuelle se trouve dans le fichier ogrlmesh.h.

Vous aurez normalement besoin d'ajouter des propriétés aux faces et aux arêtes. Pour cela, le plus simple reste les custum properties dynammic d'OpenMesh.

Pour parcourir l'ensemble des faces, vertices, arêtes d'un maillage, utilisez les itérateurs d'OpenMesh. Pour parcourir le voisinage d'un élément, OpenMesh fournit des circulateurs.

Pour accéder aux données directement reliées à un élément, on utilisera les fonctions de connectivité d'OpenMesh.

Subdivision

Implémentez la subdivision de Catmull Clark. Les commentaires ne tiennent pas compte des bords, mais utilisent l'approche générale qui se base sur une définition générique (sans cas particuliers pour les sommets extraordinaires). Ajoutez la gestion de bords.

On trouvera plusieurs modèles ici : Aim at Shape models.
TP Modélisation Géométrique - 2011 :: VORTEX --- IRIT-UPS-CNRS Valid XHTML 1.0 Strict