OpenGL Programmation - PowerPoint PPT Presentation

1 / 20
About This Presentation
Title:

OpenGL Programmation

Description:

Reproduction int grale ou partielle interdite sans autorisation crite de la ... Reproduction int grale ou partielle interdite sans autorisation crite de la ... – PowerPoint PPT presentation

Number of Views:29
Avg rating:3.0/5.0
Slides: 21
Provided by: cbNo
Category:

less

Transcript and Presenter's Notes

Title: OpenGL Programmation


1
OpenGLProgrammation
Institut de Formation
  • Sébastien Kuntz
  • Sebastien.kuntz_at_nowan.net

2
Programmation OpenGL
  • Plan
  • Glut
  • Glut Exemple
  • Glut Gerer les évenements
  • Dessiner en 3D
  • Animations Depth Buffer

1
OpenGL
3
Programmation OpenGL
  • Glut
  • Programmation simplifiée
  • Indépedant de l'OS
  • Ne fait pas officiellement partit d'OpenGL
  • Gestion des fenetres, clavier et souris
  • Quelques primitives Cube, sphere..

4
Programation OpenGL
  • Structure d'un programme Glut
  • Configurer et ouvrir une fenêtre
  • Initialiser OpenGL
  • Enregistrer les fonctions de traitement
    d'évènement (callbacks)
  • Fonction de rendu d'image
  • Fonction de gestion de fenetre
  • Interaction avec l'utilisateur clavier, souris,
    etc..
  • Entrer dans la boucle de traitement d'évènements

5
Programmation OpenGL
  • Glut Exemple
  • void main( int argc, char argv )
  • glutInitDisplayMode( GLUT_RGBGLUT_DOUBLE )
  • glutCreateWindow( OpenGL window )
  • initOpenGL()
  • glutDisplayFunc( display )
  • glutReshapeFunc( resize )
  • glutKeyboardFunc( key )
  • glutIdleFunc( idle )
  • glutMainLoop()
  • void initOpenGL( void )
  • glClearColor( 0.0, 0.0, 0.0, 1.0 )
  • glClearDepth( 1.0 )
  • glEnable( GL_LIGHT0 )
  • glEnable( GL_LIGHTING )
  • glEnable( GL_DEPTH_TEST )

6
Programmation OpenGL / Glut
  • Glut Gerer les évenements
  • La gestion se fait au moyen de callbacks
  • Ce sont des fonctions qui sont appelées quand
  • Une fenetre est redimensionnée ou redessinée
  • L'utilisateur agit sur le programme
  • On veut animer un ou des objets

7
Programmation OpenGL / Glut
  • On enregistre les callbacks
  • glutDisplayFunc()appelé quand des pixels d'une
    fenetre doivent etre rafraichis
  • glutReshapeFunc() appelé quand une fenetre
    change de taille
  • glutKeyboardFunc() appelé lors d'une frappe sur
    le clavier
  • glutMouseFunc() appelé lors d'un click sur la
    souris
  • glutMotionFunc() appelé lorsque l'utilisateur
    bouge la souris tout en appuyant sur un
    bouton
  • glutPassiveMouseFunc()appelé quand la souris
    bouge, quelque soit l'état des boutons
  • glutIdleFunc() appelé quand rien ne se passe.
    Très utile pour les animations.

8
Programmation OpenGL / Glut
  • Le callback de rendu
  • C'est là qu'on dessine en 3D
  • glutDisplayFunc( display )
  • void display( void )
  • glClear( GL_COLOR_BUFFER_BIT )
  • glBegin( GL_TRIANGLE_STRIP )
  • glVertex3fv( v0 )
  • glVertex3fv( v1 )
  • glVertex3fv( v2 )
  • glVertex3fv( v3 )
  • glEnd()
  • glutSwapBuffers()

9
Programmation OpenGL / Glut
  • Entrées au clavier
  • glutKeyboardFunc( keyboard )
  • void keyboard( char key, int x, int y )
  • switch( key )
  • case q
  • case Q
  • exit( EXIT_SUCCESS )
  • break
  • case r
  • case R
  • rotate GL_TRUE
  • break

