Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de...
Transcript of Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de...
![Page 1: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/1.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
Introduction à OpenGL
Sébastien [email protected]
Institut de Formation
![Page 2: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/2.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL
1. Buts1. De la formation
2. De la séance
2. Introduction1. Présentation
2. Origine
3. Composants
3. OpenGL
1. Bases
2. Machine à état
3. Transformations
![Page 3: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/3.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
Buts
Buts de la formation
– Comprendre ce qu’est OpenGL– Comprendre les mécanismes de rendu 3d– Savoir écrire un programme 3d– Acquérir des bases pour être autonome
![Page 4: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/4.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
Buts
Buts de la séance
– Comprendre ce qu’OpenGL peut faire pour vous– Connaître les différents composants– Comprendre comment OpenGL gère la 3d
![Page 5: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/5.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL : Introduction / Présentation OpenGL : API de programmation 2D et 3D
Standard dans l'industrieCrée par Silicon GraphicsDeveloppé par l’Architecture Review Board
PerformanceSouplessePortabilitéEvolutivité et Stabilité de l’APIRobustesse
![Page 6: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/6.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL : Introduction / Composants
• Primitives géometriques – Points, lignes et polygones
• Primitives d’image – Images
– Pixels
• Le rendu de l’image dépend de l’état :– de la couleur
– des materiaux
– des sources lumineuses
– etc..
![Page 7: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/7.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL : Introduction / Composants OpenGL crée les images Fenêtres et E/S sont spécifiques à un OS
GLUT ( GL Utility ) : simple et portable SDL : Genre de DirectX Portable Api Windows, Api X
OpenGL est bas niveau Haut niveau construit par dessus OpenSceneGraph, GLU, Performer ..
![Page 8: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/8.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Les bases
1. Les bases• Un exemple simple• Syntaxe des fonctions• Primitives• Passons à la 3ème Dimension !
![Page 9: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/9.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Un exemple simple
1. Un exemple simple : Afficher un carré :
#include <whateverYouNeed.h>main() { OpenAWindowPlease(); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); KeepTheWindowOnTheScreenForAWhile();}
(OpenG
L R
ed Book)
![Page 10: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/10.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Syntaxe
Syntaxe des fonctions
Draw() {// 3 flottants pour une couleurglColor3f(1.0, 0.0, 0.0);
float color_array[] = {1.0, 0.0, 0.0};
// un vecteur de 3 flottantsglColor3fv(color_array);
// 2 entiersglVertex2i( 1, 3 )
// 3 doubles glVertex3d( 0.3214,
0.4321, 0.0 );
}
Exemple :
![Page 11: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/11.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Syntaxe
• OpenGL est une machine à états– Choisir un état :
• glPointSize( size );
• glColor3f( 1.0, 0.0, 0.0 );
• glLight..
– Activer ou désactiver des propriétés :• glEnable( GL_LIGHTING );
• glDisable( GL_TEXTURE_2D );
• L'affichage des primitives dépend de l'état courant de l'ensemble des attributs
![Page 12: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/12.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Axes & Repères
• Repérage dans l’espace– OpenGL définit ses axes par rapport à l’écran
y
xz
![Page 13: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/13.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Primitives
OpenGL fournit des primitives d'affichageLignes :
PolygonesDoivent etre simples :
✗ Pas convexes✗ ‘Sans trous'✗ Sur un seul plan
![Page 14: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/14.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Primitives
![Page 15: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/15.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Primitives
Comment utiliser ces primitives ?– la plus simple : glBegin / glEnd
glBegin(GL_POLYGON); glVertex2f(0.0, 0.0); glVertex2f(0.0, 3.0); glVertex2f(3.0, 3.0); glVertex2f(4.0, 1.5); glVertex2f(3.0, 0.0);glEnd();
![Page 16: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/16.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Primitives
• Toutes les commandes ne sont pas valides dans glBegin/glEnd
• Commandes valides :– glVertex, glColor, glIndex*, glSecondaryColor,
glNormal, glMaterial, glFogCoord, glTexCoord, glMultiTexCoord, glEdgeFlag, glArrayElement, glEvalCoord, glEvalPoint, glCallList*
![Page 17: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/17.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Couleurs
• glColor( R,G,B {,A} )
glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 0.0, 0.0); //A
glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); //B
glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(1.0f, -1.0f, 0.0f); //CglEnd();
![Page 18: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/18.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / 3D• Passons à la 3ème dimension !
Un vertex, des vertices : un point en 3D
Vecteur Normal
Perpendiculaire à une surface
Définit son orientation
Une seule normale pour une surface plane
Surface quelconque: une normale par point
![Page 19: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/19.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases / Normales • Le rendu des lumières a besoin des normales
• Une normale par primitive ou par vertex : glNormal3f(x,y,z)
• Les normales DOIVENT etre unitaires
- Sans normales - - Avec normales -
![Page 20: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/20.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Bases
• Afficher un cubeglBegin(GL_QUADS);
Pour chaque face :
glColor3f(r,g,b);
glNormal3f( Nx, Ny, Nz );
glVertex3f( x1, y1, z1);
glVertex3f( x2, y2, z2);
glVertex3f( x3, y3, z3);
glVertex3f( x4, y4, z4);
Fin :
glEnd();
![Page 21: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/21.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGl / Bases / Display Lists• les Display Lists (D.L) permettent de stocker les commandes OpenGL pour de meilleures performances
GLuint list;void init( void ) {
list = glGenLists(1);glNewList( list, GL_COMPILE );glBegin( .. ); glVertex( .. ) ; ... glEnd();glEndList()
}
void display( void ) {glClear( GL_COLOR_BUFFER_BIT );glCallList( list );
}
– Une D.L. ne peut pas etre modifiée
– Possibilité d'encapsuler plusieurs niveaux de D.L.
![Page 22: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/22.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGl / Bases / Display Lists• Gluint glGenLists( Glsizei n )
– alloue n indices de D.L.
– retourne le nb d'indices crées
• glNewList( Gluint list, Glenum mode )
– précise le début d'une D.L.
– mode : GL_COMPILE, GL_COMPILE_AND_EXECUTE
• glEndList()
• glDeleteLists()
• glCallList( Gluint list )
![Page 23: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/23.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
![Page 24: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/24.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Plan– Fonctions de transformation– Exemple– Piles de matrices– Corrélation transformation / matrice– Comment afficher un point 3d sur un écran 2d ?– Opérations mathématiques– Opérations en OpenGL
![Page 25: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/25.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Fonctions de transformations• Déplacer un objet :
– glTranslate{fd}( x, y, z )
• Tourner un objet autour d’un axe– glRotate{fd}( angle, x, y, z )
• angle en degrés !
• Agrandir, retrécir ou inverser un objet:– glScale{fd}( x, y, z )
![Page 26: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/26.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Exemple
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslate(1.0,0.0,0.0);
DrawSphere();
glTranslate(1.0,0.0,0.0);
DrawCarre();
(0,0)(1,0) (2,0)
![Page 27: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/27.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Tout se passe comme si OpenGL change de repère• On dessine les objets par rapport à ce nouveau repère:
- effet d’une translation - - effet d’une rotation - - effet d’un redimensionnement -
![Page 28: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/28.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformation
• Corrélation transformations / matrices– Chaque transformation peut être représentée par une
matrice.
M translation
1 0 0 T x
0 1 0 Ty
0 0 1 T z
0 0 0 1
M rotation axe x
1 0 0 0
0 cos sin 0
0 sin cos 0
0 0 0 1
![Page 29: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/29.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations / Pile de matrices
• glPushMatrix, glPopMatrix– “sauvegarde” et “restitue” le repère courant
glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef( 1,0,0 );// sauvegarde la position actuelleglPushMatrix();drawCube();glTranslatef( 1,0,0 );drawSphere();// restitue la dernière//position sauvegardéeglPopMatrix();glTranslatef(0,1,0);drawTriangle();
• Sauvegarde dans une pile(0,0)
(1,0) (2,0)
(0,1)
![Page 30: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/30.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• HiérarchieglMatrixMode(GL_MODELVIEW);glLoadIdentity();glPushMatrix();glTranslate( x,y,z );drawCorps();
glMultMatrix( transf_bras );drawBras();
glMultMatrix( transf_avant_bras );
drawAvantBras();
glMultMatrix( transf_main );drawMain();glPopMatrix();
![Page 31: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/31.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Une matrice est associée au repère courant :– la matrice ModelView représente la transformation
du repère original vers le repère courant • Appliquer une transformation revient à multiplier la
matrice courante par la matrice de la transformation :// on va modifier la matrice du repèreglMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(1,0,0);glRotatef(90,1,0,0);
M ModelView=M Translation M Rotation
![Page 32: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/32.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• glTranslate, glRotate et glScale multiplient la matrice courante par la matrice associée à la transformation
• On peut créer une matrice à la main :– glLoadMatrixf(GLfloat* m);– glMultMatrixf(GLfloat* m);– !! Attention, les matrices sont stockées par colonne !!
• GLfloat m[16] = { a0, a1, … , a15 };
![Page 33: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/33.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Comment sont appliquées ces transformations?
• Calculer la position absolue d’un vertex :
P Absolu =M ModelView P Local
PTransformé =MTransformation P Local
![Page 34: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/34.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Exemple de transformations
– Translater un point :
– Translater puis tourner un point :
– Ce qui se traduit en OpenGl par :glMatrixMode(GL_MODELVIEW);glLoadIdentity();glRotatef(90,1,0,0);glTranslatef(1,0,0);draw_object();
P'=M Translation P
P'= M Rotation M Translation P
M Rotation M Translation P
![Page 35: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/35.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations• Deux façons de voir les transformations :
– Dans l’ordre indiqué, la multiplication des matrices modifie un repère local
• Les objets sont dessinés dans le repère local• Permet de mieux appréhender la hiérarchisation• Chaque matrice est une « matrice de changement de repère »
– Dans l’ordre opposé, la multiplication des matrices modifie la position, l’orientation ou la taille d’un objet
• Les objets sont dessinés dans un repère global fixe
• Le code est le même, il n’y’a que la façon de le voir
qui change
![Page 36: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/36.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Combiner transformations• Ordre des transformations
– Ordre critique !Multiplication de matrices non commutatif
glMatrixMode(GL_MODELVIEW);glLoadIdentity();/* translation */glTranslatef(1,0,0);/* rotation */glRotatef(45,0,0,1);draw_the_object();
glMatrixMode(GL_MODELVIEW);glLoadIdentity();/* rotation */glRotatef(45,0,0,1);/* translation */glTranslatef(1,0,0);draw_the_object();
![Page 37: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/37.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / 3d -> Ecran
Comment transformer un point en 3d pour l’afficher sur un écran 2d?
![Page 38: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/38.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Analogie avec un appareil photo– Positionner et orienter l’appareil
• Viewing transformation
– Placer les objets qu’on veut photographier• Modeling transformation
– Choisir une lentille et/ou ajuster le zoom• Projection transformation
– Choisir la taille de la photo développée• Viewport transformation
![Page 39: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/39.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
•Analogie avec un appareil photo
![Page 40: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/40.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Opérations mathématiques :
Chaque transformation correspond à un changement de repère
Repère de l’objet
Matrice de l’objet( model matrix )
Repère du monde
Matrice œil( View matrix )
Repère de l’oeil( caméra )
Matrice de Projection( projection matrix )
Repère de l’écran 2D
![Page 41: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/41.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Opérations en OpenGL :– La model matrix et la view matrix sont combinées:
• Bouger la camera est équivalent à bouger chaque objet dans l’autre sens
ModelView Matrix
– glMatrixMode permet de choisir la matrice courante• GL_PROJECTION, GL_MODELVIEW, GL_TEXTURE
![Page 42: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/42.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations / Projection
• La matrice de projection définit la forme du frustum• Perspective projection
– gluPerspective( FOVy, aspect, zNear, zFar )
– glFrustum( left, right, bottom, top, zNear, zFar )
• Orthographic parallel projection– glOrtho( left, right, bottom, top, zNear, zFar)
– gluOrtho2D( left, right, bottom, top )
![Page 43: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/43.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations• Préparer la scène :// On va choisir la matrice de projectionglMatrixMode( GL_PROJECTION ); // et on la spécifieglOrtho( left, right, bottom, top, near, far ); ouglFrustum( left, right, bottom, top, near, far );
// On informe OpenGL qu’on va modifier la modelview matrix// et on choisit une transformation pour la caméraglMatrixMode( GL_MODELVIEW );// On place la caméragluLookAt()
// On combine ici les transformations qui placent les objets dans le monde 3d// Pour combiner des transformations elles sont multipliéesglMultMatrixf( modelMatrix );
// Les points içi sont dans le repère de l’objet (état original)// (model space)
© Tim Hall
![Page 44: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/44.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Transformations
• Placer les objets// On va modifier la matrice ModelViewglMatrixMode( GL_MODELVIEW );
// On charge la transformation de la caméraglLoadMatrixf( viewingMatrix );
// On fait une itération sur les modèles.// Pour chaque modèle on sauve la matrice courante// et on y applique la matrice du modèle// On dessine le modèle et on restaure la matrice sauvéefor( model = firstModel; model != NULL; model = nextModel ) {
glPushMatrix( );// On combine la transformation de l’objet avec// la matrice de vueglMultMatrixf( model->modelMatrix );// On affiche l’objetDrawModel( model );// On restaure la matrice sauvéeglPopMatrix( );
}
![Page 45: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/45.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL
Questions? Commentaires?
![Page 46: Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.](https://reader035.fdocuments.net/reader035/viewer/2022062511/551d9d7d497959293b8b531e/html5/thumbnails/46.jpg)
Tous droits réservés. R
eproduction intégrale ou partielle interdite sans autorisation écrite de la part du titulaire des droits d’auteur.
Institut de Formation
OpenGL / Links
• Liens utiles :– Site officiel
• www.opengl.org
– Tutoriaux• Nehe.gamedev.net
– Références :• http://fly.cc.fer.hr/~unreal/theredbook/ : le Red Book • http://www.eecs.tulane.edu/www/graphics/doc/OpenG
L-Man-Pages/opengl_index_spec.html : le Blue Book