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

1 Transformations de visualisation en OpenGL. 2 Dans OpenGL, les matrices MODEL_VIEW et PROJECTION sont combinées pour constituer la matrice de transformation.

Présentations similaires


Présentation au sujet: "1 Transformations de visualisation en OpenGL. 2 Dans OpenGL, les matrices MODEL_VIEW et PROJECTION sont combinées pour constituer la matrice de transformation."— Transcription de la présentation:

1 1 Transformations de visualisation en OpenGL

2 2 Dans OpenGL, les matrices MODEL_VIEW et PROJECTION sont combinées pour constituer la matrice de transformation qui sapplique aux entités géométriques. La matrice MODEL_VIEW place les objets à lendroit approprié dans lespace et permet de passer du repère de lobjet (utilisé lors de la modélisation) au cadre de la caméra. Les objets sont définis dans un repère lors de la modélisation qui est indépendant du processus de visualisation. La matrice PROJECTION permet de spécifier la forme et lorientation du volume de visualisation. Dans sa position par défaut, la caméra placée à lorigine est orientée dans la direction z négative. Ainsi, si la matrice MODEL_VIEW est lidentité, le repère de la caméra et celui des objets sont identiques.

3 3 Il faudra alors positionner correctement la caméra ou placer les objets de telle façon quils soient observés comme désiré. Imaginons une scène où plusieurs objets ont été définis initialement, avec comme matrice MODEL_VIEW, lidentité. Des changements ultérieurs à MODEL_VIEW déplacent le système de coordonnées du monde par rapport à celui de la caméra. Les objets définis par la suite seront observés différemment car ceux-ci seront définis à partir du nouveau système de référence. Changement du repère du monde Dans bien des applications, les objets sont placés autour de lorigine; par conséquent, lemplacement par défaut de la caméra ne nous permettra pas toujours dobserver tous les objets de la scène ou de les observer sous langle désiré.

4 4 Un sommet q défini après avoir modifié la matrice MODEL_VIEW est à q dans le repère de lobjet et à Cq dans le repère de la caméra. Cela est connu par OpenGL. Vu autrement, le repère de la caméra na pas changé et la transformation désignée par MODEL_VIEW est appliquée aux entités géométriques définies dans la scène. Peu importe linterprétation que lon en donne, il faut toutefois porter une attention particulière au moment où les objets sont définis par rapport aux changements effectués à la matrice MODEL_VIEW. À nimporte quel moment, la matrice MODEL_VIEW fait le lien entre le repère des objets de la scène et le repère de la caméra. Changement du repère du monde Considérons la situation suivante : Au départ, nous avons la représentation initiale où un sommet p possède la même représentation dans les 2 repères, celui de lobjet et celui de la caméra. Par la suite, la matrice MODEL_VIEW devient C. Nous avons donc changé le repère des objets.

5 5 Changement du repère de la caméra Il sagit de déplacer la caméra p/r au système de coordonnées du monde. 1er approche Il faut déplacer le repère du monde relativement à celui de la caméra cest-à-dire, lobservateur domine, les objets de la scène sont orientés, puis déplacés à lendroit désiré pour observation. En génération dimages, les objets sont définis dans un repère fixe et cest à lobservateur de se déplacer à la bonne position pour observer ce quil désire. 2ième approche i)Fixer lemplacement de la caméra (VRP): set_view_reference_point(x, y, z); ii)Désignation de la normale n au plan de vue : set_view_plane_normal(nx, ny, nz); iii)Désignation du vecteur view-up:set_view_up(ux, uy, uz);

6 6 Changement du repère de la caméra 3ième approche La fonction Look-at Une méthode plus directe que la précédente est tout à fait appropriée. Lemplacement de la caméra est la position de lobservateur (Ox, Oy, Oz). En considérant un centre dintérêt (Cx, Cy, Cz), cela détermine VPN et VRP. Il reste alors à fixer le vecteur « view-up ». La fonction suivante peut être appelée : gluLookAt(Ox, Oy, Oz, Cx, Cy, Cz, VUPx, VUPy, VUPz); La fonction gluLookAt permet de passer du système de coordonnées du monde au système de coordonnées de lobservateur (caméra). Exemple : GLMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(Ox, Oy, Oz, Cx, Cy, Cz, VUPx, VUPy, VUPz);

