Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1.

Slides:



Advertisements
Présentations similaires
Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.
Advertisements

Mais vous comprenez qu’il s’agit d’une « tromperie ».
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
Z y x Repère des objets (repère de modélisation) x z y Repère du monde.
( Application Programming Interface)
Chaîne de Synthèse Réel Modélisation Rendu Image Fichier Scène
1 Tracer un graphique avec la calculatrice graphique Cliquez sur le modèle de votre calculatrice.
Licence pro MPCQ : Cours
Distance inter-locuteur
1 Plus loin dans lutilisation de Windows Vista ©Yves Roger Cornil - 2 août
Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.
Les numéros 70 –
Les numéros
Les identités remarquables
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
1. 2 Informations nécessaires à la création dun intervenant 1.Sa désignation –Son identité, ses coordonnées, son statut 2.Sa situation administrative.
Lexique des manœuvres de base pour utiliser à PowerPoint
LES TRIANGLES 1. Définitions 2. Constructions 3. Propriétés.
1 Visualisation avec OpenGL Jérémie Allard 4 Novembre 2002.
Réalité virtuelle et interactions avec un individu
Programmation des logiciels infographiques interactifs 2D et 3D, et le OpenGL.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Python Interfaces graphiques
GRAPHISME PAR ORDINATEUR
1 Transformations affines But: fixer le positionnement et lorientation des objets de la scène.
Transformations de visualisation en OpenGL
Titre : Implémentation des éléments finis sous Matlab
SUJETS SPÉCIAUX EN INFORMATIQUE I PIF Contenu du cours Transformations géométriques des objets –Transformations 2D –Transformations entre systèmes.
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES NOMBRES PREMIERS ET COMPOSÉS
Gestion des événements liés à la fenêtre et aux périphériques dentrée.
2 TP avec l ’aide d ’un modeleur 3D :
Modélisation géométrique à l’aide d’un maillage
Images synthètiques de haute qualité
Représentation des systèmes dynamiques dans l’espace d’état
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
IFT3730 : Infographie 3D Systèmes et modèles graphiques Pierre Poulin, Derek Nowrouzezahrai Hiver 2013 DIRO, Université de Montréal.
IFT2740 : Outils de l'infographie 3D Systèmes et modèles graphiques
Titre : Implémentation des éléments finis en Matlab
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
1 INETOP
Application de texture en OpenGL
Aire d’une figure par encadrement
Découpage des objets selon le volume de vue
Techniques de points de contrôle en OpenGL : formes de Bézier
Équipe 2626 Octobre 2011 Jean Lavoie ing. M.Sc.A.
Représentation et traitement des images en OpenGL
IFT3730: Infographie Projections
PROTOTYPE D’UN PROGRAMME ÉCRIT EN C++ BASÉ SUR OPENGL
MAGIE Réalisé par Mons. RITTER J-P Le 24 octobre 2004.
Listes d’affichage.
Structures des données
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Les présentations assistées par ordinateur (préAO)
Création et présentation d’un tableau avec Word 2007
4 Introduction des objets. Les chaînes et tableaux
LES PILES ET FILES.
Les Chiffres Prêts?
1 Formation à l’usage éco-performant de votre pc 1 ère Partie.
Introduction à l’informatique en gestion 1 Plan de la leçon Compagnon office Sections et Mise en page En-têtes et pieds de page Notes de bas.
Argc et argv Utilisation des paramètres de la ligne de commande.
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 6 Transformation et animation de plusieurs modèles 3D avec XNA –Chargement des modèles 3D (modèle.
Introduction à la programmation graphique
GRAPHISME PAR ORDINATEUR
Premières notions de la 3D
OSSIA Open Scenario Systems for Interactive Application Contrôle de paramètres spatiaux Jean-Michel Couturier, Blue Yeti, mai 2014.
Transcription de la présentation:

Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1

OpenGL 2

Introduction Indépendant du matériel et du système d’exploitation développé par Silicon graphics bibliothèque de fonctions bas niveaux fonctions bas niveaux pour définir des objets graphiques simples, des couleurs, les points de vue, les sources de lumière,.... OpenGL = librairie graphique 3D 3

Pas un langage de programmation Pas orienté objet Pas d’outils de modélisation Introduction Pas d’interaction avec l’utilisateur (écran, souris, clavier,etc…)‏ Pas d’outil de fenêtrage Pas de gestion des événements  GLUT : OpenGL Utility Toolkit  GLU : OpenGL Utility Library Pas d’interaction avec l’utilisateur (écran, souris, clavier,etc…)‏ Pas de gestion des événements 4

Installation freeglut VS admin Récupérer Freeglut sur Copier freeglut.dll dans C:\Windows\System32 (admin)‏ Copier freeglut.lib dans le répertoire Lib de Visual C++, pour VS8 : c:\Program Files\Microsoft Visual Studio 8 \VC\PlatformSDK\Lib Copier freeglut.h et tous les.h dans le répertoire Include/gl de Visual C++ pour VS8 : c:\Program Files\Microsoft Visual Studio 8 \VC\PlatformSDK\Include\gl 5

Installation freeglut VS admin Récupérer Freeglut sur Copier freeglut.dll dans C:\Windows\System32 (admin)‏ Copier freeglut.lib dans le répertoire Lib de Visual C++, pour VS8 : c:\Program Files\Microsoft Visual Studio 8 \VC\PlatformSDK\Lib Copier freeglut.h et tous les.h dans le répertoire Include/gl de Visual C++ pour VS8 : c:\Program Files\Microsoft Visual Studio 8 \VC\PlatformSDK\Include\gl 6

Installation freeglut VS lambda Récupérer Freeglut sur wnload Pas admin : rep Include (.h) et Lib (.lib)‏ Outils  Options  Projets et solutions  Répertoire de VC++ 7

Installation freeglut VS lambda 8

Copier freeglut.dll dans Debug ou Release 9

Installation freeglut Linux (Ubuntu) Admin sudo apt-get install freeglut3 freeglut3-dev Pas admin 10

Code C++ Inclure #include freeglut.h #include GL/glu.h ou #include GL/freeglut.h 11

Fonctions OpenGL Primitives géométriques : points, segments, polygones préfixe : gl glColor2f()‏ 12

GLUT : OpenGL Utility Toolkit Gestion de fenêtres Gestion d ’événements (souris, clavier)‏ Affichage et mise à jour Primitives : sphère, cylindre… glutMouseFunc()‏ 13

GLU OpenGL Utility Library Transformations géométriques Triangulation de polygones Rendu des surfaces gluLookAt()‏ 14

GLUT : fenêtres glutInit(int *arg, char **argv)‏  initialise GLUT 15 Ex : int main(int argc, char** argv)‏ { glutInit(&argc,argv); …}

GLUT : fenêtres void glutInitDisplayMode(unsigned int mode)‏  choix : RGBA ou color-index, un ou deux tampons Ex : glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); Fenêtre en double tampon Modèle chromatique RVBA Tampon de profondeur