10
Programmation OpenGL / Glut
  • Idle Callback
  • Que faire quand rien il n'y'a pas d'évènements?
  • Utilisé pour les animations ou les mises à jour
    fréquentes
  • glutIdleFunc( idle )
  • void idle( void )
  • t dt
  • glutPostRedisplay()

11
Programmation OpenGL / Glut
  • Animation et Depth Buffer
  • Comment utiliser le Double Buffering pour les
    animations ?
  • Comment utiliser le depth buffer pour éliminer
    les surfaces cachées

12
Programmation OpenGL / Glut
  • Double Buffering et les animations
  • Animation avec un seul buffer scintillement
  • Deux buffers identiques Front et Back
  • On rend l'image dans le Back Buffer, et on
    bascule l'affichage quand tout est prêt
  • Les deux buffers sont interchangés le Back
    Buffer est affiché, et le Front Buffer devient le
    nouveau Back Buffer

13
Programmation OpenGL / Glut
  • Comment utiliser le Double Buffering ?
  • 1/ Demander un double buffer
  • glutInitDisplayMode ( GLUT_RGB GLUT_DOUBLE )
  • 2/ Efface le buffer d'affichage
  • glClear ( GL_COLOR_BUFFER_BIT )
  • 3/ Rendre la scene
  • 4/ Demander le basculement des Front Back
    buffers
  • glutSwapBuffers()
  • Répèter 2-4 pour faire l'animation

14
Programmation OpenGL
  • Le Depth Buffer
  • Par défaut, OpenGL dessine les primitives dans
    l'ordre précisé
  • Le Depth Buffer stocke une information de
    profondeur pour chaque pixel
  • Pour chaque pixel d'une primitive à afficher

if ( pixel-gtz lt depthBuffer(x,y)-gtz )
depthBuffer(x,y)-gtz pixel-gtz colorBuffer(x,y
)-gtcolor pixel-gtcolor
15
Programmation OpenGL
  • Comment utiliser le Depth Buffer ?
  • 1/ Demander un depth buffer
  • glutInitDisplayMode( GLUT_RGBGLUT_DOUBLEGLUT_DEP
    TH )
  • 2/ Activer le test avec le depth buffer
  • glEnable( GL_DEPTH_TEST )
  • 3/ Effacer le buffer d'affichage et le depth
    buffer
  • glClear(GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT)
  • 4/ Rendre la scène
  • 5/ Echanger le Front et Back buffer

16
Programmation OpenGL
  • Un modèle de programme
  • void main( int argc, char argv )
  • glutInit( argc, argv )
  • glutInitDisplayMode( GLUT_RGB GLUT_DOUBLE
    GLUT_DEPTH )
  • glutCreateWindow( OpenGL )
  • init()
  • glutDisplayFunc( display )
  • glutMainLoop()
  • void init( void )
  • glClearColor( 0.0, 0.0, 1.0, 1.0 )
  • glMatrixMode(GL_PROJECTION)
  • glLoadIdentity()
  • gluPerspective(45.0f,(GLfloat)width/(GLfloat)heig
    ht,0.1f,100.0f)
  • glMatrixMode(GL_MODELVIEW)

17
Programmation OpenGL
  • (Suite du modèle)
  • void drawScene( void )
  • glClear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT
    )
  • glLoadIdentity()
  • glBegin( )
  • / appels à glColor() et glVertex() /
  • glEnd()
  • glutSwapBuffers()
  • glutPostRedisplay()

18
Programmation OpenGL
  • A vous de jouer!

19
TP 1
  • Exercice 1 Dessiner un triangle
  • Vous aurez besoin de
  • glBegin() / glEnd()
  • glVertex3f()
  • glColor3f()
  • glTranslatef()

20
TP 1
  • Exercice 2.1 Dessiner un cube
  • Vous aurez besoin de
  • glBegin() / glEnd()
  • glVertex3f()
  • glColor3f()
  • glTranslatef()
  • Exercice 2.2 Le faire tourner
  • Exercice 2.3 Rajouter des contrôles de caméra
Write a Comment
User Comments (0)
About PowerShow.com