La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1."— Transcription de la présentation:

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

2 OpenGL 2

3 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

4 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

5 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

6 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

7 Installation freeglut VS lambda Récupérer Freeglut 2.4.0 sur http://freeglut.sourceforge.net/index.php#do wnload Pas admin : rep Include (.h) et Lib (.lib)‏ Outils  Options  Projets et solutions  Répertoire de VC++ 7

8 Installation freeglut VS lambda 8

9 Copier freeglut.dll dans Debug ou Release 9

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

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

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

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

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

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

16 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

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

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

19 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

20

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

22 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

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

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

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

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

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

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

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

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

31 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)‏ http://openglut.sourceforge.net/group__geometry.html 31

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

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

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

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

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

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

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

39 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

40 OpenGL : Dessin Un Point Un sommet Un Segment

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

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

43 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

44 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

45 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

46 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

47 OpenGL : Points GL_POINTS V0V0 V2V2 V4V4 V3V3 V1V1 47

48 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

49 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

50 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

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

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

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

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

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

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

57 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

58  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

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

60 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

61 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

62 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

63 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

64 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

65 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

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

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

68 Void refenetrer() ‏ { } refenetrer() 68

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

70 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

71 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

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

73  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

74 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

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

76 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

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

78 Transformations

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

80 Listes d'affichage

81 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

82 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

83 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

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

85 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

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

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

88 Interaction

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

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

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

92 Visualisation

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

94 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

95 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

96 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

97 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

98 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

99 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

100 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

101 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

102 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

103 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

104 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

105 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

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

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

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

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

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

111 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

112 Projections


Télécharger ppt "Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1."

Présentations similaires


Annonces Google