Cours CAO/DAO

Preview:

DESCRIPTION

Cours CAO/DAO. Enseignant : Ouissem BEN HENIA Adresse Email : o.benhenia@gmail.com. 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

Citation preview

Cours CAO/DAO

Enseignant : Ouissem BEN HENIA

Adresse Email : o.benhenia@gmail.com

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

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

Recommended