GLUT : fenêtres glutInitWindowPosition ( int x, int y)‏  coordonnées écran du coin haut gauche de la fenêtre glutInitWindowSize(int width, int size)‏  taille en pixels de la fenêtre 17 Ex : //position de la fenêtre glutInitWindowPosition(200,200); //taille initiale de la fenêtre glutInitWindowSize(500,500) ;

GLUT : fenêtres glutCreateWindow(char *string)‏  crée une fenêtre avec un nom de type string,  fenêtre affichée que lorsque glutMainLoop() est appelée 18 Ex : //création de la fenêtre glutCreateWindow(argv[0]) ;

void main(int argc, char** argv) ‏ { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); //taille initiale de la fenêtre glutInitWindowSize(500,500) ; //position de la fenêtre glutInitWindowPosition(200,200); //création de la fenêtre glutCreateWindow( " Robot " ) ; Init() ; //lancement de la boucle principale glutMainLoop(); return (0); } main(int argc, char** argv)‏ 19

GLUT : Actualisation Affichage glutDisplayFunc(void *(func)(void))‏  événement le plus important, actualisation d ’affichage  Appel de la fonction d’affichage  Toutes les routines nécessaires à la reconstitution de la scène doivent être dans la fonction d'affichage Ex : glutDisplayFunc(affichage); void affichage()‏ { … }