7 7 Changement du repère de la caméra Exemple : gluLookAt(4.0, 2.0, 1.0, 2.0, 4.0, -3.0, 2.0, 2.0, -1.0); observateurcentre dintérêtview-up

8 8 Exemple : #include static GLint w = 500, h = 500; static GLfloat observateur[] = {-1.0, 0.0, 0.0}; static GLfloat interet[] = {0.0, 0.0, 0.0}; static GLfloat vup[] = {0.0, 1.0, 0.0}; void affichage( void ) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(observateur[0], observateur[1], observateur[2], interet[0],interet[1],interet[2], vup[0],vup[1],vup[2]); glutSolidTeapot(0.3); glFlush(); }

9 9 Exemple (suite et fin) : void cles(unsigned char cle, int x, int y) { // Utiliser les clés x, X, y, Y, z et Z pour déplacer l'observateur. // Utiliser les clés i, I, j, J, k et K pour déplacer le centre d'intérêt. // Utiliser les clés u, U, v, V, w et W pour déplacer le vecteur view-up. if(cle == 'x') observateur[0]-= 1.0; if(cle == 'X') observateur[0]+= 1.0; if(cle == 'y') observateur[1]-= 1.0; if(cle == 'Y') observateur[1]+= 1.0; if(cle == 'z') observateur[2]-= 1.0; if(cle == 'Z') observateur[2]+= 1.0; if(cle == 'i') interet[0]-= 1.0;if(cle == 'I') interet[0]+= 1.0; if(cle == 'j') interet[1]-= 1.0;if(cle == 'J') interet[1]+= 1.0; if(cle == 'k') interet[2]-= 1.0;if(cle == 'K') interet[2]+= 1.0; if(cle == 'u') vup[0]-= 1.0;if(cle == 'U') vup[0]+= 1.0; if(cle == 'v') vup[1]-= 1.0;if(cle == 'V') vup[1]+= 1.0; if(cle == 'w') vup[2]-= 1.0;if(cle == 'W') vup[2]+= 1.0; affichage(); }

10 10 Définition du volume de visualisation Nous avons 2 fonctions en OpenGL pour définir une vision en perspective : (i) glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(gauche, droite, bas, haut, proche, eloigne); Les 2 plans de découpage sont parallèles. Les distances proche et eloigne doivent être positives; elles représentent la distance du centre de projection à ces plans. Le volume de visualisation détermine la manière dont un objet est projeté à lécran et définit les objets ou les parties dobjets qui seront découpés. Il sagit de calculer la matrice de projection GL_PROJECTION.

11 11 Projections en perspective dans OpenGL (ii) Dans plusieurs applications, il est plus naturel dexiger langle de vue. La fonction OpenGL gluPerspective(angle_de_vue y, largeur_sur_hauteur, zmin, zmax) oùangle_de_vue y :désigne langle du champ de vision dans le plan yz entre 0.0 et 180.0, largeur_sur_hauteur désigne le rapport largeur / hauteur de la région considérée du plan de vue, zmin et zmax :représentent la distance entre le centre de projection et les 2 plans de découpage, le long de laxe des z négatif. Ces distances doivent toujours être positives. z x y largeur hauteur angle de vue y

12 12 Projections en parallèle dans OpenGL La seule fonction disponible dans OpenGL est celle qui permet la projection parallèle orthographique : glOrtho(xmin, xmax, ymin, ymax, zmin, zmax); ces paramètres sont les mêmes que ceux de glFrustum et sont de type GLdouble. (xmax, ymax, zmax) (xmin, ymin, zmin) Volume de vue Si elle nest pas associée à dautres transformations, la direction de projection est | | à laxe des z et le point de vue pointe vers laxe des z négatif.


Télécharger ppt "1 Transformations de visualisation en OpenGL. 2 Dans OpenGL, les matrices MODEL_VIEW et PROJECTION sont combinées pour constituer la matrice de transformation."

Présentations similaires


Annonces Google