Cours CAO/DAO
description
Transcript of Cours CAO/DAO
Plan du cours Introduction Maillages
Definition Stucture
Modelisation de courbes et surfaces Modes de représentation Bezier
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é
Domaines d’utilisations CAO pour :
Mécanique : pièces automobile Electronique :
circuits électrique Circuit imprimé microprocesseurs
Architecture : plan 2D bâtiment 3D
Domaine d’utilisation CAO pour :
Urbanisme Route, autoroute Maison, quartier, ville…
Modélisation moléculaire Orthopédie Ameublement etc
Maillages Définition Différents types de maillages Générer un maillage Structure pour coder un maillage
Maillages Ensemble de points reliés par des
arrêtes pour former des mailles (faces)
But : visualiser un objet Sphere Pyramide Lapin
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)
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
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
Structure d’un maillage Composition d’un maillage:
Ensemble de points (nœuds) Ensemble d’arrêtes Ensemble de mailles(facettes) :
triangles, polygones etc…
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
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;
Maillage (arrête) Composition de l’arrête
Deux points : extrémités Arrêtes voisines mailles d’appartenance Couleur Etc…
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;
Maillage (maille) Composition d’une maille (face)
Ensemble de points Ensemble d’arrêtes Couleur Numéro d’identifiant Normale
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;
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;
Initialisation de la structure //initialisation d'un point.point * initPoint(int id){point * p=(point*)malloc(sizeof(point)); p->id=id;… return p;}
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; }
Initialisation de la structure //initialisation polygonepolygone * initPoly( int id){polygone *p= (polygone*)malloc(sizeof(polygone));p->id=id;…return p; }
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; }
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; }}
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; } }
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
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;
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){
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
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;
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;
Lecture d’un fichier OBJ default :break;//on ne fait rien break;}//fin du switch}//fin du whilereturn m;}//fin de la fonction
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
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
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
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)
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
Liens pour utiliser OpenGL Utilisation d’opengl avec DevCpp:
http://henri.garreta.perso.luminy.univmed.fr/generique/autres/OGL/index.html
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