Synthèse d'images

avec OpenGL(ES)

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

Edge

Arête

C'est le bord d'un triangle, un segment de droite entre deux sommets. Dans un maillage complet, une arête est partagée entre deux triangles. Une demi-arête est un segment orienté entre deux sommets. Une arête correspond donc à deux demi-arêtes orientées en sens inverse l'une de l'autre.

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, comme std::max, et des objets comme std::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 par GL_LINES et triangles GL_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 par GL_LINE_STRIP et une ligne brisée fermée GL_LINE_LOOP. Pour les triangles, on trouve un « éventail » autour d'un point central identifié par GL_TRIANGLE_FAN et une sorte de ruban GL_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, anciennement attribute, placé avant son type. Exemple in 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. Exemple out 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 et glBufferData 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(x0,y0,width,height) permet de changer le ViewPort.