Création d'une fenêtre

 

Position et taille de la fenêtre

Avant d'afficher une fenêtre à l'écran, il peut être intéressant de déterminer sa position à l'écran ainsi que sa taille.

Il y a deux fonctions pour cela:

Pour positionner la fenêtre: void glutInitWindowPosition(int x,GLint y);

Avec x et y les coordonnées de la fenêtre en pixel

Pour définir la largeur et la hauteur: void glutInitWindowSize(int largeur,int hauteur);

Avec largeur et hauteur qui sont la largeur et la hauteur de la fenêtre.

Image non trouvée ! On indique la taille de la fenêtre. Du fait des bordures et barre de titre, ... , la taille de la zone cliente (càd la zone où vous allez effectivement dessiner) sera plus petites en taille ! Voici une première limite de GLUT, vous ne pouvez pas indiquer la taille de la zone cliente...

Image non trouvée !Attention, sous Unix, le serveur X Window n'est pas obligé d'obéir à votre requète de positionnement ou de dimensionnement. Il peut donc être judicieux après création de la fenêtre d'utiliser glutReshapeWindow pour être au moins certain de la dimension de votre fenêtre.

Image non trouvée ! Ces deux opérations ne seront effectivement effectuées que lorsque GLUT entrera dans la gestion de ses fenêtres via glutMainLoop() (vu plus loin).

 

Mode affichage

Enfin, nous allons indiquer le mode d'affichage d'un pixel: void glutInitDisplayMode(unsigned int mode);

Avec mode pouvant prendre une des valeurs suivantes (Utilisez | pour 'cumuler' les options du mode)

Valeur Désignation
GLUT_RGBA Valeur par défaut Rouge, vert, bleu et alpha
GLUT_RGB Alias GLUT_RGBA
GLUT_INDEX Mode index de couleur (si GLUT_RGBA est aussi indiqué, c'est GLUT_INDEX qui l'emporte)
GLUT_SINGLE Simple tampon, cette option permet d'afficher directement votre rendu dans la fenêtre, mais ne permet donc pas l'animation (pas de surface physique/logique car confondu). Valeur par défaut. Donc si ça scintille, utiliser l'option suivante GLUT_DOUBLE.
GLUT_DOUBLE Double tampon, cette option est appropriée pour l'animation ! (Voir surface logique et physique). Si GLUT_SINGLE est aussi spécifié, GLUT_DOUBLE l'emporte
GLUT_ACCUM Masque de bits pour choisir une fenêtre avec un tampon d'accumulation.
GLUT_DEPTH Masque de bits pour choisir une fenêtre avec un tampon de profondeur (Voir z-buffer sous OpenGL).
GLUT_STENCIL Masque de bits pour choisir une fenêtre avec un tampon de pochoir.
GLUT_STEREO Masque de bits pour choisir une fenêtre stéréo.
GLUT_MULTISAMPLE Pour l'antialiasing

 

Généralement, vous positionnerez mode au minimum à GLUT_RGBA | GLUT_DOUBLE (Pour Rouge, Vert, Bleu et Alpha et double buffer), voir vous ajouterez | GLUT_DEPTH pour gérer le z-buffer.

Il ne nous resta alors plus qu'à créer la fenêtre: int glutCreateWindow(char *name); avec name pour donner le nom de notre fenêtre.

Pour terminer, il faut rentrer dans une boucle de gestion de la fenêtre qui affichera entre autre la fenêtre à l'écran.

 

Enfin, création de la fenêtre

Et bien oui, il faut maintenant ordonner la création de la fenêtre !

Nous utiliserons la fonction glutCreateWindow() qui est très très simple d'utilisation:

int glutCreateWindow ( char * name );

Avec en entrée:

Name qui contient le titre de notre fenêtre.

 

En sortie

Handle GLUT de notre fenêtre (donc inexploitatble en dehors de GLUT).

Image non trouvée ! Cette opération ne sera effectuée que lorsque GLUT entrera dans la gestion de ses fenêtres via glutMainLoop() (vu plus loin).

 

 

Voir exemple GLUT de base:

Image non trouvée !

Image non trouvée !Si vous lancez votre code maintenant, vous obtiendrez une erreur fatale:

Dans ce code, j'utilise la fonction glutMainLoop(), que nous n'avons pas encore vu...

Cette fonction va permettre de gérer la fenêtre GLUT. Or, il est obligatoire depuis la version 3 de GLUT de préciser une procédure de gestion de l'affichage du contenu de la zone cliente. Ce que nous n'avons pas encore car pas encore vu !