INITIALISATION
ET OUVERTURE
FENÊTREAFFICHAGE
TACHE DE FOND
MODIFICATION
FENÊTRE
CLAVIER
SOURIS
DESSIN
D'OBJETS
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 dune 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) ;
}
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 dune 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
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 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 facettetisés. |