TP 5 - Courbes et surfaces de subdivision

Transcription

TP 5 - Courbes et surfaces de subdivision
UFR-IM2 AG
Année 2012-13
Université Joseph Fourier
M2-MIA-GICAO - Courbes & Surfaces
TP 5 - Courbes et surfaces de subdivision
TP à faire individuellement, utilisation de Scilab pour la partie Courbes, des logiciels Geomview et
C++ pour la partie Surfaces.
Compte-rendu de TP à rendre sous forme d’un document PDF (par exemple un document Open Office
Writer exporté au format PDF) et à envoyer avant le 26 novembre 2012 à l’adresse e-mail [email protected]
Récupérer l’archive contenant les fichiers nécessaires à ce TP à l’URL suivante :
http://www-ljk.imag.fr/membres/Nicolas.Szafran/ENSEIGNEMENT/MASTER2/#CS
1 - Courbes
1.1 - Schémas réguliers
Ecrire un programme permettant de définir un polygone de contrôle ouvert puis d’obtenir (par subdivision) les courbes correspondantes aux schémas suivants :
– Chaikin
(Corner-Cutting) : (Di )1≤i≤n
→ (Dj )1≤j≤2n−2
D2i−1 = a Di + (1 − a) Di+1
pour 2 ≤ i ≤ n − 2 avec a = 3/4 et b = 1/4
D2i
= b Di + (1 − b) Di+1
D 1 = D1
D 2n−3 = (Dn−1 + Dn )/2
et les règles de bord
et
D 2 = (D1 + D2 )/2
D 2n−2 = Dn
– Catmull-Clark
: (Di )1≤i≤n → (D j )1≤j≤2n−1
D2i−1 = (Di−1 + 6Di + Di+1 )/8 pour 2 ≤ i ≤ n − 1
D2i
= (Di + Di+1 )/2
pour 1 ≤ i ≤ n − 1
et les règles de bord D1 = D1 et D2n−1 = Dn
– Schéma
à 4 points (ω = 1/16 = 0, 0625) : (Di )1≤i≤n → (D j )1≤j≤2n−1
D2i−1 = Di
pour 1 ≤ i ≤ n
1
1
D2i
= −ωDi−1 + ( 2 + ω)Di + ( 2 + ω)Di+1 − ωDi+2 pour 2 ≤ i ≤ n − 2
et les règles de bord
D 2 = ( 21 − 2ω)D1 + ( 12 + 4ω)D2 − 2ωD3 et D2n−2 = −2ωDn−2 + ( 21 + 4ω)Dn−1 + ( 21 − 2ω)Dn
1.2 - Autres schémas
Les schémas de subdivision précédents mènent à des courbes de subdivision lisses.
Il est possible de définir d’autres schémas de subdivision donnant des courbes moins ”régulières” (simplement continues voire fractales).
– Corner-Cutting général : reprendre le schéma de Chaikin avec d’autres valeurs pour a et b par
exemple :
a = 0, 9 et b = 0, 25 a = 1 et b = 0, 5 a = 1, 1 et b = 0, 25 a = 0, 25 et b = 0, 75
– Schéma à 4 points général : reprendre le schéma à 4 points avec différentes valeurs de ω entre -0,3
et +0,3 .
M2 MIA-GICAO - 2012/2013
1
Courbes & Surfaces - TP5
2 - Surfaces
2.1 - Utilisation du logiciel fourni
Dans cette partie, vous aurez à utiliser (et modifier) un programme générant des surfaces de subdivision
à partir de maillages donnés sous forme de fichier Geomview au format OFF.
Récupérer le fichier archive.tar et extraire les fichiers.
Le programme est généré à partir du fichier Makefile et des sources C++ suivantes :
- opérations géométriques 3D : geom3d.hpp et geom3d.cpp
- objet maillage 3D : maillage.hpp et maillage.cpp
- routines de subdivision : maillage subdivision.hpp et maillage subdivision.cpp
- le programme principal : surface subdivision.cpp
Un certain nombre de fichiers de données sont fournis dans le répertoire DONNEES .
Le programme pouvant générer des fichiers de grande taille, il est conseillé pour cette partie de travailler
dans le répertoire local /tmp afin d’éviter des accès en lecture/écriture à votre répertoire personnel :
– en début de séance, créer un sous-répertoire dans /tmp, copiez-y les fichiers nécessaires, travaillez
pendant toute la séance dans ce répertoire,
– et en fin de la séance (re)copiez dans votre répertoire personnel les fichiers modifiés lors de la séance.
Pour compiler le programme, tapez la commande
make all
Pour supprimer les fichiers intermédiaires, tapez la commande
make clean
Pour démarrer le programme, tapez la commande
./surface subdivision
il faut alors entrer au clavier :
– le nom d’un fichier OFF contenant le maillage initial
– le numéro de la méthode de subdivision choisie, le programme fournissant six schémas :
0
1
2
Doo-Sabin
Catmull-Clark
MidEdge
3
4
5
Sqrt(3)
(le maillage initial est triangulé si nécessaire)
Butterfly (le maillage initial est triangulé si nécessaire)
Loop
(le maillage initial est triangulé si nécessaire)
– le nombre de subdivision
Le programme subdivise le maillage suivant la méthode choisie et crée à chaque étape de subdivision
un fichier résultat au format Geomview dont le nom commence par res, contient le nom du schéma de
subdivision, l’étape de subdivision et se termine par .off.o
Par exemple, pour subdiviser le cube (fichier DONNEES/cube.off) avec la méthode Catmull-Clark :
make clean
./surface_subdivision
Nom du fichier OFF : DONNEES/cube.off
Choix de la méthode de subdivision :
Doo-Sabin
: 0
...
Loop
: 5
Entrer votre choix : 1
Entrer le nombre de subdivisions : 3
M2 MIA-GICAO - 2012/2013
2
Courbes & Surfaces - TP5
Le programme effectue les 3 subdivisions et crée les fichiers suivants :
– le maillage initial se trouve dans le fichier res00.off.o,
– les trois maillages subdivisés dans les fichiers res-catmull clark-01.off.o,
res-catmull clark-02.off.o et res-catmull clark-03.off.o
Ces fichiers peuvent alors être visualisés avec Geomview avec la commande :
geomview geomview.default res*.off.o &
le fichier geomview.default permettant d’avoir par défaut des options spécifiques (fond blanc, projection
orthographique, mode filaire).
2.2 - Comparatifs des schémas de subdivision
Dans cette partie, vous devez comparer les schémas de subdivision. Les maillages obtenus par subdivision devront être visualisés sous Geomview avec les options Face et Smooth.
A) La topologie du maillage subdivisé dépend du type de schéma utilisé .
A1) en utilisant le fichier carre.off et 2 étapes de subdivision, comparez la topologie des maillages
subdivisés obtenus par les schémas de Catmull-Clark et Doo-Sabin
A2) en utilisant le fichier triangle.off et 2 étapes de subdivision, comparez la topologie des maillages
subdivisés obtenus par les schémas de Loop et Sqrt(3)
B) Chaque schéma donne une surface de subdivision avec plus ou moins de régularité, certains schémas
donnant des surfaces complètement lisses, d’autres des surfaces lisses sauf en certains points.
B1) en utilisant le fichier pyramide.off, visualiser le maillage obtenu après 6 subdivisions avec le
schéma Catmull-Clark : on obtient une surface lisse sauf en 8 points.
En visualisant le maillage subdivisé avec le maillage initial, on peut remarquer que ces 8 points ”anguleux” correspondent aux quatre sommets de degré 3 et aux quatre faces triangulaires du maillage
initial.
En effet, le schéma de Catmull-Clark implémenté dans le programme correspondant au schéma
B-Spline bicubique qui donne une surface de subdivision lisse uniquement à partir d’un maillage
quadrangulaire régulier.
Modifiez la routine subdivision catmull clark() dans le fichier maillage subdivision.cpp en
remplaçant l’instruction
C = (Q+2*R+S)/4;
// formule pour sommet régulier de degré 4
par l’instruction
C = (Q+2*R+(n-3)*S)/n; // formule pour sommet de degré quelconque
puis refaites le même test avec le fichier pyramide.off.
Par la suite, conservez le fichier maillage subdivision.cpp ainsi modifié.
B2) en utilisant le fichier tetraedre.off, comparez les différents schémas de subdivision notamment
la régularité des maillages obtenus après 6 subdivisions.
M2 MIA-GICAO - 2012/2013
3
Courbes & Surfaces - TP5
C) Le schéma de subdivision est soit interpolant, soit approximant : en utilisant le fichier pic.off,
comparez les surfaces obtenues avec les méthodes Butterfly et Loop.
D) Le schéma de subdivision doit être adapté au type (triangulaire ou quadrangulaire) du maillage
initial.
D1) en utilisant le fichier mannequin.off, comparer visuellement le résultat obtenu après 3 subdivisions avec les méthodes Doo-Sabin, Catmull-Clark, Sqrt(3), Loop
D2) en utilisant le fichier lettre I.off, comparer visuellement le résultat obtenu après 3 subdivisions
avec les méthodes Doo-Sabin, Catmull-Clark, Sqrt(3), Loop
Conclusions ?
Faites d’autres tests avec d’autres fichiers de données.
2.3 - Déformation d’un modèle
Dans cette partie, la déformation d’un modèle 3D à différents niveaux de subdivision est abordée.
Modifiez le fichier subdivision surface.cpp en remplaçant (dans la routine main) l’instruction
partie subdivision();
par l’instruction
partie deformation();
puis recompilez et exécutez le programme.
Le maillage cube.off est :
i) d’une part subdivisé 6 fois sans modification (→ fichier res0.off.o),
ii) d’autre part subdivisé d’abord k fois, puis déformé en modifiant les coordonnées d’un sommet, et
enfin subdivisé 6 − k fois (→ fichier res1.off.o)
Pour visualiser le résultat :
geomview geomview.default res0.off.o res1.off.o &
A) Modifiez le niveau de subdivision de la déformation en changeant dans le programme (routine
partie deformation) la valeur de la variable k (choisir k=1, k=2 et k=3)
B) Faites d’autres tests en modifiant plusieurs points, en utilisant d’autres maillages, ...
M2 MIA-GICAO - 2012/2013
4
Courbes & Surfaces - TP5