Lissage -(Antialiasing)

Préalables
Pour ce tutoriel, vous aurez besion du composant [SetupGL].
Survol du tutoriel
Ha! Ce qu'OpenGL ne ferait pas pour nous simplifier la vie et nous donner de bons résultats. Ce tutoriel sera consacré aux bienfaits du Lissage ou plus communément surnommé L'Antialiasing. Nous verrons pourquoi il est important mais aussi pourquoi il ne faut pas en abuser.
Lissage ou Antialiasing
Le lissage ou (Antialiasing en anglais) est un technique qui renferme des calculs mathématique complexe permettant d'éliminer l'effet de crénaux quand on trace des ligne ou des points. Je m'explique par une image pour ceux à qui le mot crénaux ne veut rien dire.

Un ensemble de crénaux ressemble de très près à une escalier de points formant une ligne ou l'extrémité de la surface d'un polygone. Sans Antialiasing sur une scnène dessinée à l'écran d'un ordinateur, il est assez souvent très facile d'apercevoir l'effet de points en escalier et parfois cela gâche la beauté de la scène. Mais OpenGL est encore là pour nous et il nous offres la possibilité de les l'estomper via le Lissage. Bon je vous dis tout de suite que pour l'activer c'est un jeu d'enfant mais il faut l'utiliser modérement car il bouf énormément de temps machine. Donc il ne faut pas exagérer quand une scène n'en à pas besion. Le Lissage sera surtout utilisé quand on sera très près (Zoom) d'une scène ou d'un objet quelconque.

Tout d'abord avant d'activer le Lissage, il faut utiliser le blending et j'espère que vous vous souvenez comment on procède ?

glEnable( GL_POLYGON_SMOOTH );

glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable( GL_BLEND );

Les valeurs ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) passées en paramètre à la commande glBlendFunc(...) sont les plus succeptibles d'êtres utilisées. Le lissage peut s'actionner de trois manières et les voici :

  • glEnable(GL_POINT_SMOOTH );
  • glEnable(GL_LINE_SMOOTH );
  • glEnable(GL_POLYGON_SMOOTH );

Alors il est possible de lisser des points, des lignes et pour terminer des polygones. Le mode de lissage que vous aurez à activez sera choisi en conséquence selon la manière dont vous avez dessinez vos primitives. Si par exemple vous avez dessiner un triangles à l'aide de l'argument glBegin( GL_LINES ); alors il vous faudra activer le Lissage de cette manière glEnable( GL_LINE_SMOOTH );.

Autres commandes intéressantes lors du lissage sont ceux-ci :
  • glPointSize(Size );
  • glLineWidth(Width );

Ces deux commandes affecteront la grosseur des pixels ou des lignes lors du lissage, parois cela peut-être utile et par conséquent je vous laisse trouver pourquoi...

Une fois que les valeurs nécessaires sont affectées aux paramètres de Lissage, il ne reste plus qu'a activer le blending comme vu au tutorial précédant. Et ce n'est pas tout, il est aussi possible de le désactiver de cette manière : suppsons que vous avez activer le Lissage des points, et bien pour le désactiver il vous faudra procéder de cette manière : glDisable( GL_POINT_SMOOTH );
Voilà un petit programme qui vous prouvera que le Lissage est très utile pour donner une meilleur aspect et définition graphique à vos scène ou primitives.
Capture d'écran
Avant
 
Après
 
Programme relié
Pour activer l'Antialiasing appuyez sur la touche "a" de votre clavier. Pour le désactiver vous n'avez qu'a réappuyez sur la même touche.
Si vous ne voyez pas de différence alors il y a plusieurs raisons :
  • Votre carte vidéo (J'ai essayé un 3D Prophet 4500 Kyro II et je ne voyais pas vraiment la différence)
  • Changer de lunette
  • Changer de moniteur
  • Allez vous coucher

PS : Petit truc, réduisez la valeur Alpha (Inférieur à 1.0 ) de la couleur d'une primitive et activer le Lissage. Ensuite activer le Blending mais avec le paramètre GL_ONE comme destination :

glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );

Vous devriez apercevoir toutes les extrémités (Lignes) des surfaces de la primitive affecté par ce Blending. Mais pour ça vous devez travailler avec un polygon, donc l'exemple ci-dessus ne vous le permettera pas...

  Source




Retour