C'est une librairie graphique.
Permet de construire des objets à partir de primitives, les positionner, calculer les ombrages, la rastérisation (transformation de la scène en pixels à l'écran).
En 4 parties:
glViewPort(0,0,600,600)
OpenGL utilise des piles de matrices donc il faut faire les appels avec :
glMatrixMode(GL_projection) /*Passage en mode matrice*/ glLoadIdentity();/*Initialisation de la matrice à l'identité*/ glMatrixMode(GL_projection) glLoadIdentity();
void glClearColor(Glfloat rouge, Glfloat vert, Glfloat bleu, Glfloat alpha);Cette fonction permet de choisir la couleur du fond.
glClearColor(0.0,0.0,0.0,0.0); /*Ici, noir*/Mais cette fonction n'affiche pas la couleur à l'écran d'où l'utilisation de la fonction :
void glClear(GL_COLOR_BUFFER_BIT);qui efface les dessins dans la fenêtre et qui équivaut à remplir la fenêtre avec la couleur de fond choisie plus haut.
void glOrtho(GLdouble left,GLdoubleright,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);
ex:
glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);
On utilise des fonctions qui ont un format général:
fonction n f
N est un entier correspondant au nombre de paramètre que l'on va envoyer ensuite,
f=1 ou 2 caractère précisant le format du paramètre.
Ex:
glVertex2f(28.4,-3.7);Vertex est le nom de la fonction à qui on passe 2 paramètres qui sont des floats.
Il existe différents formats:
Ex: choix de la couleur courante
glColor3f(0.0,0.0,0.0);/*donne noir*/ glColor3ub(0.0,0.0,0.0);/*donne également noir*/Dans le premier cas, f est compris entre 0.0 et 1.1 alors que dans l'exemple 2, ub est compris entre 0.0 et 255.0.
Format général du code pour le dessin:
glBegin(FORME) glColornf(...); glVertexnf(...); .... glEnd();
FORME peut être du type:
On peut changer la couleur au milieu de la déclaration des points des sommets.
Ex:
glBegin(GL_LINES) glColor3f(0.2,0.5,0.5); glVertex2s(0,0); glVertex2s(0,100); glColor3f(1.0,1.0,1.0); glVertex2s(400,0); glVertex2s(-400,0); GlEnd();
Puis à la fin
glFlush();/*Pour l'affichage*/Si on a:
glColor3f(1.0,1.0,1.0); glVertex2s(0,0); glColor3f(0.2,0.5,0.5); glVertex2s(0,100);On obtient un segment dégradé, idem pour un triangle.
Ex: programme minimal de tout ce qui est nécessaire afin de réaliser 2 points :1 rouge et 1 jaune:
glClearColor(0.0,0.0,0.0); /*Fond=noir*/ glViewPort(0,0,600,600); /*Fenêtre*/ glMatrixModel(GL_PROJECTION); glLoadIdentity(); GlMatrixMode(GL_MODELVIEW); GloadIdentity(); glClear(GL_COLOR_BUFFER_BIT); glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0,); glBegin(GL_POINTS); glColor3f(1.0,0.0,0.0); glVertex2f(-0.5,0.0); glColor3f(1.0,1,0,0.0); glVertex2f(0.5,0.0); glEnd(); glFlush(); SwapBuffers(); // si double buffer
On utilise 3 coordonnées.
glVertex3f(1.0,2.0,4.0);On peut faire des opérations géométriques qui sont traitées par la matrice GL_MODELVIEW.
void glTranslatef(GLfloat x, GLfloat y, GLfloat z);
Void glRotatef(GLfloat $\alpha$,GLfloat x, GLfloat y,GLfloat z);
Void glScalef(GLfloat x,GLfloat y, GLfloat z);
glPushMatrix();Pour récupérer l'état mémorisé en dernier, on utilise:
glPopMatrix();
exemple:
glMatrixMode (GL_MODELVIEW); glLoadIdentity (); DessineCube(); /*Fonction dessinant un cube unité centré en (0,0,0)*/ glTranslatef(0.5,0.0,0.0);/*A partir d'ici, tout ce qui suit sera dessiné translaté de 0,5 selon Ox*/ DessineCube(); glPushMatrix(); glRotate (45.0,0.0,0.0,1.0)/*A partir d'ici, tout ce qui suit sera tourné puis translaté*/ glPopMatrix();/*Tout ce qui va suivre sera uniquement translaté, on revient à l'état enregistré*/ glFlush();
Watier Yves 2004-11-28