Cours CAO/DAO
description
Transcript of Cours CAO/DAO
![Page 2: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/2.jpg)
Plan du cours Introduction Maillages
Definition Stucture
Modelisation de courbes et surfaces Modes de représentation Bezier
![Page 3: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/3.jpg)
Introduction CAO (CAD en anglais) CAO : Logiciels et techniques de
modélisation géométrique : AutoCAD, 3D CAD, QCAD, maillage, Spline …
But : concevoir et tester virtuellement des objets à fabriquer
Domaines connexes : dessin par ordinateur calcul scientifique programmation par contrainte CFD: étude le comportement du système
modélisé
![Page 4: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/4.jpg)
Domaines d’utilisations CAO pour :
Mécanique : pièces automobile Electronique :
circuits électrique Circuit imprimé microprocesseurs
Architecture : plan 2D bâtiment 3D
![Page 5: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/5.jpg)
Domaine d’utilisation CAO pour :
Urbanisme Route, autoroute Maison, quartier, ville…
Modélisation moléculaire Orthopédie Ameublement etc
![Page 6: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/6.jpg)
Maillages Définition Différents types de maillages Générer un maillage Structure pour coder un maillage
![Page 7: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/7.jpg)
Maillages Ensemble de points reliés par des
arrêtes pour former des mailles (faces)
But : visualiser un objet Sphere Pyramide Lapin
![Page 8: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/8.jpg)
Maillages
Différents types de maillages Triangulaire Rectangulaire (ici carré) Polygonal, hexagonal Uniforme : distribution uniforme des
sommets sur la surface (contraire non uniforme: maillage en vert)
Etc… (exp Régulier/irrégulier)
![Page 9: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/9.jpg)
Maillages
Différents niveau de détails Exemple modélisation
Maillage très fin: réaliste mais nécessite de grandes ressources mémoire et temps de calcul
Maillage grossier : rapide à afficher, peu de ressources mémoire mais pas réaliste
![Page 10: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/10.jpg)
Maillage : construction Construction de maillage :
À la main Formules mathématiques Scanner un objet
Nuages de points Algorithme de triangulation
Delaunay
scannage de la statue de David
Le modèle tridimensionnel comporte
un milliard de polygones(mailles). Images propriété du projet Michelangelo
![Page 11: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/11.jpg)
Structure d’un maillage Composition d’un maillage:
Ensemble de points (nœuds) Ensemble d’arrêtes Ensemble de mailles(facettes) :
triangles, polygones etc…
![Page 12: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/12.jpg)
Maillage (sommet) Un point d’un maillage peut
contenir 2 ou 3 coordonnées Une couleur : 3 valeurs RGB Une normale Ensemble de voisins
Sommets (nœuds) Arrêtes Mailles
![Page 13: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/13.jpg)
Maillage (sommet) Typedef struct _point {- float * coord;- int dimension; //(2 ou 3)
- int id;//un numéro pour l’identifier
- int * voisinsP;//les points voisins - int nbVP;//nombre de points voisins
- int * voisinsA;//les arrêtes auxquelles il appartient
- int nbVA; //nombre d’arrêtes voisines
- int * voisinsM;//les mailles auxquelles il appartient
- int nbM;//nombre de mailles voisins
…}point;
![Page 14: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/14.jpg)
Maillage (arrête) Composition de l’arrête
Deux points : extrémités Arrêtes voisines mailles d’appartenance Couleur Etc…
![Page 15: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/15.jpg)
Maillage (arrête) Typedef struct _arrete {- int pt[2]; //points d’extrémités
- int id;//un numéro pour l’identifier
- int * voisinsA; //les arretes auxquelles il appartient
- nbVA; //nombre d’arrêtes voisines
- int * voisinsP;//les mailles auxquelles il appartient
- int nbVM;//nombre de mailles voisines
…}arrete;
![Page 16: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/16.jpg)
Maillage (maille) Composition d’une maille (face)
Ensemble de points Ensemble d’arrêtes Couleur Numéro d’identifiant Normale
![Page 17: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/17.jpg)
Maillage (maille) Typedef struct _maille{- int * pt; //points d’une maille
- int nbPt;//nombre de points du maille
- int id;//un numéro pour l’identifier
- int * Arr;//arrêtes qui délimitent la maille
- nbA;//nombre d’arrêtes
- int * voisinsM;//les mailles auxquelles il appartient
- int nbVM;//nombre de mailles voisines
…}maille;
![Page 18: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/18.jpg)
Maillage (structure) Typedef struct _maillage{- points * pt; //ensemble de sommets
- int nbPt;//nombre de points du maille
- arrete * arr;//ensemble d’arrêtes formant le maillage
- nbA;//nombre d’arrêtes
- maille * mailles;//les mailles qui forment le maillage
- int nbM;//nombre de mailles
…}maillage;
![Page 19: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/19.jpg)
Initialisation de la structure //initialisation d'un point.point * initPoint(int id){point * p=(point*)malloc(sizeof(point)); p->id=id;… return p;}
![Page 20: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/20.jpg)
Initialisation de la structure //initialisation arretearrete * initarrete(int p1,int p2, int id){arrete* ar=(arrete*)malloc(sizeof(arrete));ar->pt[0]=p1;ar->pt[1]=p2;ar->id=id;…return ar; }
![Page 21: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/21.jpg)
Initialisation de la structure //initialisation polygonepolygone * initPoly( int id){polygone *p= (polygone*)malloc(sizeof(polygone));p->id=id;…return p; }
![Page 22: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/22.jpg)
Initialisation de la structure //initialisation du maillagemaillage * initMaillage(){maillage *m =(maillage*)malloc(sizeof(maillage));m->nbPt=m->nbPoly=0;m->poly=NULL;m->pt=NULL;…return m; }
![Page 23: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/23.jpg)
Ajouter un point à un maillage //rajoute un point au maillgevoid ajoutPtMaillage(maillage * m, point *p){point *t;m->nbPt++;t=(point*)realloc(m->pt,sizeof(point)*m->nbPt);if(t==NULL) {printf("problème d'allocation mémoire\n");exit(0);} else { m->pt=t; m->pt[m->nbPt-1]=*p; }}
![Page 24: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/24.jpg)
Ajouter un polygone à un maillage //rajoute un polygone au maillagevoid ajoutPolyMaillage(maillage * m, polygone * poly){polygone *t;m->nbPoly++;t=(polygone*)realloc(m->poly,sizeof(polygone)*m-> nbPoly);if(t==NULL) {printf("problème d'allocation mémoire\n");exit(0);} else { m->poly=t; m->poly[m->nbPoly-1]=*poly; } }
![Page 25: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/25.jpg)
Fichier OBJ v -0.274878 -0.274878 -0.274878 v -0.274878 -0.274878 0.274878 v -0.274878 0.274878 0.274878 v 0.274878 0.274878 0.274878 v 0.274878 -0.274878 0.274878 f 1 2 4 f 4 2 3 f 1 5 2…V pour vertex (vecteur, sommet)F pour face
![Page 26: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/26.jpg)
Lecture d’un fichier OBJ maillage * lire_obj(char *nom_fichier){
/*declaration des variables*/FILE *fichier;//fichier objchar carlu;//caractère courant luint etat;//important pour savoir ce qu'on lit dans le
fichierpoint * pt;//contient les coordonne d'un pointpolygone *poly;//contient un polygonemaillage*m; // le maillage resultatint i;float f;int a;
![Page 27: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/27.jpg)
Lecture d’un fichier OBJ /**ouverture du fichier**/
fichier=fopen(nom_fichier,"r");if (fichier==NULL) {printf("echec d'ouverture de
fichier \n"); exit(0);}
/*Initialisation*/m=initMaillage(); //initialisation du maillageetat = 0;//initialisation de l’etat
while(etat!=-1 ){switch (etat){
![Page 28: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/28.jpg)
Lecture d’un fichier OBJ case 0://on dans l'etat initialecarlu=fgetc(fichier);switch (carlu){
case 'v':etat=1;break; case 'f':etat=2;break;
default:while(carlu!='\n'&& carlu!=EOF ) { carlu=fgetc(fichier); } //on traite le cas ou on est à la fin du fichier
if(carlu==EOF)etat=-1;//cas final fin du texte else etat=0; break; }break;//fin du cas initiale
![Page 29: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/29.jpg)
Lecture d’un fichier OBJcase 1://on lit les coordonnees du point
pt=initPoint(m->nbPt);for(i=0;i<3;i++){
fscanf(fichier,"%f",&f); pt->coord[i]=f;
}// on rajoute le point dans l'ensemble des points du maillageajoutPtMaillage(m,pt);// on retourne à la lignewhile(carlu!='\n'&& carlu!=EOF && carlu!='\r'){carlu=fgetc(fichier);}//on traite le cas ou on est à la fin du fichierif(carlu==EOF)etat=-1;//cas final fin du texte else etat=0; break;
![Page 30: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/30.jpg)
Lecture d’un fichier OBJ case 2://on li le polygone poly=initPoly(m->nbPoly); for(i=0;i<3;i++){ fscanf(fichier,"%i",&a); poly->pt[i]=a-1; } ajoutPolyMaillage(m, poly); // on retourne à la lignewhile(carlu!='\n'&& carlu!=EOF && carlu!='\r'){carlu=fgetc(fichier);}//on traite le cas ou on est à la fin du fichierif(carlu==EOF)etat=-1;//cas final fin du texteelse etat=0;break;
![Page 31: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/31.jpg)
Lecture d’un fichier OBJ default :break;//on ne fait rien break;}//fin du switch}//fin du whilereturn m;}//fin de la fonction
![Page 32: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/32.jpg)
Maillage (visualisation avec OpenGL) OpenGL
Librairie graphique 3D Caractéristiques :
Simplicité et Performance Indépendance du langage de
programmation et du système d’exploitation
Fait de la synthèse d’image : Traçage de primitives géométrique Position d’une caméra Lumières, textures
![Page 33: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/33.jpg)
Maillage (visualisation avec OpenGL) OpenGL s’occupe de :
Changements de repère Projection en perspective à l’écran Elimination des parties cachées Interpolation des couleurs Rasteriser (tracer ligne à ligne) les
faces pour faire des pixels (Bresenam) OpenGL indépendant du sytème de
fenetrage
![Page 34: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/34.jpg)
Maillage (visualisation avec OpenGL) OpenGL, pourquoi?
Open Source Simple et performant Très utilisé dans le domaine de la 3D
Dans des logiciels : Blender AutoCAD
Animation 3D Jeux video
OpenGL dans Blender
![Page 35: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/35.jpg)
Maillage (visualisation avec OpenGL) OpenGL, quelques références
Livres OpenGL Programming Guide OpenGL Reference Manual OpenGL Extensions Guide
Sites web http://www.opengl.org/ http://user.xmission.com/~nate/tutors.ht
ml (pleins de tutoriaux)
![Page 36: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/36.jpg)
Maillage (visualisation avec OpenGL) OpenGL : Synthèse d’image Glut : Gestion des fenêtres
Création de fenêtres (dimension, position )
Gestion de la souris Gestion du clavier
![Page 37: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/37.jpg)
Liens pour utiliser OpenGL Utilisation d’opengl avec DevCpp:
http://henri.garreta.perso.luminy.univmed.fr/generique/autres/OGL/index.html
![Page 38: Cours CAO/DAO](https://reader030.fdocuments.in/reader030/viewer/2022012908/56814967550346895db6ba48/html5/thumbnails/38.jpg)
Maillage Compléter les structures point,
arrête, polygone, maillage (fonction qui calcule les arrêtes)
Trouver les voisins d’un point Trouver le contour d’un maillage Calculer la normale d’un polygone Calcule la normale en un point