Formation OpenGL |
|
Pour définir les valeurs de vidage des tampons, utiliser les commandes suivantes :
Ensuite, pour procéder au vidage, utiliser : glClear( GLbitfield mask ); avec comme valeur de mask, un OU logique parmi GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_STENCIL_BUFFER_BIT et GL_ACCUM_BUFFER_BIT.
Lors du vidage du tampon chromatique, tous les tampons chromatiques activés en écriture sont vidés.
Le test d'appartenance du pixel, le test de scission et le dithering sont appliqués à l'opération de vidage, s'ils sont actifs. Les opérations de masquage, telles que glColorMask() et glIndexMask() sont également opérationnelles.
Les fonctions correspondant sont glIndexMask, glColorMask, glDepthMask, et glStencilMask.
En particulier, pour désactiver le tampon de profondeur en écriture, ce qui est utile lors de l'affichage d'objets translucides, appeler glDepthMask(false).
Une fois que les fragments sont générés, 7 tests et opérations sont effectués pour intégrer le tampon d'image :
Ce test permet de restreindre l'affichage à un rectangle donné dans la fenêtre. Il est utile, par exemple, dans le cas où différents processeurs sont utilisés pour calculer des parties d'une même image.
Pour activer/desactiver le test de découpe : glEnable/glDisable(GL_SCISSOR_TEST).
Pour définir le rectangle, on utilise glScissor(GLint x, GLint y, GLsizei largeur, GLsizei hauteur), où (x, y) sont les coordonnées du coin inférieur gauche de la fenêtre.
Par défaut, le test de découpe est désactivé.
Ce test permet d'utiliser la valeur de la composante alpha d'un fragment pour accepter ou rejeter celui-ci. Par exemple pour gérer correctement la transparence, on restitue une première fois la scène avec les fragments opaques, puis on désactive l'écriture dans le tampon de profondeur pour restituer la scène en acceptant uniquement les fragments dont la valeur alpha est différente de 1.
Pour activer/desactiver le test alpha glEnable/glDisable(GL_ALPHA_TEST).
Pour indiquer la fonction de comparaison, et la valeur de référence : glAlphaFunc(GLenum fonction, GLclampf val). La valeur de référence
val est arrondie entre 0 et 1.
Par défaut, le test alpha est désactivé.
Ce test est utilisé en association avec le Tampon Stencil.
Pour activer/desactiver le test stencil glEnable/glDisable(GL_STENCIL_TEST).
Pour indiquer la fonction de comparaison glStencilFunc(), et les opérations à réaliser glStencilOp().
Par défaut, le test stencil est désactivé.
Pour activer/desactiver le test de profondeur glEnable/glDisable(GL_DEPTH_TEST).
Pour indiquer la fonction de comparaison glDepthFunc().
Par défaut, le test de profondeur est désactivé. La fonction de comparaison, elle, vaut GL_LESS : le fragment entrant est accepté si sa valeur est inférieure à celle du tampon de profondeur.
Le z correspond à la distance entre le point de vue et l'objet. Plus l'objet est proche, plus son z est petit.
Il s'agit d'une méthode qui permet de simuler une couleur lorsque le nombre de couleurs est limité, en juxtaposant des points de couleurs différentes.
Pour activer/desactiver le dithering : glEnable/glDisable(GL_DITHER).
Par défaut, le dithering est activé.
Il s'agit d'opérations comme OR, XOR ou INVERT, qui s'appliquent aux fragments source ou destination.
Pour activer/desactiver les opérations logiques, on utilise glEnable/glDisable(GL_COLOR_LOGIC_OP) en mode RVBA, ou glEnable/glDisable(GL_INDEX_LOGIC_OP) en mode couleurs indexées.
Pour indiquer l'opération à effectuer glLogicOp(GLenum op).
Par défaut, les opérations logiques sur les fragments sont désactivées.
void glAccum(GLenum op, GLfloat value); contrôle le tampon d'accumulation.
Le paramètre op sélectionne l'opération, et peut avoir pour valeur GL_ACCUM, GL_LOAD, GL_RETURN, GL_ADD ou GL_MULT.
value est un nombre à utiliser dans cette opération.
Voici un récapitulatif des opérations :
glAccum(GL_ACCUM, v) : | TamponAccumulation = | TamponAccumulation + v*TamponChromatique |
glAccum(GL_LOAD, v) : | TamponAccumulation = | v*TamponChromatique |
glAccum(GL_RETURN, v) : | TamponChromatique = | v*TamponAccumulation |
glAccum(GL_ADD, v) : | TamponAccumulation = | v+ TamponAccumulation |
glAccum(GL_MULT, v) : | TamponAccumulation = | v *TamponAccumulation |
Pour éviter que les n images intermédiaires de la scène ne soient affichées, dessinez-les dans un tampon chromatique qui n'est pas affiché.
TamponAccumulation = SceneCourante + alpha*TamponAccumulation
SceneCourante = TamponAccumulation