INITIALISATION
ET OUVERTURE
FENÊTREAFFICHAGE
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
dune 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 dune 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
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 dobjets 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
Rayon4 faces |
auxWireTetrahedron(double r);
auxSolidTetrahedron(double
r); |
Octaèdre
Rayon8 faces |
auxWireOctahedron(double r);
auxSolidOctahedron(double
r); |
Icosaèdre
Rayon12 faces |
auxWireIcosahedron(double r);
auxSolidIcosahedron(double
r); |
Dodécaèdre
Rayon20 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. |