modélisation géométrique et synthèse d’image sandrine lanquetin marc neveu 1

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

Upload: aymeric-bocquet

Post on 04-Apr-2015

113 views

Category:

Documents


3 download

TRANSCRIPT

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

Modélisation Géométrique et

Synthèse d’image

Sandrine LANQUETINMarc NEVEU

1

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

OpenGL

2

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

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

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

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

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

Installation freeglut VS admin

Récupérer Freeglut 2.4.0 sur http://freeglut.sourceforge.net/index.php#download

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

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

Installation freeglut VS admin

Récupérer Freeglut 2.4.0 sur http://freeglut.sourceforge.net/index.php#download

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

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

Installation freeglut VS lambda

Récupérer Freeglut 2.4.0 sur http://freeglut.sourceforge.net/index.php#download

Pas admin : rep Include (.h) et Lib (.lib)

Outils Options Projets et solutions Répertoire de VC++

7

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

Installation freeglut VS lambda

8

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

Installation freeglut VS lambda

Copier freeglut.dll dans Debug ou Release

9

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

Installation freeglut Linux

(Ubuntu) Admin

sudo apt-get install freeglut3 freeglut3-dev

Pas admin

10

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

Code C++

Inclure#include freeglut.h

#include GL/glu.h

ou #include GL/freeglut.h

11

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

Fonctions OpenGL

Primitives géométriques :

points, segments, polygones

préfixe : gl

glColor2f()

12

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

GLUT :OpenGL Utility Toolkit

Gestion de fenêtres

Gestion d ’événements (souris, clavier)

Affichage et mise à jour

Primitives : sphère, cylindre…

glutMouseFunc()

13

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

GLUOpenGL Utility Library

Transformations géométriques

Triangulation de polygones

Rendu des surfaces

gluLookAt()

14

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

GLUT : fenêtres

glutInit(int *arg, char **argv)

initialise GLUT

15

Ex :int main(int argc, char** argv){

glutInit(&argc,argv); …}

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

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

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

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êtreglutInitWindowPosition(200,200); //taille initiale de la fenêtreglutInitWindowSize(500,500) ;

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

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]) ;

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

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êtreglutCreateWindow("Robot") ; Init() ; //lancement de la boucle principaleglutMainLoop(); return (0);

}

main(int argc, char** argv)

19

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

GLUT : Actualisation Affichage

glutDisplayFunc(void *(func)(void))

événement le plus important, actualisation d ’affichageAppel de la fonction d’affichageToutes les routines nécessaires à la reconstitution de la scène doivent être dans la fonction d'affichage

Ex :glutDisplayFunc(affichage);

void affichage(){…}

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

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ée22

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

GLUT : Actualisation Affichage

void clavier(…){

switch(touche){case 27 :

exit(0) ;case ‘a’ : case ‘A’ :

…. glutPostRedisplay();

break;}

}

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

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){…}

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

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){…}

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

GLUT : évènements

Touches spéciales GLUT_KEY_UP GLUT_KEY_DOWN GLUT_KEY_LEFT GLUT_KEY_RIGHT

freeglut_std.h

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

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){…}

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

GLUT : évènements

Bouton GLUT_LEFT_BUTTON GLUT_RIGHT_BUTTON GLUT_MIDDLE_BUTTON

Etat GLUT_DOWN GLUT_UP

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

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){…}

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

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(){…}

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

GLUT : objets 3D

Wire mode fil de fer

Solid pleinvoid glutSolidCube (GLdouble width)

void glutWireCube (GLdouble width)

void glutSolidSphere (GLdouble radius, GLint slices, GLint stacks)

void glutWireSphere (GLdouble radius, GLint slices, GLint stacks)

http://openglut.sourceforge.net/group__geometry.html 31

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

glutSolidSphere (GLdouble r, GLint m, GLint p);

glutWireSphere (GLdouble r, GLint m, GLint p);

GLUT : sphère

32glutSolidSphere (2.0, 30, 20);

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

glutSolidCube (GLdouble taille);

glutWireCube (GLdouble taille);

GLUT : cube

33

glutSolidCube (1.5);

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

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

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

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

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

glutSolidTeapot (GLdouble taille);

glutWireTeapot (GLdouble taille);

GLUT : théière

36

glutSolidTeapot (2.0);

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

void glutSolidCylinder (GLdouble r, GLdouble h, GLint m, GLint p)

freeGLUT : cylindre

37

glutSolidCylinder (0.5, 1.0, 10, 5)

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

glutSolidDodecahedron ( );glutWireDodecahedron ( );

glutSolidOctahedron ( );glutWireOctahedron ( );

glutSolidTetraahedron ( );glutWireTetraahedron ( );

GLUT : objets 3D

38

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

OpenGL : Dessin

Effacer une fenêtre

Spécifier une couleurglColor3f(0.0,0.0,0.0,0.0); //NoirglColor3f(1.0,0.0,0.0,0.0); //Rouge

Achever un dessinglFlush();

glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT);

39

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

OpenGL : Dessin

Un Point Un sommet

Un sommet

Un Segment

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

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

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

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();

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

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

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

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

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

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

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

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

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

OpenGL : Points

GL_POINTS

V0

V2

V4

V3

V1

47

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

OpenGL : Lignes

GL_LINES

V0

V1

V2

V3

V4

V5

V6

V7

GL_LINE_STRIP

V0

V1

V2

V3

V4

GL_LINE_LOOP

V0

V1

V2

V3

V4

48

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

OpenGL : Triangles

GL_TRIANGLES

V0

V1

V2

V3

V4

V5

V6

V7

