Tutoriel 1 - Ouvrir une fenêtre
IntroductionCet article a l'objectif très simple de vous faire ouvrir une fenêtre permettant le rendu OpenGL et servant de support pour les tutoriels suivants. ContexteLa spécification d'OpenGL ne définit pas de fonctions particulières pour manipuler des fenêtres. Les systèmes modernes de fenêtrage supportant OpenGL incluent généralement un sous-système fournissant la liaison entre un contexte OpenGL et le système de fenêtrage. Dans le système X Window, cette interface est appelée GLX. Microsoft fournit WGL (prononcé Wigueul) pour Windows et MacOS a CGL. Travailler directement avec ces interfaces afin de créer une fenêtre pour gérer l'affichage est généralement un travail fastidieux, c'est pourquoi nous allons utiliser une bibliothèque de haut niveau qui fera abstraction de ces détails. La bibliothèque que nous allons utiliser ici est appelée « OpenGL utility library », ou GLUT.Elle fournit des fonctions simplifiées pour la gestion de fenêtres ainsi qu'une gestion évènementielle, une gestion des E/S et quelques autres services. De plus, GLUT est multiplateforme, ce qui facilite le portage. Les alternatives à GLUT sont, entre autres, SDL ou GLFW. Explication du code
glutInit(&argc, argv);
Cet appel initialise GLUT. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); Ici nous configurons quelques options de GLUT. glutInitWindowSize(1024, 768); Ces appels définissent les paramètres de la fenêtre et la créent.Vous avez aussi la possibilité de spécifier le titre de la fenêtre. glutDisplayFunc(RenderSceneCB); Comme nous travaillons dans un système fenêtré, les interactions avec le programme vont principalement se faire au travers de callbacks sur des évènements. GLUT prend en charge les interactions avec le système de fenêtres sous-jacent et nous fournit quelques callbacks. glClearColor(0.0f, 0.0f, 0.0f, 0.0f); C'est notre première rencontre avec le concept d'état en OpenGL. glutMainLoop(); Cet appel donne le contrôle à GLUT qui lance sa boucle interne. Dans cette boucle GLUT écoute les évènements du système de fenêtres et les passe aux callbacks que nous avons définies. Dans notre cas, GLUT va seulement appeler la fonction enregistrée comme callback d'affichage (RenderSceneCB) pour nous donner l'occasion de dessiner une image. glClear(GL_COLOR_BUFFER_BIT); La seule chose que nous faisons dans notre fonction de rendu est de vider le tampon d'image (en utilisant la couleur spécifiée au-dessus - essayez de la changer). Le second appel dit à GLUT d'échanger les rôles du « backbuffer » et du « frontbuffer ». Dans le prochain appel du callback de rendu, nous rendrons dans l'actuel « frontbuffer » et l'actuel « backbuffer » sera affiché. RemerciementsMerci à Etay Meiri de me permettre de traduire ses tutoriels. |