1 / 38

Cours CAO/DAO

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).

chesmu
Download Presentation

Cours CAO/DAO

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cours CAO/DAO • Enseignant : Ouissem BEN HENIA • Adresse Email : o.benhenia@gmail.com

  2. Plan du cours • Introduction • Maillages • Definition • Stucture • Modelisation de courbes et surfaces • Modes de représentation • Bezier

  3. 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é

  4. Domaines d’utilisations • CAO pour : • Mécanique : pièces automobile • Electronique : • circuits électrique • Circuit imprimé • microprocesseurs • Architecture : • plan 2D • bâtiment 3D

  5. Domaine d’utilisation • CAO pour : • Urbanisme • Route, autoroute • Maison, quartier, ville… • Modélisation moléculaire • Orthopédie • Ameublement • etc

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

  7. Maillages • Ensemble de points reliés par des arrêtes pour former des mailles (faces) • But : visualiser un objet • Sphere • Pyramide • Lapin

  8. 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… (expRégulier/irrégulier)

  9. 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

  10. 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

  11. Structure d’un maillage • Composition d’un maillage: • Ensemble de points (nœuds) • Ensemble d’arrêtes • Ensemble de mailles(facettes) : triangles, polygones etc…

  12. 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

  13. Maillage (sommet) • Typedefstruct _point { • float * coord; • int dimension; //(2 ou 3) • int id;//un numéro pour l’identifier • int * voisinsP;//les points voisins • intnbVP;//nombre de points voisins • int * voisinsA;//les arrêtes auxquelles il appartient • intnbVA; //nombre d’arrêtes voisines • int * voisinsM;//les mailles auxquelles il appartient • intnbM;//nombre de mailles voisins …}point;

  14. Maillage (arrête) • Composition de l’arrête • Deux points : extrémités • Arrêtes voisines • mailles d’appartenance • Couleur • Etc…

  15. Maillage (arrête) • Typedefstruct _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 • intnbVM;//nombre de mailles voisines …}arrete;

  16. Maillage (maille) • Composition d’une maille (face) • Ensemble de points • Ensemble d’arrêtes • Couleur • Numéro d’identifiant • Normale

  17. Maillage (maille) • Typedefstruct _maille{ • int * pt; //points d’une maille • intnbPt;//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 • intnbVM;//nombre de mailles voisines …}maille;

  18. Maillage (structure) • Typedefstruct _maillage{ • points * pt; //ensemble de sommets • intnbPt;//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 • intnbM;//nombre de mailles …}maillage;

  19. Initialisation de la structure • //initialisation d'un point. point * initPoint(int id){ point * p=(point*)malloc(sizeof(point)); p->id=id; … return p; }

  20. Initialisation de la structure • //initialisation arrete arrete * 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; }

  21. Initialisation de la structure • //initialisation polygone polygone * initPoly( int id){ polygone *p= (polygone*)malloc(sizeof(polygone)); p->id=id; … return p; }

  22. Initialisation de la structure • //initialisation du maillage maillage * initMaillage(){ maillage *m =(maillage*)malloc(sizeof(maillage)); m->nbPt=m->nbPoly=0; m->poly=NULL; m->pt=NULL; … return m; }

  23. Ajouter un point à un maillage • //rajoute un point au maillge voidajoutPtMaillage(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; } }

  24. Ajouter un polygone à un maillage • //rajoute un polygone au maillage voidajoutPolyMaillage(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; } }

  25. 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

  26. Lecture d’un fichier OBJ • maillage * lire_obj(char *nom_fichier){ /*declaration des variables*/ FILE *fichier;//fichier obj char carlu;//caractère courant lu intetat;//important pour savoir ce qu'on lit dans le fichier point * pt;//contient les coordonne d'un point polygone *poly;//contient un polygone maillage*m; // le maillage resultat int i; float f; int a;

  27. 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 maillage etat = 0;//initialisation de l’etat • while(etat!=-1 ){ switch (etat){

  28. Lecture d’un fichier OBJ • case 0://on dans l'etat initiale carlu=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 • elseetat=0; • break; • } break;//fin du cas initiale

  29. Lecture d’un fichier OBJ case 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 maillage ajoutPtMaillage(m,pt); // on retourne à la ligne while(carlu!='\n'&& carlu!=EOF && carlu!='\r'){carlu=fgetc(fichier);} //on traite le cas ou on est à la fin du fichier if(carlu==EOF)etat=-1;//cas final fin du texte elseetat=0; break;

  30. 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 ligne while(carlu!='\n'&& carlu!=EOF && carlu!='\r'){carlu=fgetc(fichier);} //on traite le cas ou on est à la fin du fichier if(carlu==EOF)etat=-1;//cas final fin du texte elseetat=0; break;

  31. Lecture d’un fichier OBJ • default :break;//on ne fait rien break; }//fin du switch }//fin du while return m; }//fin de la fonction

  32. 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

  33. 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

  34. 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

  35. 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.html (pleins de tutoriaux)

  36. 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

  37. Liens pour utiliser OpenGL • Utilisation d’opengl avec DevCpp: http://henri.garreta.perso.luminy.univmed.fr/generique/autres/OGL/index.html

  38. 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

More Related