GLUT : Actualisation Affichage glutMainLoop(void)‏  dernière chose à faire  toutes les fenêtres qui ont été créées sont maintenant affichées  le rendu dans ces fenêtres effectué glutPostRedisplay(void)‏  lorsqu’une fenêtre est modifiée 22

GLUT : Actualisation Affichage void clavier(…)‏ { switch(touche){ case 27 : exit(0) ; case ‘a’ : case ‘A’ : …. glutPostRedisplay(); break; }

GLUT : évènements glutReshapeFunc (void (*func)(int w, int h))‏  action à exécuter quand la fenêtre est redimensionnée Ex : glutReshapeFunc (refenetrer); void refenetrer (int w, int h)‏ { … }

GLUT : évènements glutKeyboardFunc(void (* func)(unsigned char key, int x, int y))‏  associer une routine à une touche du clavier 25 Ex : glutKeyboardFunc(clavier); void clavier(unsigned char key, int x, int y)‏ { … }

GLUT : évènements Touches spéciales GLUT_KEY_UP GLUT_KEY_DOWN GLUT_KEY_LEFT GLUT_KEY_RIGHT freeglut_std.h

GLUT : évènements glutMouseFunc(void (* func)(int button, int state, int x, int y))‏  associer une routine à un bouton (pression ou relachement)‏ 27 Ex : glutMouseFunc(souris); void souris(int button, int state, int x, int y)‏ { … }

GLUT : évènements Bouton GLUT_LEFT_BUTTON GLUT_RIGHT_BUTTON GLUT_MIDDLE_BUTTON Etat GLUT_DOWN GLUT_UP

GLUT : évènements glutMotionFunc(void (*func)(int x, int y))‏  appel d’une routine pendant que la souris se déplace tout en appuyant sur un bouton 29 Ex : glutMotionFunc(souris2); void souris2(int x, int y)‏ { … }

GLUT : processus arrière- plan glutIdleFunc (void (*func)(void))‏  fonction à exécuter quand aucun évènement est en cours 30 Ex : glutIdleFunc (anim); void anim()‏ { … }

GLUT : objets 3D Wire  mode fil de fer Solid  plein void glutSolidCube (GLdouble width)‏ void glutWireCube (GLdouble width)‏ void glutSolidSphere (GLdouble radius, GLint slices, GLint stacks)‏ void glutWireSphere (GLdouble radius, GLint slices, GLint stacks)‏ 31

glutSolidSphere (GLdouble r, GLint m, GLint p); glutWireSphere (GLdouble r, GLint m, GLint p); GLUT : sphère 32 glutSolidSphere (2.0, 30, 20);

glutSolidCube (GLdouble taille); glutWireCube (GLdouble taille); GLUT : cube 33 glutSolidCube (1.5);

glutSolidCone (GLdouble r, GLdouble h, GLint m, GLint p); glutWireCone (GLdouble r, GLdouble h, GLint m, GLint p); GLUT : cone 34 glutSolidCone (1.5, 2.0, 20, 15);

glutSolidTorus (GLdouble rIn, GLdouble rOut, GLint m, GLint p); glutWireTorus (GLdouble rIn, GLdouble rOut, GLint m, GLint p); GLUT : tore 35 glutSolidTorus (0.2, 1.0, 20, 15);

glutSolidTeapot (GLdouble taille); glutWireTeapot (GLdouble taille); GLUT : théière 36 glutSolidTeapot (2.0);

void glutSolidCylinder (GLdouble r, GLdouble h, GLint m, GLint p)‏ freeGLUT : cylindre 37 glutSolidCylinder (0.5, 1.0, 10, 5)‏

glutSolidDodecahedron ( ); glutWireDodecahedron ( ); glutSolidOctahedron ( ); glutWireOctahedron ( ); glutSolidTetraahedron ( ); glutWireTetraahedron ( ); GLUT : objets 3D 38

OpenGL : Dessin  Effacer une fenêtre  Spécifier une couleur glColor3f(0.0,0.0,0.0,0.0); //Noir glColor3f(1.0,0.0,0.0,0.0); //Rouge  Achever un dessin glFlush(); glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); 39

OpenGL : Dessin Un Point Un sommet Un Segment

OpenGL : Dessin void glVertex{234}{sifd}(coords); Valeur de z par défaut : 0 Valeur de w par défaut : 1 L’appel à glVertex*() est effectif seulement entre glBegin() et glEnd()‏

OpenGL : Dessin  Appeler un sommets glVertex3f(1.1, 1.0, 3.5);//S(1.1, 1.0, 3.5)‏ 42  Exemple : Afficher un point glBegin (GL_POINTS); glVertex3f(1.1, 1.0, 3.5); glEnd();

OpenGL : Dessin  Afficher une primitive géométrique glBegin (mode); //appel des sommets glEnd();  Tout dessin est une liste d’appel de la fonction glVertex*()‏ 43

OpenGL : Dessin  Exemple : Afficher un quadrilatère glBegin (GL_POLYGON); glVertex2d(0,0)‏ glVertex2d(1,0); glVertex2d(1,1); glVertex2d(0,1); glEnd(); (0,0)‏(1,0)‏ (1,1)‏(0,1)‏ 44

glBegin(GL_POLYGON); { glVertex2f(0.0, 0.0); glVertex2f(4.0, 0.0); glVertex2f(6.0, 1.5); glVertex2f(4.0, 3.0); glVertex2f(0.0, 3.0); } glEnd(); OpenGL : Dessin

glBegin(GL_POINTS); { glVertex2f(0.0, 0.0); glVertex2f(4.0, 0.0); glVertex2f(6.0, 1.5); glVertex2f(4.0, 3.0); glVertex2f(0.0, 3.0); } glEnd(); Geometric Drawing Primitives

OpenGL : Points GL_POINTS V0V0 V2V2 V4V4 V3V3 V1V1 47

OpenGL : Lignes GL_LINES V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7 GL_LINE_STRIP V0V0 V1V1 V2V2 V3V3 V4V4 GL_LINE_LOOP V0V0 V1V1 V2V2 V3V3 V4V4 48

OpenGL : Triangles GL_TRIANGLES V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7 V8V8 49 GL_TRIANGLE_STRIP V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 GL_TRIANGLE_FAN V0V0 V1V1 V2V2 V3V3 V4V4

OpenGL : Quadrilatères 50 GL_QUADS V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7 GL_QUAD_STRIP V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7

OpenGL : Polygone GL_POINTS V0V0 V2V2 V4V4 V3V3 V1V1 GL_POLYGON V0V0 V2V2 V4V4 V3V3 V1V1 51

glBegin() & glEnd()‏ V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7 GL_POINTS

glBegin() & glEnd()‏ V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7 GL_LINES

glBegin() & glEnd()‏ V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7 GL_LINE_LOOP

glBegin() & glEnd()‏ V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7 GL_TRIANGLES

glBegin() & glEnd()‏ V0V0 V1V1 V2V2 V3V3 V4V4 V5V5 V6V6 V7V7 GL_POLYGON

OpenGL : Dessins Exemple #define PI #define n 20 … glBegin(GL_LINE_LOOP); for(int i=0;i<n;i++)‏ { angle = 2.0*PI*i/n; glVertex2f(cos(angle ),sin(angle)); } glEnd(); … Que dessine cet exemple ? 57

 Un polygone peut être dessiné en mode  Un polygone possède deux faces  Avant  Arrière OpenGL : Polygones  Fil de fer  Rempli avec la couleur courante GL_FRONT GL_BACK GL_LINE GL_FILL GL_FRONT_AND_BACK 58

Faces avant/arrière ? Ordre trigo  Face avant Ordre “Clockwise”  Face arrière V0V0 V1V1 V2V2 V0V0 V2V2 V1V1

OpenGL : Polygones void glPolygonMode( GLenum face, GLenum mode ); Controle le mode de dessin des faces avant et arrière d’un polygone face : GL_FRONT, GL_BACK GL_FRONT_AND_BACK mode :GL_POINT, GL_LINE, GL_FILL

Exemple : glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glPolygonMode(GL_FRONT, GL_FILL); glPolygonMode(GL_FRONT, GL_LINE); glPolygonMode(GL_BACK, GL_LINE); glPolygonMode(GL_BACK, GL_FILL); OpenGL : Polygones 61

OpenGL : Couleurs  Il existe deux modes d’utilisation des couleurs  RVBA : glColor*()‏  Indexé : glIndex*()‏  RVBA : glColor*()‏  Trois valeurs pour définir la couleur  Une 4ème (optionnelle) pour spécifier l’opacité du point glColor3f(0.0,0.0,0.0,0.0); //Noir glColor3f(1.0,0.0,0.0,0.0); //Rouge glColor3f(1.0,1.0,1.0,0.0); //Blanc 62

Exemple // couleur courante fixée à bleu glColor3f( 0.0f, 0.0f, 1.0f ); // vache afficherVache(); // couleur courante fixée à vert glColor3f( 0.0f, 1.0f, 0.0f ); // sol afficherSol(); Couleur courante

OpenGL : Taille  taille par défaut 1.0  représentation par un carré Void glPointSize(GLfloat Size); Void glLineWidth (GLfloat Size);  largeur par défaut  Contrôler la taille d’un point  Contrôler la largeur d’une ligne

1.Une fonction d’initialisation (void initialiser()). 2.Une fonction d’affichage (void afficher()). 3.Une fonction de fenêtrage (void refenêtrer()). 4.Une fonction de gestion de clavier (void clavier()). 5.Une fonction de gestion de la souris (void souris()). 6.La partie principale (main). initialiser() ‏ afficher() ‏ refenêtrer() ‏ clavier() ‏ souris() ‏ main() ‏ OpenGL : Programme type Un programme est généralement constitué de 5 parties : 65

Void Initialiser() ‏ { glClearColor(0,0,0,0); glColor3f(1.0,2.0,3.0); } Initialiser()‏ 66

Void afficher() ‏ { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON) ‏ glVertex3f(10.0,12.0,15.0) ; …. glEnd(); } afficher()‏ 67

