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