OpenGL utility toolkit

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir GLUT.

GLUT (OpenGL Utility Toolkit) est une bibliothèque utilitaire dont les droits d'auteur sont détenus par Mark J. Kilgard, offrant un jeu de routines pour la gestion des fenêtres OpenGL et les interactions avec le système d'exploitation (gestion clavier, souris, etc.) indépendamment de celui-ci et du gestionnaire de fenêtres. Elle est essentiellement utilisée pour la création de programmes de démonstrations.

Présentation[modifier | modifier le code]

La bibliothèque GLUT a été écrite par Mark J. Kilgard, auteur de OpenGL Programming for the X Window System et de The CG Tutorial: The Definitive Guide to Programmable Real-Time Graphics, lorsqu'il travaillait pour Silicon Graphics.

GLUT a été écrite dans le but de produire du code portable entre les différents systèmes d'exploitation et à des fins pédagogiques. Sa simplicité permet de ne pas se préoccuper de la partie système, relativement complexe, et de se concentrer sur le fond du programme OpenGL lui-même. La création d'un programme avec GLUT ne prend que quelques lignes de code. Par ailleurs, elle respecte les conventions et la syntaxe d'OpenGL ; les noms de fonction commencent par le préfixe « glut » et les macros par « GLUT » (OpenGL utilise les préfixes « gl » et « GL »).

Outre l'encapsulation des fonctions de base d'un gestionnaire de fenêtre, GLUT propose des routines pour le dessin de quelques objets simples à trois dimensions comme la sphère, le cube, le cône, le tore ou encore la fameuse théière de Newell.

La bibliothèque GLUT n'est désormais plus en développement et s'est arrêtée à la version 3.7 en mai 1998. Les bibliothèques Open Source freeglut et OpenGLUT (qui dérive de freeglut) remplacent aujourd'hui GLUT. Elles réimplémentent l'API GLUT et y apportent quelques évolutions. La création de ces bibliothèques alternatives est due au flou concernant la licence de GLUT, qui d'après certains ne permettrait pas la redistribution de code modifié[1].

Exemple[modifier | modifier le code]

Fenetre glut.png


Voici un exemple de programme utilisant GLUT et OpenGL (compatible avec freeglut et OpenGLUT). Le résultat est une simple fenêtre avec un triangle multicolore au centre.


#include <GL/glut.h>
 
void
reshape (int w, int h)
{
  if (h == 0)
    h = 1;
 
  glViewport (0, 0, (GLsizei)w, (GLsizei)h);
 
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();
  gluPerspective (45.0, (GLfloat)w/(GLfloat)h, 0.1, 1000.0);
 
  glMatrixMode (GL_MODELVIEW);
  glLoadIdentity ();
 
  glutPostRedisplay ();
}
 
void
display ()
{
  /* efface les tampons de couleur et de profondeur ; réinitialise
     la matrice de modélisation-visualisation */
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glClearColor(0, 0, 0, 0);
  glLoadIdentity ();
 
  /* dessine un triangle dont les couleurs rouge, vert et bleu sont
     attribuées aux trois sommets */
  glTranslatef (0.0, 0.0, -5.0);
  glBegin (GL_TRIANGLES);
    glColor3f (1.0f, 0.0f, 0.0f);
    glVertex3f (-1.0f, -1.0f, 0.0f);
 
    glColor3f (0.0f, 1.0f, 0.0f);
    glVertex3f (1.0f, -1.0f, 0.0f);
 
    glColor3f (0.0f, 0.0f, 1.0f);
    glVertex3f (0.0f, 1.0f, 0.0f);
  glEnd ();
  glFlush();
}
 
int
main (int argc, char *argv[])
{
  /* initialisation de GLUT */
  glutInit (&argc, argv);
 
  /* création d'une fenêtre OpenGL RVBA avec en simple mémoire tampon
     avec un tampon de profondeur */
  glutInitDisplayMode (GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH);
  glutInitWindowSize (350, 300);
  glutCreateWindow ("Une fenêtre OpenGL avec GLUT");
 
  /* initialisation des fonctions callback appelées par glut 
     pour respectivement le redimensionnement de la fenêtre
     et le rendu de la scène */
  glutReshapeFunc (reshape);
  glutDisplayFunc (display);
 
  /* entre dans la boucle d'évènements */
  glutMainLoop ();
  return 0;
}

Notes et références[modifier | modifier le code]

  1. Voir page de discussion de l'article concernant les problèmes de licence de GLUT.

Voir aussi[modifier | modifier le code]

Liens internes[modifier | modifier le code]

Liens externes[modifier | modifier le code]