cours cao/dao

38
Cours CAO/DAO Enseignant : Ouissem BEN HENIA Adresse Email : [email protected]

Upload: chesmu

Post on 15-Jan-2016

48 views

Category:

Documents


1 download

DESCRIPTION

Cours CAO/DAO. Enseignant : Ouissem BEN HENIA Adresse Email : [email protected]. Plan du cours. Introduction Maillages Definition Stucture Modelisation de courbes et surfaces Modes de représentation Bezier. Introduction CAO (CAD en anglais). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Cours CAO/DAO

Cours CAO/DAO

Enseignant : Ouissem BEN HENIA

Adresse Email : [email protected]

Page 2: Cours CAO/DAO

Plan du cours Introduction Maillages

Definition Stucture

Modelisation de courbes et surfaces Modes de représentation Bezier

Page 3: Cours CAO/DAO

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

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

Domaine d’utilisation CAO pour :

Urbanisme Route, autoroute Maison, quartier, ville…

Modélisation moléculaire Orthopédie Ameublement etc

Page 6: Cours CAO/DAO

Maillages Définition Différents types de maillages Générer un maillage Structure pour coder un maillage

Page 7: Cours CAO/DAO

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 38: Cours CAO/DAO

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