Glossaire
A
- API
L'acronyme API signifie interface de programmation. Dans le cas général, c'est un regroupement de fonctions et de structures de données permettant d'écrire un programme ou une application. Selon le système d'exploitation et le langage de programmation, une API telle qu'OpenGL se présente sous la forme de fichiers à inclure, de bibliothèques ou simplement de directives à insérer dans le programme source.
- Attribut de sommet
C'est une information associée au sommet, telle que ses coordonnées, sa couleur, sa normale, sa tangente, etc. Les attributs de sommets sont généralement rassemblés dans un Vertex Buffer Object afin d'être fournis à un programme de shaders.
B
- Buffer
Tableau brut
Un buffer est un tableau de taille fixe destiné à contenir des données binaires. Les données peuvent être des entiers, des réels, des couleurs, des vecteurs. Les données sont initialement produites dans la mémoire vive du processeur puis transférées sur la carte graphique avant emploi par le GPU. Le mot buffer est parfois traduit par tampon en programmation système, mais ce terme signifie davantage une zone de stockage dynamique entre deux processus, ce qui n'est pas le cas dans notre contexte.
C
- Color Buffer
Image couleur
Un Color Buffer est un buffer à deux dimensions contenant des couleurs. C'est donc une sorte d'image. Cependant les composantes des couleurs peuvent être représentées par autre chose que des octets, par exemple des réels. Consulter les fonctions glTexImage2D et glRenderbufferStorage qui permettent de créer un tel buffer, ainsi que la description des FBO.
- Contexte OpenGL
Le contexte OpenGL est un objet représentant à la fois l'API OpenGL et la zone graphique. Le contexte est initialisé au lancement de l'application, lors de l'ouverture de la fenêtre. Une zone graphique est attribuée à OpenGL pour définir le ViewPort. En C++ et Android, ce contexte est implicite. Par contre, en WebGL, il est visible sous la forme d'un objet appelé
gl
. Les méthodes et valeurs de cet objet sont les fonctions et constantes d'OpenGL.
D
- Depth Buffer
Tableau des profondeurs
Un Depth Buffer, anciennement nommé Z-Buffer, mémorise la distance à l'écran de chaque pixel. Cette distance est liée à la matrice de projection. Cette matrice fait correspondre un intervalle de distances Z (négatives) [−near, −far] à l'intervalle normalisé [−1, +1]. Le calcul est fait en coordonnées homogènes. Il semble surprenant que l'intervalle de distance Z soit négatif. C'est dû aux relations entre d'une part le repère main droite utilisé pour positionner les objets (ils sont placés à des coordonnées Z négatives) et d'autre part le repère interne appelé Clip Space main gauche utilisé pour les calculs de visibilité sur l'écran (se reporter à la Section 3.4, Projection caméra pour toutes les explications).
E
F
- Format de fichier
Un format est une norme qui spécifie comment sont écrites les informations dans un fichier. Dans ce livre, j'ai présenté les formats OBJ et MTL pour l'enregistrement de maillages (voir la Section 2, Contenu d'un fichier OBJ).
- Fragment
pixel
Pour simplifier, un fragment est un pixel dans un Color Buffer. Mais c'est davantage qu'un pixel, car il y a d'autres informations dans un fragment : profondeur et données interpolées provenant du vertex shader. Dans le cas du multi-échantillonnage, il y a également les couleurs des échantillons.
- Fragment Shader
Teinteur de pixels
C'est un programme écrit en GLSL qui est lancé automatiquement sur tous les pixels d'une primitive graphique, après le travail du Vertex Shader puis le pixeliseur. Le rôle du Fragment Shader est de calculer la couleur de chaque pixel.
G
- GLSL
C'est l'abréviation de OpenGL Shading Language. C'est un langage de programmation ressemblant au C, permettant de spécifier des calculs géométriques et graphiques.
- GPU
Processeur graphique
C'est l'abréviation de Graphic Processing Unit. C'est un dispositif inclus dans un ordinateur comprenant une unité de calcul, de la mémoire et des interfaces vers le moniteur et le CPU. Son rôle est de dessiner des formes simples appelées primitives graphiques (points, lignes et triangles). Ces formes sont colorées par le travail d'un couple Vertex Shader, Fragment Shader.
M
- Modeleur 3D
Il s'agit d'un logiciel permettant la création et la modification d'un maillage et de matériaux. Ils montrent généralement une ou plusieurs vues de l'objet permettant de sculpter les formes à volonté. Parmi les modeleurs, on peut citer Blender, Maya et 3DS Max.
- Moteur 3D
Un moteur 3D est principalement un programme capable de dessiner une scène 3D complète : objets avec leurs matériaux, éclairages, caméras et post-traitements d'image. Généralement, les objets peuvent être animés de nombreuses manières, par exemple par des positions clés, des lois physiques, etc. Ces moteurs sont généralement accompagnés d'un modeleur 3D ainsi que des éditeurs spécialisés pour paramétrer la scène. Il existe un grand nombre de moteurs. Certains sont liés à des jeux vidéos précis, comme CryEngine et Unreal Engine, d'autres sont plus polyvalents comme Unity et Ogre.
N
- Namespace,
package Espace de nom
On utilise des espaces de noms en C++ ou des packages en Java pour séparer les composants d'un gros logiciel. Par exemple, l'espace de nom
std
contient différentes fonctions, commestd::max
, et des objets commestd::cout
.- Normale
Voir %t.Vecteur normal.
P
- Pipeline 3D
Séquence de traitements
Les dessins 3D sont effectués par différentes étapes : triangularisation, Vertex Shader, pixelisation, Fragment Shader, tests de visibilité, mélange... Ces étapes sont faites comme dans une usine moderne, en continu afin d'améliorer la vitesse globale.
- Primitive géométrique
C'est ainsi qu'on nomme les formes que peut dessiner OpenGL. Toutes ces formes s'appuient sur des sommets. Il y a trois primitives de base : points isolés identifiés par la constante
GL_POINTS
, segments de droite entre deux sommets identifiés parGL_LINES
et trianglesGL_TRIANGLES
. D'autres primitives sont disponibles, elles regroupent par exemple une succession de segments : ligne brisée non refermée sur elle-même identifiée parGL_LINE_STRIP
et une ligne brisée ferméeGL_LINE_LOOP
. Pour les triangles, on trouve un « éventail » autour d'un point central identifié parGL_TRIANGLE_FAN
et une sorte de rubanGL_TRIANGLE_STRIP
. Ces primitives sont présentées dans la Premiers programmes OpenGL.
R
- Rasterization
Pixelisation
C'est la transformation d'une primitive graphique, ligne et triangle, en une liste de pixels recouverts au moins partiellement, en tenant compte des modes de dessin comme la largeur des lignes.
- Rendu
C'est le fait de dessiner une scène 3D soit sur l'écran, soit dans un FrameBuffer.
S
- Shader, shading
Teinteur
To shade en anglais signifie teinter, nuancer, ombrer. Ce terme désignait initialement la phase de coloration des pixels recouverts par les primitives graphiques telles que les triangles, lignes et points. Le terme shading a été étendu à de nombreux autres calculs, comme celui de la projection des primitives graphiques 3D sur l'écran. On distingue ainsi les Vertex Shader qui effectuent les calculs géométriques et les Fragment Shader qui sont chargés des calculs de couleurs. Il existe d'autres types de shaders que je ne présente pas dans ce livre.
Voir aussi Vertex Shader.
Voir aussi Fragment Shader.
- Sommet
Voir %t.Vertex, vertice.
V
- Variable attribute
C'est une variable de Vertex Shader qui est liée à un Vertex Buffer Object au moment de l'exécution du shader, pour contenir l'un des attributs des sommets. C'est par exemple la variable qui reçoit les coordonnées des sommets, ou celle qui reçoit leur normale. Cette variable est qualifiée par le mot clé
in
, anciennementattribute
, placé avant son type. Exemplein vec3 glVertex;
- Variable uniform
C'est une variable de Vertex ou de Fragment Shader qui se comporte comme une constante au moment de l'exécution du shader. On se sert de ces variables pour paramétrer le shader, ou pour fournir des ressources telles que les textures. Exemple
uniform float time;
- Variable varying
Le mot clé
varying
a disparu de GLSL, mais le concept est resté. Il s'agit d'une variable qui est affectée par le Vertex Shader (qualifiée par le mot cléout
), interpolée dans le pixeliseur et reçue dans le Fragment Shader (qualifiée par le mot cléin
). Son type et son nom doivent être identiques dans les deux shaders. Exempleout vec3 frgPosition;
- Vecteur normal
C'est un vecteur concernant un triangle. Il est le vecteur orthogonal, perpendiculaire à la surface. Il existe une infinité de tels vecteurs, tous colinéaires, mais on considère généralement le vecteur normé et dirigé vers l'extérieur du triangle. C'est le vecteur qui vient vers nous quand on regarde le triangle du côté où on énumère les sommets en tournant dans le sens trigonométrique.
- Vecteur tangent
Le vecteur tangent concerne un triangle. C'est un vecteur qui est dans le plan du triangle. Il y en a une infinité, dans toutes les directions, mais on privilégie l'un d'entre eux, celui qui est normé et colinéaire au premier côté du triangle.
- Vertex, vertice
Point, sommet
Un sommet (ou vertex) est un point particulier, extrémité d'une arête dans un polygone ou un maillage.
- Vertex Shader
Calculateur de sommets
C'est un programme écrit en GLSL qui est lancé automatiquement sur tous les sommets d'un VBO lors du dessin d'une primitive graphique. Son rôle est de calculer la projection des sommets sur l'écran, ainsi que d'autres informations nécessaires pour le fragment shader.
- Vertex Buffer Object, VBO
Tableau d'attributs de sommets
Un VBO est un buffer contenant des attributs de sommets. Les attributs peuvent être entrelacés, c'est-à-dire que des données de différentes sortes (couleurs, coordonnées) se rencontrent successivement. Voir les fonctions
glGenBuffers
etglBufferData
pour la création et la Exemple 5.29.- ViewPort
Il s'agit de la zone de dessin OpenGL. Cette zone est un sous-ensemble de la fenêtre associée au contexte OpenGL. La plupart du temps, le ViewPort est la totalité de la fenêtre. La fonction OpenGL
glViewPort(
permet de changer le ViewPort.x0
,y0
,width
,height
)