Transformations de visualisation en OpenGL

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

Les PREF, DEC, et jauges outils
( Application Programming Interface)
Chaîne de Synthèse Réel Modélisation Rendu Image Fichier Scène
Symétrie, groupes ponctuels et groupes spatiaux
Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.
CHAPITRE II Caractéristiques géométriques des sections planes
3. Analyse et estimation du mouvement dans la vidéo
REPÉRAGE DANS L’ESPACE
Diamètre apparent & grossissement G
2. Repérage et coordonnées
Réalisation dun travail concret avec des matrices Afficher un objet 3D sur une surface Lui appliqué des transformations Le voir se transformer suivant.
Géométrie vectorielle
Cours Électricité – Électronique MIP_B
IFT3730: Infographie 3D Transformations Géométriques
1 Transformations affines But: fixer le positionnement et lorientation des objets de la scène.
P.T.S.I. Cinématique du solide F. Socheleau.
SUJETS SPÉCIAUX EN INFORMATIQUE I PIF Contenu du cours Transformations géométriques des objets –Transformations 2D –Transformations entre systèmes.
Gestion des événements liés à la fenêtre et aux périphériques dentrée.
CONSTRUCTION MECANIQUE DECOUVERTE de SOLIDWORKS
1.3 COORDONNÉES DES POINTS
La droite dans R2 Montage préparé par : André Ross
Les Angles Leçon 4 Objectifs : - Reproduire un angle.
Mais en mathématiques, qu'est ce qu'une ligne de niveau?
Modélisation géométrique à l’aide d’un maillage
Chapitre 4: Objets et Images
Courbes de Bézier.
Visualisation de surfaces décrites analytiquement
OBJETS ÉLÉMENTAIRES DANS L’ESPACE À TROIS DIMENSIONS
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
SUJETS SPÉCIAUX EN INFORMATIQUE I
EXERCICE II : Le rugby, sport de contact et d’Évitement (8 points)
Système de coordonnées
Découpage des objets selon le volume de vue
Techniques de points de contrôle en OpenGL : formes de Bézier
Représentation et traitement des images en OpenGL
IFT3730: Infographie Projections
PROTOTYPE D’UN PROGRAMME ÉCRIT EN C++ BASÉ SUR OPENGL
Éclairage en OpenGL.
Modélisation géométrique de base
Transformations visuelles des objets
Géométrie épipolaire (deux vues)
Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1.
Electrostatique- Chap.2 CHAPITRE 2 CHAMP ELECTROSTATIQUE Objectif :
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
GRAPHISME PAR ORDINATEUR
Tutorat en bio-informatique
Présentation générale
L’étude du mouvement.
Chapitre VIII Découpage d’une scène selon une fenêtre donnée.
CHAPITRE III Calcul vectoriel
OUTILS MATHEMATIQUES POUR LES SII
Chapitre 3: Translation et Vecteurs
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.
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 8 Rendu de surfaces –Modèles de rendu de surfaces –Illumination de la scène –Sources lumineuses –Composante.
GRAPHISME PAR ORDINATEUR
Application des Lois de Newton aux mouvements
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 3 Introduction à XNA –Modélisation d’objets 3D –Transformations 3D: matrices, systèmes de coordonnées.
Introduction à la programmation graphique
Éléments cinétiques des système matériels
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
OBJETS ÉLÉMENTAIRES DANS L’ESPACE À TROIS DIMENSIONS
Régression linéaire (STT-2400)
Introduction aux technologies du jeux-vidéo Steve Gury
Premières notions de la 3D
GEOMETRIE VECTORIELLE
Les vues O.Legrand G.Seront. Les vues Dans Android, une ihm est composée de vues. Ces vues.
Transcription de la présentation:

Transformations de visualisation en OpenGL

Dans OpenGL, les matrices MODEL_VIEW et PROJECTION sont combinées pour constituer la matrice de transformation qui s’applique aux entités géométriques. La matrice MODEL_VIEW place les objets à l’endroit approprié dans l’espace et permet de passer du repère de l’objet (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 l’orientation du volume de visualisation. Dans sa position par défaut, la caméra placée à l’origine est orientée dans la direction z négative. Ainsi, si la matrice MODEL_VIEW est l’identité, le repère de la caméra et celui des objets sont identiques.

Changement du repère du monde Dans bien des applications, les objets sont placés autour de l’origine; par conséquent, l’emplacement par défaut de la caméra ne nous permettra pas toujours d’observer tous les objets de la scène ou de les observer sous l’angle désiré. Il faudra alors positionner correctement la caméra ou placer les objets de telle façon qu’ils soient observés comme désiré. Imaginons une scène où plusieurs objets ont été définis initialement, avec comme matrice MODEL_VIEW, l’identité. 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 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 l’objet et celui de la caméra. Par la suite, la matrice MODEL_VIEW devient C. Nous avons donc changé le repère des objets. Un sommet q défini après avoir modifié la matrice MODEL_VIEW est à q dans le repère de l’objet et à Cq dans le repère de la caméra. Cela est connu par OpenGL. Vu autrement, le repère de la caméra n’a 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 l’interprétation que l’on 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. À n’importe 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 de la caméra Il s’agit 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 c’est-à-dire, l’observateur domine, les objets de la scène sont orientés, puis déplacés à l’endroit désiré pour observation. En génération d’images, les objets sont définis dans un repère fixe et c’est à l’observateur de se déplacer à la bonne position pour observer ce qu’il désire. 2ième approche Fixer l’emplacement de la caméra (VRP): set_view_reference_point(x, y, z); 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);

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. L’emplacement de la caméra est la position de l’observateur (Ox, Oy, Oz). En considérant un centre d’inté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 l’observateur (caméra). Exemple : GLMatrixMode(GL_MODELVIEW); glLoadIdentity();

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); observateur centre d’intérêt view-up

Exemple : #include <windows.h> #include <GL/glut.h> #include <GL/glaux.h> 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(); }

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

Définition du volume de visualisation Le volume de visualisation détermine la manière dont un objet est projeté à l’écran et définit les objets ou les parties d’objets qui seront découpés. Il s’agit de calculer la matrice de projection GL_PROJECTION. 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.

Projections en perspective dans OpenGL (ii)  Dans plusieurs applications, il est plus naturel d’exiger l’angle de vue. La fonction OpenGL gluPerspective(angle_de_vuey, largeur_sur_hauteur, zmin, zmax) où angle_de_vuey : désigne l’angle 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 l’axe des z négatif. Ces distances doivent toujours être positives. y largeur angle de vuey hauteur x z

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. Volume de vue (xmax, ymax, zmax) (xmin, ymin, zmin) Si elle n’est pas associée à d’autres transformations, la direction de projection est | | à l’axe des z et le point de vue pointe vers l’axe des z négatif.