Upload
others
View
19
Download
0
Embed Size (px)
Citation preview
Synthese d’image OpenGL
Plan
4 Synthese d’imagePresentationOpenGLDe la scene 3D a l’image 2DRendu
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 19 / 154
Synthese d’image OpenGL
OpenGL
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 20 / 154
Synthese d’image OpenGL
OpenGL
Librairie graphique developpee par SGI (Silicon Graphics) - 1992
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 20 / 154
Synthese d’image OpenGL
OpenGL
Librairie graphique developpee par SGI (Silicon Graphics) - 1992
Version actuelle 4.5site Web : www.opengl.org
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 20 / 154
Synthese d’image OpenGL
OpenGL
Librairie graphique developpee par SGI (Silicon Graphics) - 1992
Version actuelle 4.5site Web : www.opengl.org
Librairie de bas niveau dediee uniquement au graphique 3D
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 20 / 154
Synthese d’image OpenGL
OpenGL
Librairie graphique developpee par SGI (Silicon Graphics) - 1992
Version actuelle 4.5site Web : www.opengl.org
Librairie de bas niveau dediee uniquement au graphique 3D
Trace de pixels, segments. Remplissage de triangles.(possibilite de quadrangles et polygones convexes)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 20 / 154
Synthese d’image OpenGL
OpenGL
Librairie graphique developpee par SGI (Silicon Graphics) - 1992
Version actuelle 4.5site Web : www.opengl.org
Librairie de bas niveau dediee uniquement au graphique 3D
Trace de pixels, segments. Remplissage de triangles.(possibilite de quadrangles et polygones convexes)
Gestion des operations geometriques 3D et de projection.Definition de camera.
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 20 / 154
Synthese d’image OpenGL
OpenGL
Librairie graphique developpee par SGI (Silicon Graphics) - 1992
Version actuelle 4.5site Web : www.opengl.org
Librairie de bas niveau dediee uniquement au graphique 3D
Trace de pixels, segments. Remplissage de triangles.(possibilite de quadrangles et polygones convexes)
Gestion des operations geometriques 3D et de projection.Definition de camera.
Gestion des couleurs, transparence, lumiere, reflexions, textures
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 20 / 154
Synthese d’image OpenGL
GLU (OpenGL Utility Library)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 21 / 154
Synthese d’image OpenGL
GLU (OpenGL Utility Library)
Librairie englobant OpenGL ajoutant des fonctionnalites
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 21 / 154
Synthese d’image OpenGL
GLU (OpenGL Utility Library)
Librairie englobant OpenGL ajoutant des fonctionnalites
Gestion des matrices de projection et visualisation
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 21 / 154
Synthese d’image OpenGL
GLU (OpenGL Utility Library)
Librairie englobant OpenGL ajoutant des fonctionnalites
Gestion des matrices de projection et visualisation
Redimensionnement d’images
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 21 / 154
Synthese d’image OpenGL
GLU (OpenGL Utility Library)
Librairie englobant OpenGL ajoutant des fonctionnalites
Gestion des matrices de projection et visualisation
Redimensionnement d’images
Gestion d’objets quadriques (sphere, cylindre, disque)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 21 / 154
Synthese d’image OpenGL
GLU (OpenGL Utility Library)
Librairie englobant OpenGL ajoutant des fonctionnalites
Gestion des matrices de projection et visualisation
Redimensionnement d’images
Gestion d’objets quadriques (sphere, cylindre, disque)
Gestion des courbes et des surfaces de Bezier et NURBS
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 21 / 154
Synthese d’image OpenGL
GLU (OpenGL Utility Library)
Librairie englobant OpenGL ajoutant des fonctionnalites
Gestion des matrices de projection et visualisation
Redimensionnement d’images
Gestion d’objets quadriques (sphere, cylindre, disque)
Gestion des courbes et des surfaces de Bezier et NURBS
. . .
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 21 / 154
Synthese d’image OpenGL
GLUT (OpenGL Utility Toolkit)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 22 / 154
Synthese d’image OpenGL
GLUT (OpenGL Utility Toolkit)
Librairie englobant GLU offrant un jeu de procedures pour
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 22 / 154
Synthese d’image OpenGL
GLUT (OpenGL Utility Toolkit)
Librairie englobant GLU offrant un jeu de procedures pour
la gestion des fenetres OpenGL,
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 22 / 154
Synthese d’image OpenGL
GLUT (OpenGL Utility Toolkit)
Librairie englobant GLU offrant un jeu de procedures pour
la gestion des fenetres OpenGL,
les interactions avec le systeme d’exploitation(gestion clavier, souris, etc.)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 22 / 154
Synthese d’image OpenGL
GLUT (OpenGL Utility Toolkit)
Librairie englobant GLU offrant un jeu de procedures pour
la gestion des fenetres OpenGL,
les interactions avec le systeme d’exploitation(gestion clavier, souris, etc.)
independamment de celui-ci et du gestionnaire de fenetres.
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 22 / 154
Synthese d’image OpenGL
Un exemple simple
Trace d’un carre jaune dans une fenetre
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 23 / 154
Synthese d’image OpenGL
Un exemple simpleCode source (1/3)
// u t i l i s a t i o n de l a l i b r a i r i e GLUT#inc lude <GL/ g l u t . h>
// l e s o r d r e s g r a ph i q u e s// −−> d e s s i n de l a s c e n e 3Dvoid d e s s i n ( ){
g lMatr ixMode (GL MODELVIEW) ;g l L o a d I d e n t i t y ( ) ;g l C l e a r (GL COLOR BUFFER BIT ) ;g l C o l o r 3 f ( 1 . 0 , 1 . 0 , 0 . 0 ) ;g l R e c t f (−25.0 , −25.0 , 25 . 0 , 2 5 . 0 ) ;g l F l u s h ( ) ;
}
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 24 / 154
Synthese d’image OpenGL
Un exemple simpleCode source (2/3)
// p r i s e en compte d ’ un red imens ionnement de l a f e n e t r e// −−> d e f i n i t i o n de l a cameravoid red imens ionnement ( i n t w, i n t h ){
g lV i ewpo r t (0 , 0 , ( GL s i z e i ) w, ( GL s i z e i ) h ) ;g lMatr ixMode (GL PROJECTION) ; // r e p e r e de l a camerag l L o a d I d e n t i t y ( ) ;g lOrtho (−50.0 , 50 . 0 , −50.0 , 50 . 0 , −1.0 , 1 . 0 ) ;
}
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 25 / 154
Synthese d’image OpenGL
Un exemple simpleCode source (3/3)
// l a f o n c t i o n p r i n c i p a l ei n t main ( i n t argc , char ∗∗ argv ){
g l u t I n i t (&argc , a rgv ) ;g l u t I n i tW i ndowS i z e ( 5 0 0 , 5 0 0 ) ;g l u t I n i tD i s p l a yMod e (GLUT SINGLE | GLUT RGB) ;g lutCreateWindow ( ” s imp l e r e c t a n g l e ” ) ;g l u tD i s p l a yFun c ( d e s s i n ) ;g lu tReshapeFunc ( red imens ionnement ) ;g lutMainLoop ( ) ;return ( 0 ) ;
}
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 26 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 27 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple
Inclure les interfaces de la librairie GLUT (ainsi que GLU et Open GL)
#inc lude <GL/ g l u t . h>
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 28 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction dessin
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 29 / 154
Synthese d’image OpenGL
Programme avec GLUTLa fonction dessin
Appliquer les transformations geometriques au repere de la scene
g lMatr ixMode (GL MODELVIEW) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 30 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction dessin
Initialiser le systeme de transformations geometriques de GL MODELVIEW
g l L o a d I d e n t i t y ( ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 31 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction dessin
Effacer le buffer graphique de l’image
g l C l e a r (GL COLOR BUFFER BIT ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 32 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction dessin
Definir la couleur jauneet creer le carre de diagonale [(−25,−25) , (25, 25)]
g l C o l o r 3 f ( 1 . 0 , 1 . 0 , 0 . 0 ) ;g l R e c t f (−25.0 , −25.0 , 25 . 0 , 2 5 . 0 ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 33 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction dessin
Afficher l’image a l’ecran
g l F l u s h ( ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 34 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction redimensionnement
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 35 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction redimensionnement
Mettre en correspondant le buffer image avec la taille de la fenetre
g lV i ewpo r t (0 , 0 , ( GL s i z e i ) w, ( GL s i z e i ) h ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 36 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction redimensionnement
Appliquer les transformations geometriques au systeme de projection de lacamera
g lMatr ixMode (GL PROJECTION) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 37 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction redimensionnement
Initialiser le systeme de transformations geometriques de GL PROJECTION
g l L o a d I d e n t i t y ( ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 38 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction redimensionnement
Definir la camera avec projection orthographique et volume englobantcorrespondant
g lOrtho (−50.0 , 50 . 0 , −50.0 , 50 . 0 , −1.0 , 1 . 0 ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 39 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 40 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Initialiser la librairie GLUT avec les arguments du programme
g l u t I n i t (&argc , a rgv ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 41 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Definir une fenetre graphique de dimension 500 × 500avec un buffer graphique simple et en mode couleur RGBet la creer avec le titre simple rectangle
g l u t I n i tW i ndowS i z e ( 5 0 0 , 5 0 0 ) ;g l u t I n i tD i s p l a yMod e (GLUT SINGLE | GLUT RGB) ;g lutCreateWindow ( ” s imp l e r e c t a n g l e ” ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 42 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Associer a la fenetre precedemment creee,differents callbacks (fonctions de rappels)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 43 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Callback associe au dessin dans la fenetre graphique
g l u tD i s p l a yFun c ( d e s s i n ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 44 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Callback associe au (re)dimensionnement de la fenetre graphique
g lu tReshapeFunc ( red imens ionnement ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 45 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Il existe d’autres procedures de GLUT permettant de prendre en compted’evenements. Les principales sont :
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 46 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Il existe d’autres procedures de GLUT permettant de prendre en compted’evenements. Les principales sont :
glutKeyboardFunc : pour gerer les touches du clavier correspondanta des caracteres imprimables (lettres, chiffres, symboles, . . .)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 46 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Il existe d’autres procedures de GLUT permettant de prendre en compted’evenements. Les principales sont :
glutKeyboardFunc : pour gerer les touches du clavier correspondanta des caracteres imprimables (lettres, chiffres, symboles, . . .)
glutSpecialFunc : pour gerer les touches du clavier correspondant ades caracteres non imprimables (touches de fonction, fleches, . . .)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 46 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Il existe d’autres procedures de GLUT permettant de prendre en compted’evenements. Les principales sont :
glutKeyboardFunc : pour gerer les touches du clavier correspondanta des caracteres imprimables (lettres, chiffres, symboles, . . .)
glutSpecialFunc : pour gerer les touches du clavier correspondant ades caracteres non imprimables (touches de fonction, fleches, . . .)
glutMouseFunc : pour gerer les clicks souris
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 46 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Il existe d’autres procedures de GLUT permettant de prendre en compted’evenements. Les principales sont :
glutKeyboardFunc : pour gerer les touches du clavier correspondanta des caracteres imprimables (lettres, chiffres, symboles, . . .)
glutSpecialFunc : pour gerer les touches du clavier correspondant ades caracteres non imprimables (touches de fonction, fleches, . . .)
glutMouseFunc : pour gerer les clicks souris
glutMouseMotionFunc : pour gerer les deplacements de la souris
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 46 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Il existe d’autres procedures de GLUT permettant de prendre en compted’evenements. Les principales sont :
glutKeyboardFunc : pour gerer les touches du clavier correspondanta des caracteres imprimables (lettres, chiffres, symboles, . . .)
glutSpecialFunc : pour gerer les touches du clavier correspondant ades caracteres non imprimables (touches de fonction, fleches, . . .)
glutMouseFunc : pour gerer les clicks souris
glutMouseMotionFunc : pour gerer les deplacements de la souris
glutIdle : pour gerer l’absence d’evenement
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 46 / 154
Synthese d’image OpenGL
Programme avec GLUTDetail du programme-exemple - la fonction main
Appel de la fonction de boucle de gestion des evenements
g lutMainLoop ( ) ;
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 47 / 154
Synthese d’image OpenGL
Programme avec GLUTPrincipe de la boucle de gestion des evenements
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 48 / 154
Synthese d’image OpenGL
Programme avec GLUTPrincipe de la boucle de gestion des evenements
bouclesi la pile d’evenements est non vide alors
depiler l’evenenement e...
...sinon si un callback de type Idle est defini alors
executer le callback d’inactionfin si
fin boucle
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 48 / 154
Synthese d’image OpenGL
Programme avec GLUTPrincipe de la boucle de gestion des evenements
bouclesi la pile d’evenements est non vide alors
depiler l’evenenement e...si e de type MISE A JOUR FENETRE et
un callback de type Display est defini alorsexecuter le callback
fin si...
sinon si un callback de type Idle est defini alorsexecuter le callback d’inaction
fin si
fin boucle
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 48 / 154
Synthese d’image OpenGL
Programme avec GLUTPrincipe de la boucle de gestion des evenements
bouclesi la pile d’evenements est non vide alors
depiler l’evenenement e...si e de type REDIMENSIONNEMENT FENETRE et
un callback de type Reshape est defini alorsexecuter le callback
fin si...
sinon si un callback de type Idle est defini alorsexecuter le callback d’inaction
fin si
fin boucle
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 48 / 154
Synthese d’image OpenGL
Programme avec GLUTPrincipe de la boucle de gestion des evenements
bouclesi la pile d’evenements est non vide alors
depiler l’evenenement e...si e de type CLAVIER TOUCHE STANDARD et
un callback de type Keyboard est defini alorsexecuter le callback
fin si...
sinon si un callback de type Idle est defini alorsexecuter le callback d’inaction
fin si
fin boucle
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 48 / 154
Synthese d’image OpenGL
Programme avec GLUTLes callbacks
Procedure avec certains arguments suivant le type d’evenement associe.
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 49 / 154
Synthese d’image OpenGL
Programme avec GLUTLes callbacks
Procedure avec certains arguments suivant le type d’evenement associe.
Callback associe a la mise a jour de la fenetrevoid dessin()
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 49 / 154
Synthese d’image OpenGL
Programme avec GLUTLes callbacks
Procedure avec certains arguments suivant le type d’evenement associe.
Callback associe au (re)dimensionnement de la fenetrevoid redimensionnement(int largeur, int hauteur)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 49 / 154
Synthese d’image OpenGL
Programme avec GLUTLes callbacks
Procedure avec certains arguments suivant le type d’evenement associe.
Callback associe a la gestion des touches claviersvoid touche standard
(int code ASCII, int x souris, int y souris)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 49 / 154
Synthese d’image OpenGL
Programme avec GLUTLes callbacks
Procedure avec certains arguments suivant le type d’evenement associe.
Callback associe a la gestion des touches claviersvoid touche speciale
(int code touche, int x souris, int y souris)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 49 / 154
Synthese d’image OpenGL
Programme avec GLUTLes callbacks
Procedure avec certains arguments suivant le type d’evenement associe.
Callback associe a la gestion du click sourisvoid click souris
(int num bouton, int etat, int x souris, int y souris)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 49 / 154
Synthese d’image OpenGL
Programme avec GLUTLes callbacks
Procedure avec certains arguments suivant le type d’evenement associe.
Callback associe a la gestion du deplacement sourisvoid deplacement souris(int x souris, int y souris)
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 49 / 154
Synthese d’image OpenGL
Programme avec GLUTLes callbacks
Procedure avec certains arguments suivant le type d’evenement associe.
Callback d’inactionvoid inaction()
Nicolas SZAFRAN (UGA - UFR IM2AG) L3 Info - Image 2016/2017 49 / 154