15/09/09 06:03

bg150.jpg (723 octets)

L'Auxiliary library:
Aux

INITIALISATION
ET OUVERTURE
FENÊTRE

AFFICHAGE

TACHE DE FOND

MODIFICATION
FENÊTRE

CLAVIER

SOURIS

DESSIN
D'OBJETS

 

RETOUR

 

Dernière modification
15/09/09 06:03:47

Facilite la programmation d'OpenGL aux moyen d'un jeu de fonctions d'interfaçage vis à vis du système d'exploitation de l'ordinateur (Interface graphique).

Initialisation et ouverture d’une fenêtre

Définit le type de fenêtre à ouvrir (AUX_RGBA ou AUX_INDEX ; AUX_SINGLE ou AUX_DOUBLE ; AUX_DEPTH, AUX_STENCIL ou AUX_ACCUM).

Définit la position et la taille de la fenêtre à ouvrir.

Ouvre une fenêtre de titre title avec les paramètres prédéfinis.

Exemple

#include <GL/gl.h>
#include "glaux.h"

void main(void) {
  auxInitDisplayMode(AUX_SINGLE|
                     AUX_RGBA) ;
  auxInitPosition(0,0,500,500) ;
  auxInitWindow("Carré blanc") ;

  glClearColor(0.0F,0.0F,0.0F,0.0F) ;
  glClear(GL_COLOR_BUFFER_BIT) ;
  glColor3f(1.0F,1.0F,1.0F) ;
  glOrtho(-1.0,1.0,-1.0,1.0,
          -1.0,1.0);
  glBegin(GL_POLYGON) ;
  glVertex2f(-0.5F,-0.5F) ;
  glVertex2f(-0.5F,0.5F) ;
  glVertex2f(0.5F,0.5F) ;
  glVertex2f(0.5F,-0.5F) ;
  glEnd() ;
  glFlush() ;
  sleep(10) ;
}

Affichage principal

Définit la fonction à exécuter quand la fenêtre d'affichage est créée, déplacée, agrandie, réduite ou réactivée ou si un événement intervient entraînant la réalisation d'un rafraîchissement de l'affichage.

La fonction display ne doit assurer l'affichage que d'une seule image car comme son nom l'indique, auxMainLoop est constituée d'une boucle d'affichage englobant les appels à display.
La fonction auxMainLoop est bloquante car la boucle d'affichage est infinie. Elle gère les événements liés au fonctionnement du programme et exécute les fonctions associées par le programmeur à ces événements -> simili programmation événementielle.

La fonction display ne comporte pas de paramètre.

Squelette d'un programme

#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include "aux.h"

void display(void)
{ /* dessin de la scène */
}


void myinit(void)
{ /* initialisation du programme */
}

int main(int argc,char** argv) {
  auxInitDisplayMode(AUX_SINGLE|
                     AUX_RGB);
  auxInitPosition(0,0,500,500);
  auxInitWindow(argv[0]);
  myinit();
  auxMainLoop(display);
}

Exemple

Processus en tâche de fond

Définit la fonction à exécuter s'il n'y a pas d'événement en attente et donc que l'application, n'ayant rien à réaliser, est disponible pour la réalisation de tâches non prioritaire -> exécution d'actions en tâche de fond.

Cette fonction est fréquemment utilisée pour programmer des animations. Elle est généralement dédiée à la modification de variables globales employées dans la fonction display et ne contient donc habituellement pas d'appel de fonction OpenGL.

La fonction idle ne comporte pas de paramètre.

Squelette

#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include "aux.h"

void display(void)
{ /* dessin de la scène */
}

void myinit(void)
{ /* initialisation du programme */
}

void idle(void)
{ /* Tâche de fond */
}


int main(int argc,char** argv) {
  auxInitDisplayMode(AUX_SINGLE|
                     AUX_RGB);
  auxInitPosition(0,0,500,500);
  auxInitWindow(argv[0]);
  myinit();
  auxIdleFunc(idle);
  auxMainLoop(display);
}

Exemple

Gestion des événements fenêtre, clavier et souris

Définit la fonction à réaliser avant le rafraîchissement d’une fenêtre dont la taille est modifiée.

Cette fonction est habituellement employée (1) pour signifier la zone de la fenêtre dans laquelle l'image est affichée, (2) pour définir le mode de représentation (projection parallèle ou en perspective) et ses paramètres, (3) pour amorcer le dessin de la scène.

La fonction reshape comporte deux paramètres entiers qui autorisent la récupération de la nouvelle dimension de la fenêtre d'affichage.

Squelette

#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include "aux.h"

void display(void)
{ /* dessin de la scène */
}

void myinit(void)
{ /* initialisation du programme */
}

