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_POINTSGL_LINESGL_LINE_STRIPGL_LINE_LOOPGL_POLYGONGL_QUADSGL_QUAD_STRIPGL_TRIANGLESGL_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_LINEAR

GL_TEXTURE_MIN_FILTER

GL_NEAREST
GL_LINEAR
...

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_REPEAT

GL_TEXTURE_WRAP_T

GL_CLAMP
GL_REPEAT

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 :

Modifié le: Wednesday 8 April 2020, 19:23