Notions de base
Partie 1 : Fonctions de dessin
glVertex : Cette fonction est utilisée uniquement pour la déclaration de sommets au sein d'une primitive graphique.
Une primitive graphique est constituée d'un ensemble de sommets.
Elle est créée par la réalisation successive des instructions glVertex permettant la définition des positions de ses sommets.
La primitive est délimitée au début et à la fin par glBegin et glEnd.
glBegin, glEnd : Permet de spécifier le mode de dessin à appliquer avec l’ensemble des points spécifiés, selon la syntaxe suivante :
- void glBegin(GLenum mode) ;
mode: Type de primitive à dessiner à choisir parmi GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_POLYGON, GL_QUADS, GL_QUAD_STRIP, GL_TRIANGLES, GL_TRIANGLE_STRIP ou GL_TRIANGLE_FAN
et
- void glEnd(void) ;
Type de primitive graphique |
|
GL_POINTS |
GL_LINES |
GL_LINE_STRIP |
GL_LINE_LOOP |
GL_POLYGON |
GL_QUADS |
GL_QUAD_STRIP |
GL_TRIANGLES |
GL_TRIANGLE_STRIP |
GL_TRIANGLE_FAN |
Exemple: Création d'un polygone
glBegin(GL_POLYGON);
glVertex2f(0.0F,0.0F) ;
glVertex2f(2.0F,1.0F) ;
glVertex2f(1.0F,3.0F) ;
glVertex2f(5.0F,0.5F) ;
glVertex2f(-.5F,2.0F) ;
glVertex2f(1.5F,2.5F) ;
glEnd() ;
glColor : Appliquer une couleur à la primitive à dessiner, dont il faut spécifier trois composantes de couleur : Rouge, Vert et Bleu, ou avec une 4ème composante de transparence. La syntaxe de la commande est :
- void glColor3{b s i f d ub us ui} (TYPE r,TYPE v,TYPE b);
- void glColor4{b s i f d ub us ui} (TYPE r,TYPE v,TYPE b,TYPE alpha);
r, v, b, alpha: Composantes colorées élémentaires de la couleur de tracé
Partie 2 : Fonctions de transformations géométriques
On peut manipuler les primitives dessinées en utilisant trois transformations différentes : La translation, la rotation et le changement d’échelle selon les syntaxes suivantes :
- void glTranslate{f d}(TYPE x,TYPE y,TYPE z);
Compose la transformation courante par la translation de vecteur (x,y,z).
Transformation très utilisée en modélisation.
- void glRotate{f d}(TYPE a,TYPE dx,TYPE dy,TYPE dz);
Compose la transformation courante par la rotation d'angle a degrés autour de l'axe (dx,dy,dz) passant par l'origine.
Transformation très utilisée en modélisation.
- void glScale{f d}(TYPE rx,TYPE ry,TYPE rz);
Compose la transformation courante par la transformation composition des affinités orthogonales d'axes x, y et z, de rapports respectifs rx, ry et rz selon ces axes.
Transformation très utilisée en modélisation.
Partie 3 : Fonctions de visualisation
Par défaut la caméra de visualisation (l’observateur) est placée au centre de la scène, gluLookAt est une fonction de la bibliothèque GLU qui permet de faciliter la résolution du problème du placement d'une caméra ailleurs qu'à l'origine.
La syntaxe de la fonction est la suivante :
- void gluLookAt(GLdouble ex, GLdouble ey, GLdouble ez, GLdouble cx, GLdouble cy, GLdouble cz, GLdouble upx, GLdouble upy, GLdouble upz);
Compose la transformation courante (généralement GL_MODELVIEW) par la transformation donnant un point de vue depuis la position (ex,ey,ez) avec une direction de visualisation passant par la position (cx,cy,cz).
(upx,upy,upz) indique la direction du repère courant (fréquemment le repère global) qui devient la direction y (0.0, 1.0, 0.0) dans le repère écran.
Exemple:
gluLookAt(10.0,15.0,10.0,3.0,5.0,-2.0,0.0,1.0,0.0)
place la caméra en position (10.0,15.0,10.0),
l'oriente pour qu'elle vise le point de position (3.0,5.0,-2.0) et
visualise la direction (0.0,1.0,0.0) de telle manière qu'elle apparaît verticale dans la fenêtre de visualisation.
Ces valeurs sont considérées dans le repère courant (fréquemment le repère global).
Dans la pratique, gluLookAt place et oriente la scène devant la caméra de telle manière que la caméra semble placée et orientée selon les paramètres d'entête.
-> L'appel à gluLookAt doit être exécuté en mode GL_MODELVIEW (donc après la définition de la caméra en mode GL_PROJECTION) et doit être placé dans le code avant la création de la scène pour porter sur elle.
Partie 4 : Manipulation des textures
Etape 1 : Spécification de la texture
- void glTexImage2D(GLenum target,GLint level,GLint component,GLsizei l,GLsizei h,GLint b,GLenum format,GLenum type,const GLvoid *pix);
Définit une texture 2D.
target: GL_TEXTURE_2D
level: 0 pour une texture à 1 niveau
component: nombre de composantes à gérer
1 -> rouge
2 -> R et A
3 -> R, V et B
4 -> R, V, B et A
l et h: dimension de l'image représentant la texture. l et h sont obligatoirement des puissances de 2.
b: largeur du bord (usuellement 0). Si b <> 0 alors l et h sont incrémentés de 2xb.
format et type: format et type de données de l'image (voir glReadPixels)
pix: image à placer stockée dans un tableau
- void glTexImage1D(GLenum target,GLint level,GLint component,GLsizei l,GLint b,GLenum format,GLenum type,const GLvoid *pix);
Définit une texture 1D.
target: GL_TEXTURE_1D
Etape 2 : Autorisation du placage
Echantillonnage
Après transformation en coordonnées écran, les pixels de la texture (texels) correspondent rarement à des pixels de l'image (un pixel = un morceau de texel -> agrandissement, un pixel = plusieurs texels -> réduction)
-> Visualisation claire des texels s'ils sont trop grands à l'écran
-> non visualisation des texels existant entre deux pixels s'ils sont trop petits.
OpenGL propose le choix de la ou des techniques à employer pour effectuer les calculs d'"échantillonnage" nécessaire à la détermination de la couleur d'affichage dans les cas d'agrandissement (resp. réduction) quand moins (resp. plus) d'un texel correspond à un pixel de l'image.
- void glTexParameter{if}{v}(GLenum target,GLenum pn, TYPE param);
Configuration du placage de texture
target: GL_TEXTURE_2D ou GL_TEXTURE_1D
pn: paramètre sur lequel est effectuée la configuration
param: valeur adoptée
pn |
param |
GL_TEXTURE_MAG_FILTER |
GL_NEAREST |
GL_TEXTURE_MIN_FILTER |
GL_NEAREST |
GL_TEXTURE_MAG_FILTER: méthode d'agrandissement
GL_TEXTURE_MIN_FILTER: méthode de réduction
GL_NEAREST: choix du texel le plus proche du centre du pixel considéré et utilisation de sa couleur
-> plus grande rapidité mais affichage de moins bonne qualité
GL_LINEAR: choix et moyennage pondéré du carré de 2x2 texels le plus proche du centre du pixel
-> rapidité moins importante mais affichage de meilleure qualité
Répétition et seuillage de texture
Les coordonnées textures sont définies dans les images sources entre les coordonnées 0 et 1. Au delà elles peuvent être répétées ou seuillées.
Répétition: toute coordonnée supérieure à 1 ou inférieure à 0 voit sa partie entière ignorée.
Seuillage: toute coordonnée supérieure à 1 (resp. inférieure à 0) est ramenée à 1 (resp. à 0).
- void glTexParameter{if}{v}(GLenum target,GLenum pn, TYPE param);
Configuration du placage de texture
target: GL_TEXTURE_2D ou GL_TEXTURE_1D
pn: paramètre sur lequel est effectuée la configuration
param: valeur adoptée
pn |
param |
GL_TEXTURE_WRAP_S |
GL_CLAMP |
GL_TEXTURE_WRAP_T |
GL_CLAMP |
GL_TEXTURE_BORDER_COLOR |
Quatre valeurs entre 0 et 1 |
- GL_CLAMP: seuillage
- GL_REPEAT: répétition
Etape 3 : Autorisation du placage
- glEnable(int mode);
mode: GL_TEXTURE_2D ou GL_TEXTURE_1D
Etape 4 : Coordonnées de la texture
Pour chaque sommet définissant un objet, les coordonnées lui correspondant dans la texture doivent être précisées. Les coordonnées dans la texture des pixels à l'intérieur des facettes sont obtenues par interpolation entre ces valeurs.
1, 2, 3 ou 4 coordonnées (s,t,r,q) suivant le type de texture utilisée:
s affecté pour les textures 1D (t et r à 0, q à 1)
s et t affectés pour les textures 2D (r à 0, q à 1)
s, t et r affectés pour les textures 3D (q à 1)
q est l'équivalent de w en coordonnées homogènes.
glTexCoord :
- void glTexCoord{1234}{sifd}{v}(TYPE coords);
Configuration d'une position de sommet dans une texture
coords: coordonnées dans la texture
1: remplit s, t=0, r=0, q=1
2: remplit s et t, r=0, q=1
3: remplit s, t et r, q=1
4: remplit s,t,r et q
glTexCoord permet de fixer la position dans une texture du prochain sommet défini.
Exemple :