GLUT

, par MiKaël Navarro

Bien que cette librairie présente des imperfections notables en ce qui concerne la gestion des évènements clavier et souris, on utilisera GLUT pour gérer l’interface avec le système d’exploitation, de façon à ce que l’ensemble des programmes soient portables sous tous les systèmes.

GLUT (GL Utility Toolkit) fournit une interface simple, portable et indépendante du système d’exploitation utilisé pour la réalisation d’interface et d’intéraction avec le matériel du type souris ou clavier. GLUT s’occupe de gérer les évènements qui peuvent survenir ainsi que la gestion d’une fenêtre d’affichage (rafraichissement, etc...).

D’autres Toolkit sont également disponibles tels que aux, GLx (pour sytèmes Xwindows) ou Open Inventor qui est beaucoup plus évolué.

Dans un premier temps voyons l’ensemble des librairies nécessaires :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> /* for cos(), sin(), and sqrt() */
#include <GL/glu.h> /* OpenGL Utility Library */
#include <GL/glut.h> /* OpenGL Utility Toolkit header */

On notera ici que que la librairie GL/gl.h est inclue implicitement par GL/glu.h et GL/glut.h.

La structure d’un programme OpenGL écrit avec GLUT se presente à peu près toujours sous la même forme, la définition d’un ensemble de variables globales définissant les paramètres OpenGL et GLUT et un ensemble de fonctions standard :

static void draw(void); /* draw stuff here */
static void display(void); /* redraw */
static void init(); /* initialise OpenGL state machine */
static void menu(int value); /* menu managment */
static void mouse(int button, int state, int x, int y); /* mouse callback registration */
static void motion(int x, int y);
static void keys(unsigned char c, int x, int y); /* key callback registration */
static void specialkeys(int c, int x, int y);
static void idle(void); /* animation */
static void timer(void);
static void reshape(GLsizei w, GLsizei h); /* window management */
static void entry(int state);
static void visibility(int state);