void myReshape(int w, int h)
{ /* opérations de rafraîchissement */
}


int main(int argc,char** argv) {
  auxInitDisplayMode(AUX_SINGLE|
                     AUX_RGB);
  auxInitPosition(0,0,500,500);
  auxInitWindow(argv[0]);
  myinit();
  auxReshapeFunc(myReshape);
  auxMainLoop(display);
}

Exemple

Définit la fonction à exécuter quand une touche du clavier est appuyée.
key peut prendre les valeurs
AUX_A à AUX_Z, AUX_a à AUX_z, AUX_0 à AUX_9, AUX_LEFT, AUX_RIGHT, AUX_UP, AUX_DOWN, AUX_ESCAPE, AUX_SPACE, AUX_RETURN.

La fonction key ne comporte pas de paramètre.

Squelette

#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include "aux.h"

void display(void)
{ /* dessin de la scène */
}

void myinit(void)
{ /* initialisation du programme */
}

void myReshape(int w, int h)
{ /* opérations de rafraîchissement */
}

void keyA(void)
{ /* opérations exécutées
     lors de la frappe d'un A*/
}

void keyB(void)
{ /* opérations exécutées
     lors de la frappe d'un B*/
}


int main(int argc,char** argv) {
  auxInitDisplayMode(AUX_SINGLE|
                     AUX_RGB);
  auxInitPosition(0,0,500,500);
  auxInitWindow(argv[0]);
  myinit();
  auxKeyFunc(AUX_A,keyA);
  auxKeyFunc(AUX_B,keyB);

  auxReshapeFunc(myReshape);
  auxMainLoop(display);
}

Exemple

  • void auxMouseFunc(GLint button, GLint mode, void *mouse(AUX_EVENTREC *));

Définit la liaison entre l'utilisation de la souris et des fonctions -> fonctions à exécuter quand la souris est manipulée sur la fenêtre d'affichage.

button: AUX_LEFTBUTTON, AUX_MIDDLEBUTTON ou AUX_RIGHTBUTTON

mode: AUX_MOUSEUP ou AUX_MOUSEDOWN

La fonction mouse comporte un seul paramètre de type pointeur sur AUX_EVENTREC permettant de récupérer les informations lièes à la souris.

Squelette

#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include "aux.h"

void display(void)
{ /* dessin de la scène */
}

void myinit(void)
{ /* initialisation du programme */
}

void myReshape(int w, int h)
{ /* opérations de rafraîchissement */
}

void mouse(AUX_EVENTREC *event) {
GLint x,y ;
x = event->data[AUX_MOUSEX] ;
y = event->data[AUX_MOUSEY] ;
...
}


int main(int argc,char** argv) {
  auxInitDisplayMode(AUX_SINGLE|
                     AUX_RGB);
  auxInitPosition(0,0,500,500);
  auxInitWindow(argv[0]);
  myinit();
  auxMouseFunc(AUX_LEFTBUTTON,
               AUX_MOUSEUP,mouse);

  auxReshapeFunc(myReshape);
  auxMainLoop(display);
}

Exemple

Dessin d’objets 3D en fil de fer ou en volumique

  • void auxWireObjet();

  • void auxSolidObjet();

 

Objet

Sphère
  Rayon

auxWireSphere(double r);

auxSolidSphere(double r);

Cube
  Coté

auxWireCube(double c);

auxSolidCube(double c);

Tore
  Rayon intérieur
  Rayon extérieur

auxWireTorus(double rint,
             double rext);

auxSolidTorus(double rint,
              double rext);

Cylindre
  Rayon
  Hauteur

auxWireCylinder(double r,
                double h);

auxSolidCylinder(double r,
                 double h);

Cône
  Rayon
  Hauteur

auxWireCone(double r,
            double h);

auxSolidCone(double r,
             double h);

Boite
  Largeur
  Hauteur
  Profondeur

auxWireBox(double l,
           double h,
           double p);

auxSolidBox(double l,
            double h,
            double p);

Tétraèdre
  Rayon

4 faces

auxWireTetrahedron(double r);

auxSolidTetrahedron(double r);

Octaèdre
  Rayon

8 faces

auxWireOctahedron(double r);

auxSolidOctahedron(double r);

Icosaèdre
  Rayon

12 faces

auxWireIcosahedron(double r);

auxSolidIcosahedron(double r);

Dodécaèdre
  Rayon

20 faces

auxWireDodecahedron(double r);

auxSolidDodecahedron(double r);

Teapot
  Rayon

auxWireTeapot(double s);

auxSolidTeapot(double s);

 

 

 

 

 

Programme de visualisation de ces objets

Les objets sont facettisés.