Premier programme Open GL

Nous allons maintenant écrire un petit programme en C utilisant la librairie Open GL.
Il est nécessaire pour cela d’installer quelques paquets.

apt-get install libglut3-dev => librairie GLUT (GL Utility Toolkit) qui permet entre autres d’intéragir avec la souris, le clavier, etc… Ceci installera par dépendences la librairie OpenGL.
apt-get install manpages-fr-dev => Documentation de la glibc en français


Nous utiliserons comme exemple le fichier test1.c qui est un programme en openGL.
Lorsque nous ouvrons le fichier dans vim, il n’y a par défaut aucune coloration syntaxique.
Fort heureusement, la commande :syntax enable nous facilite bien les choses car elle détecte le language utilisé. Pour activer cette option systématiquement, il suffit d’ajouter la commande dans le fichier .vimrc de votre répertoire $HOME.

Nous obtenons ainsi l’aperçu suivant :

Coloration syntaxique

On peut observer les fichiers d’entêtes (fichiers .h) OpenGL inclus au début du fichier.

Passons maintenant à la compilation.
Pour cela, tapez la commande :
gcc test1.c  -lGL -lglut -lGLU  -lX11 -lm

Les options -l spécifient les librairies statiques à charger pour la compilation.

Sur certains systèmes Linux, il vous faudra peut-être préciser les 2 options suivantes :
-I/usr/X11R6/include
-L/usr/X11R6/lib

-I indique le répertoire des fichiers d’entête (*.h)
-L indique le répertoire des librairies (lib*.a)

A noter que sous Debian ces 2 options sont inutiles car les librairies X sont dans /usr/lib et les entêtes dans /usr/include.

Ceci nous produit donc le fichier a.out que nous pouvons exécuter :
Premier programme OpenGL !

Vous aurez remarqué de suite que l’exécution est trop rapide. Nous pouvons par conséquent ajouter un sleep qui permettra de temporiser à chaque cycle d’affichage.

En tapant man 3 sleep, vous tombez sur la doc de développement de la glibc.

Manpage de sleep()

En regardant la signature de la fonction, on s’aperçoit que le temps est exprimé en secondes entières (unsigned int).
Fort heureusement, il existe une autre fonction usleep qui elle permet de faire en sleep mais en microsecondes.
Il faudra donc comme indiqué dans la manpage ajouter l’entête unistd.h.

Après avoir ajouté l’entête unistd.h en début du fichier test1.c, vous devrez ajouter l’appel à usleep au sein de la fonction myIdle().

void myIdle()
{
  usleep(10000);
  myAngle+=0.5;
  myAngle2+=0.25;
  glutPostRedisplay();
}

Laisser un commentaire