OpenGL avec Delphi


précédentsommairesuivant

VIII. Lissage - (Antialiasing)

Ah ! ce qu'OpenGL ne ferait pas pour nous simplifier la vie et nous donner de bons résultats. Ce tutoriel sera consacré au bienfait du lissage ou plus communément surnommé L'Antialiasing. Nous verrons pourquoi il est important, mais aussi pourquoi il ne faut pas en abuser.

VIII-A. Lissage ou antialiasing

Le lissage ou (antialiasing en anglais) est un technique qui renferme des calculs mathématiques complexes permettant d'éliminer l'effet de créneaux quand on trace des lignes ou des points. Je m'explique par une image pour ceux à qui le mot « créneau » ne veut rien dire.

Image non disponible

Un ensemble de créneaux ressemble de très près à un escalier de points formant une ligne ou l'extrémité de la surface d'un polygone. Sans Antialiasing sur une scè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 offre la possibilité de les 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érément, car il bouffe énormément de temps machine. Donc il ne faut pas exagérer quand une scène n'en à pas besoin. 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 ?

 
Sélectionnez
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ètres à la commande glBlendFunc(…) sont les plus susceptibles d'être 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 à activer sera choisi en conséquence selon la manière dont vous avez dessiné vos primitives. Si par exemple vous avez dessiné un triangle à 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, parfois 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'à activer le blending comme vu au tutoriel précédent. Et ce n'est pas tout, il est aussi possible de le désactiver de cette manière : supposons que vous avez activé 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 un meilleur aspect et définition graphique à vos scènes ou primitives.

Image non disponible Image non disponible

VIII-B. Programme relié

Pour activer l'Antialiasing appuyez sur la touche « a » de votre clavier. Pour le désactiver, vous n'avez qu'à réappuyer 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 de différence) ;
  • changer de lunettes Image non disponible ;
  • changer de moniteur Image non disponible ;
  • allez vous coucher Image non disponible.

P.-S. Petit truc, réduisez la valeur Alpha (inférieure à 1.0 ) de la couleur d'une primitive et activez le Lissage. Ensuite, activez le Blending, mais avec le paramètre GL_ONE comme destination :

 
Sélectionnez
glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );

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

Source

Pour ceux que cela intéresse, voici l'autre manière. Source (à la C++)


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2002 Martin Beaudet. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.