V8

49

GL_TRIANGLE_STRIP

V0

V1

V2

V3

V4

V5

V6

GL_TRIANGLE_FAN

V0

V1

V2

V3

V4

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

OpenGL : Quadrilatères

50

GL_QUADS

V0

V1

V2

V3

V4V

5

V6

V7

GL_QUAD_STRIP

V0

V1

V2

V3

V4

V5

V6

V7

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

OpenGL : Polygone

GL_POINTS

V0

V2

V4

V3

V1

GL_POLYGON

V0

V2

V4

V3

V1

51

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

glBegin() & glEnd()

V0V1

V2

V3

V4V5

V6

V7

GL_POINTS

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

glBegin() & glEnd()

V0V1

V2

V3

V4V5

V6

V7

GL_LINES

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

glBegin() & glEnd()

V0V1

V2

V3

V4V5

V6

V7

GL_LINE_LOOP

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

glBegin() & glEnd()

V0V1

V2

V3

V4V5

V6

V7

GL_TRIANGLES

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

glBegin() & glEnd()

V0V1

V2

V3

V4V5

V6

V7

GL_POLYGON

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

OpenGL : Dessins

Exemple#define PI 3.141592#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

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

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_LINEGL_FILL

GL_FRONT_AND_BACK58

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

Faces avant/arrière ?

Ordre trigo Face avant

Ordre “Clockwise” Face arrière

V0

V1

V2

V0

V2

V1

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

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

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

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

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

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); //NoirglColor3f(1.0,0.0,0.0,0.0); //RougeglColor3f(1.0,1.0,1.0,0.0); //Blanc

62

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

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

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

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 1.0

64

Contrôler la taille d’un point

Contrôler la largeur d’une ligne

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

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

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

Void Initialiser(){

glClearColor(0,0,0,0);glColor3f(1.0,2.0,3.0);

}

Initialiser()

66

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

Void afficher(){

glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON)

glVertex3f(10.0,12.0,15.0) ;….

glEnd();}

afficher()

67

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

Void refenetrer(){}

refenetrer()

68

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

Void clavier(){

switch(touche){case 27 :

exit(0) ;case ‘a’ : case ‘A’ :

…. }

}

clavier()

69

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

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

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

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

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

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

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

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 MatrixPush Matrix

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

Matrice Push / Pop

Pop MatrixPop Matrix

void glPopMatrix(void);

“retourne où tu étais”

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

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(); glPopMatrix(); . . .}

Matrice Push / Pop

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

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( … );

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

Transformations

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

Listes d'affichage

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

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

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

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

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

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

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

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 ();

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

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

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

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();}

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

Liste d'affichage : Exemple

void init(){ LeTriangle=glGenLists(1); glNewList(LeTriangle,GL_COMPILE);

triangle(); glEndList(); }

void affichage(){

glCallList(LeTriangle);glFlush();

}

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

Interaction

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

Clavier

Modifier des variables dans clavier() Mettre à jour avec

Void clavier(){

switch(touche){case 27 :

exit(0) ;case ‘a’ : case ‘A’ :

…glutPostRedisplay( );

break;

glutPostRedisplay( )

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

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 ;

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

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

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

Visualisation

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

Visualisation 3D avec OpenGL

Transformations de modélisation

Transformations de Projection Perspective Parallèle

Transformations de clôture93

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

Trois types de matrices prédéfinies:

Une seule matrice active à la fois

Matrices de modélisation-visualisation : GL_MODELVIEW Matrices de projection : GL_PROJECTIONMatrices de texture : GL_TEXTURE

glMatrixMode(mode);

Visualisation sous OpenGL

94

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

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

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

Visualisation sous OpenGL

Deux primitives importantes :

glLoadMatrix{fd}(M); M est un tableau de 16 valeurs : m1,m2,m3,.....m16 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

161284

151173

141062

13951

mmmm

mmmm

mmmm

mmmm

Mpers

96

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

Règle : Définir les transformations dans l'ordre inverseExemple : 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

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

•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 directegluLookAt

Transformations de modélisation

98

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

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

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

set_view_reference_point(x,y,z) permet de définir l’emplacement de la caméra (x,y,z)

set_view_plane_normal(nx,ny,nz) permet de définir la normale du plan de vision

set_view_up(hx,hy,hz) permet de définir le haut du plan de vision

2ème approche : changement de repère

100

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

gluLookAt( Oeilx, Oeily, Oeilz, PRx, PRy, PRz,

Vx, Vy, Vz );

Oeily

Oeilz

Oeilx PRy

Y

X

Z

V

3ème approche : gluLookAt

101

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

PR

z

x

yH

N = oeil - PR P = V NH = N P

V // Y

N PH P

3ème approche : gluLookAt

102

N

V

P

N H

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

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

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

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

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

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

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

glFrustum(); N'est pas trés intuitive :

gluPerspective(angle,aspect, proche, eloigne);

h h

waspect

w

Visualisation sous OpenGL

106

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

gluPerspective(angle_de_vue, rapport, zmin, zmax)

(zmin)

(zmax)

z

x

y

Transformations de projection : Perspective

107

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

Projection Perspective

Oeil Oeil

Plan Clipping Proche

Plan Clipping Proche

Plan Clipping Eloigné

Plan Clipping Eloigné

Plan Clipping Droit Plan Clipping Droit

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

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

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

Projection Orthographique

Oeil Oeil

Plan Clipping Proche

Plan Clipping Proche

Plan Clipping Eloigné

Plan Clipping Eloigné

Plan Clipping Droit Plan Clipping Droit

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

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

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

Projections