ogla_small.gif (24003 octets)

11/07/01 18:13

L'Auxiliary library:
Aux

INITIALISATION
ET OUVERTURE
FENÊTRE

AFFICHAGE

TACHE DE FOND

MODIFICATION
FENÊTRE

CLAVIER

SOURIS

DESSIN
D'OBJETS

 

WB01624_.gif (281 octets) RETOUR

 

Dernière modification
11/07/01 18:13:49

Facilite la programmation d'OpenGL aux moyen d'un jeu d'instructions 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 (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

Ouvre une fenêtre de titre title

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) ;
}

Image022.gif (2558 octets)

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

-> rafraîchissement.

La fonction display ne doit assurer l'affichage que d'une seule image. La fonction auxMainLoop est bloquante. 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.

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 est disponible pour la réalisation d'autres tâches -> 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  employées dans la fonction display et ne contient donc habituellement pas d'appel de fonction OpenGL.

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 l'action à réaliser avant le rafraîchissement d’une fenêtre dont la taille est modifiée.

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

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

  • void auxKeyFunc(GLint key, void (*fonct)(void));

Définit la liaison entre les touches du clavier et des fonctions (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) -> fonction à exécuter quand une touche de clavier est validée.

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()
{ /* opérations exécutées
     lors de la frappe d'un A*/
}

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

Exemple

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

Définit la liaison entre les touches de la souris et des fonctions -> fonctions à exécuter quand la souris est utilisée.

button: AUX_LEFTBUTTON, AUX_MIDDLEBUTTON ou AUX_RIGHTBUTTON

mode: AUX_MOUSEUP ou AUX_MOUSEDOWN

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 facettetisés.

ogl_big.gif (6537 octets)                       ogla_big.gif (65244 octets)