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.
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
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.
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.