Void refenetrer() ‏ { } refenetrer() 68

Void clavier() ‏ { switch(touche){ case 27 : exit(0) ; case ‘a’ : case ‘A’ : …. } clavier()‏ 69

Void souris(int btn, int state, int x, int y) ‏ { switch(bouton){ case GLUT_LEFT_BUTTON : if (etat==GLUT_DOWN) …. break ; case GLUT_MIDDLE_BUTTON : if (etat==GLUT_DOWN) …. break ; case GLUT_RIGHT_BUTTON : if (etat==GLUT_DOWN) …. break ; } souris()‏ 70

void main(int argc, char** argv) ‏ { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(500,500) ; //taille initiale de la fenêtre glutInitWindowPosition(200,200); //position de la fenêtre glutCreateWindow(argv[0]) ; //création de la fenêtre Init() ; glutDisplayFunc(afficher); glutDisplayFunc(refenetrer); glutDisplayFunc(clavier); glutDisplayFunc(souris); glutMainLoop(); //lancement de la boucle principale return (0); } main(int argc, char** argv) 71

 Projection orthogonale : glOrtho(), glOrtho2()  Transformation de perspective : glFrustum(), gluPrespective(). OpenGL : Projections 72

 Sélection de la matrice active : glMatrixMode()  Initialisation de la matrice active : glLoadIdentity() ‏  Modification de la matrice active : glLoadMatrix(), glMultMatrix() ‏  Gestion de la pile des matrices : glPushMatrix(), glPopMatrix() ‏ OpenGL : Matrices

Matrice Push / Pop void glPushMatrix(void); “rappelle-toi où tu es” Matrice du haut copiée : Contenu 1ère matrice (matrice courante)‏ =contenu 2ème matrice Push Matrix

Matrice Push / Pop Pop Matrix void glPopMatrix(void); “retourne où tu étais”

affichageVoiture()‏ { glTranslatef( c_x, c_y, c_z); affichageCarrosserie(); glPushMatrix(); glTranslate( f_x, f_y, f_z); glPushMatrix(); glTranslate( l_x, l_y, l_z); affichagePneu(); glPopMatrix(); glPushMatrix(); glTranslate( r_x, r_y, r_z); affichagePneu(); glPopMatrix();... } Matrice Push / Pop

 Rotation :  Translation :  Changement d'échelle :  Repère de l'œil : OpenGL : Transformations 77 glRotatef(angle, x, y, z); glTranslatef(x, y, z); glScalef(x, y, z); gluLookAt( … );

Transformations

 Définitions des lumières : glLight*(); glLightModel*();  Propriétés des surfaces : glMaterial*(); glColorMaterial(); OpenGL : Éclairage 79

Listes d'affichage

Liste d'affichage Un groupe de commandes OpenGL seulement Stockées et destinées à être exécutées plus tard dans l’ordre dans lequel elles ont été crées Optimise les performances d’affichage Car affichage d’un seul coup de tout le contenu de la liste

glNewList(listName, mode)‏ mode = GL_COMPILE ou mode = GL_COMPILE_AND_EXECUTE Liste d'affichage : création GL_COMPILE pour ne pas exécuter les commandes dès qu’elles sont placées dans la liste GL_COMPILE_AND_EXECUTE pour exécuter les commandes Immédiatement et les réutiliser après

Gluint MaListe ; /* index de liste */ glNewList (MaListe, GL_COMPILE) ; glColor3f (1.0, 0.0,0.0) ; glBegin (GL_POINTS) ; glVertex2f (0.0, 0.0) ; glEnd () ; glTranslatef (1.5, 0.0, 0.0) ; glEndList (); Liste d'affichage : création

glCallList(MaListe); Exécute la liste MaListe Liste d'affichage : appel glNewList (velo, GL_COMPILE) ; glCallList(guidon) ; glCallList(cadre) ; glTranslatef (1.0, 0.0, 0.0) ; glCallList(roue) ; glTranslatef (3.0, 0.0, 0.0) ; glCallList(roue) ; glEndList ();

Liste d'affichage : gestion glGenLists (Glsizei range) ; générer une suite de nouveaux numéros de liste MaListe = glGenLists (1); glIsList (Gluint list) ; retourne GL_TRUE si le numéro est déjà utilisé glDleteLists (Gluint list, Glsizei range) ; efface une suite de listes

Liste d'affichage : Exemple void triangle()‏ { glBegin(GL_TRIANGLES); glColor3f(0.0,1.0,0.0); glVertex3f(0.0,1.0,0.0); glVertex3f(0.0,0.0,0.0); glVertex3f(1.0,0.0,0.0); glEnd(); }

Liste d'affichage : Exemple void init()‏ { LeTriangle=glGenLists(1); glNewList(LeTriangle,GL_COMPILE); triangle(); glEndList(); } void affichage()‏ { glCallList(LeTriangle); glFlush(); }

Interaction

Clavier Modifier des variables dans clavier()‏ Mettre à jour avec Void clavier() ‏ { switch(touche){ case 27 : exit(0) ; case ‘a’ : case ‘A’ : … glutPostRedisplay( ); break; glutPostRedisplay( )‏

Souris Modifier des variables dans souris()‏ Mettre à jour avec glutPostRedisplay( )‏ Void souris(int btn, int state, int x, int y)‏ { switch(bouton){ case GLUT_LEFT_BUTTON : if (etat==GLUT_DOWN) …. glutPostRedisplay( ); break ;

Animation Modifier des variables dans anim1( )‏ Mettre à jour avec Appeler glutIdleFunction( anim1); Void anim1( )‏ { angle+=2.0; if(angle>360)‏ angle-=360; glutPostRedisplay( ); } GLfloat angle; glutPostRedisplay( )‏

Visualisation

Visualisation 3D avec OpenGL Transformations de modélisation Transformations de Projection Perspective Parallèle Transformations de clôture 93

Trois types de matrices prédéfinies: Une seule matrice active à la fois Matrices de modélisation-visualisation : GL_MODELVIEW Matrices de projection : GL_PROJECTION Matrices de texture : GL_TEXTURE glMatrixMode(mode); Visualisation sous OpenGL 94

Matrices de modélisation-visualisation : GL_MODELVIEW glTranslate*(), glRotate*(), glScale*() ‏ gluLookAt(oeilx,oeily,oeilz, centrex,centrey,centrez, upx,upy,upz); Exemple : glMatrixMode( GL_MODELVIEW); glLoadIdentity(); gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0); glScalef(1.0,2.0,1.0); Visualisation sous OpenGL 95

Visualisation sous OpenGL Deux primitives importantes : glLoadMatrix{fd}(M); M est un tableau de 16 valeurs : m 1,m 2,m 3,.....m 16 Modifie la matrice actice avec les valeurs de M glMultMatrix{fd}(M); Multiplie M par la matrice active (à droite CM) et stocke le résultat comme matrice active 96

Règle : Définir les transformations dans l'ordre inverse Exemple : glMatrixMode( GL_MODELVIEW); glLoadIdentity(); glMultMatrixf(N); glMultMatrixf(M); glMultMatrixf(L); // L est appliqué en premier : N(M(Lv))‏ glBegin(GL_POINTS); glVertex3f(v); glEnd(); Visualisation sous OpenGL 97

Approche indirecte Suite de transformations : glTranslatef + glRotatef Opérations matricielles Changement de repère : set_view_reference_point + set_view_plane_normal + set_view_up Approche directe gluLookAt Transformations de modélisation 98

glMatrixMode(GL_MODELVIEW) ; glTranslatef(0.0,0.0,1.0) ; glRotatef(90.0,0.0,1.0,0.0) ; 1 ère approche : suite de transformations 99

set_view_reference_point(x,y,z) permet de définir l’emplacement de la caméra (x,y,z)‏ set_view_plane_normal(n x,n y,n z ) permet de définir la normale du plan de vision set_view_up(h x,h y,h z ) permet de définir le haut du plan de vision 2 ème approche : changement de repère 100

gluLookAt( Oeil x, Oeil y, Oeil z, PR x, PR y, PR z, V x, V y, V z ); Oeil y Oeil z Oeil x PR y Y X Z V 3 ème approche : gluLookAt 101

PR z x y H N = oeil - PR P = V N H = N P V // Y N P H P 3 ème approche : gluLookAt 102 N V P N H

Pile de matrices : glMatrixMode(GL_PROJECTION); Projection des objets de la scène sur l’image de la caméra. Transformations de projection Objectif : définir un volume de vision 103

glFrustum(GLdouble xmin, GLdouble xmax, Gldouble ymin, Gldouble ymax, Gldouble zmin, Gldouble zmax) ; (xmin, ymin, zmin)‏ (xmax, ymax, zmax)‏ z x y Transformations de projection : Perspective 104

Matrices de projection : GL_PROJECTION Objectif : définir un volume de vision Projection en perspective : glFrustum(gauche, droit,bas,haut,proche, eloigne); haut gauche droit bas Visualisation sous OpenGL 105

glFrustum(); N'est pas trés intuitive : gluPerspective(angle,aspect, proche, eloigne); h Visualisation sous OpenGL 106

gluPerspective(angle_de_vue, rapport, zmin, zmax)‏ (zmin)‏ (zmax)‏ z x y  Transformations de projection : Perspective 107

Projection Perspective Oeil Plan Clipping Proche Plan Clipping Eloigné Plan Clipping Droit

glOrtho(xmin, xmax, ymin, ymax, zmin, zmax)‏ z x y (xmin, ymin, zmin)‏ (xmax, ymax, zmax)‏ Transformations de projection : Parallèle 109 Projection orthogonale glOrtho(gauche, droit,bas,haut,proche, eloigne);

Projection Orthographique Oeil Plan Clipping Proche Plan Clipping Eloigné Plan Clipping Droit

glViewport(GLint x, GLint y, GLsizei largeur, GLsizei hauteur)‏ (x,y)‏ largeur hauteur Transformations de clôture Transformations de cadrage : définition d'une zone dans la fenêtre de travail 111

Projections