Amélioration de la qualité du rendu

 

L'anti-aliasing

Voir la définition dans ce chapitre

La fonction suivante va permettre d'activer l'anti-alising:

void glHint(GLenum target, GLenum mod)

En entrée

target va indiquer le type d'opération graphique que devra effectuer l'anti-aliasing.

La valeurs sont les suivantes:

Valeur Désignation
GL_POINT_SMOOTH_HINT Qualité d'échantillonnage souhaitée pour les points au cours des opérations de lissage
GL_LINE_SMOOTH_HINT Qualité d'échantillonnage souhaitée pour les lignes au cours des opérations de lissage
GL_POLYGON_SMOOTH_HINT Qualité d'échantillonnage souhaitée pour les polygones au cours des opérations de lissage
GL_FOG_HINT détermine si les calculs de fog se font pixel par pixel (meilleure qualité) ou sommet par sommet (plus rapide)
GL_PERSPECTIVE_CORRECTION_HINT spécifie si l'on souhaite ou non tenir compte de la perspective pour l'interpolation des couleurs et des textures.

mod, type d'opération de lissage:

Valeur Désignation
GL_FASTEST Priorité à la vitesse
GL_NICEST Priorité à la qualité du rendu
GL_DONT_CARE Laisser OpenGl choisir la meilleur solution

En sortie:

GL_INVALID_ENUM si l'une des valeurs en entrée est incorrecte.

GL_INVALID_OPERATION si on lance la commande entre glBegin et glEnd.

 

Image non trouvée !Cette fonction n'est pas toujours supportée. Mais dans ce cas, elle sera simplement ignorée.

 

Modes de rendu des polygones
On peut visualiser les polygones en mode point ( glPolygonMode(GL_POINT) ), en mode ligne ( glPolygonMode(GL_LINE) ), ou en mode plein ( glPolygonMode(GL_FILL) ).

 

 

Décalage de polygone

Il arrive que pour certaines figures, le développeur veuille souligner les contours d'un objet 3D. Pour y parvenir, il va donc tracer des segments de droites en plus des faces. Seulement, les points des faces et des segments ne sont pas calculer de la même manière lors de la rasterisation. Il arrive donc que des points du segment soient cachés par ceux de la face ou inversement (stitching).

Pour corriger se défaut désagréable, l'idée va être de décaler les points de chacunes faces des points des segments. Ce décalage sera fait sur l'axe z pour rapprocher les lignes vers l'observateur.

Types de décalage
Il y a trois types de décalages, un par mode de rendu c'est à dire:

- Décalage des points ( glEnable(GL_POLYGON_OFFSET_POINT) ),

- Décalage des lignes ( glEnable(GL_POLYGON_OFFSET_LINE) ),

ou décalage des faces pleines (glEnable(GL_POLYGON_OFFSET_FILL) ).


Valeur du décalage
La commande glPolygonOffset(GLfloat facteur, GLfloat unites) ajoute à la profondeur de chaque fragment un décalage o :
o = m . facteur + r . unites
Dans cette formule, m est l'inclinaison de profondeur maximale du polygone, ( c'est à dire la variation en z du polygone divisée par la variation en x ou y correspondante) et r une constante spécifique à l'implémentation.

En général, on obtient un décalage satisfaisant en utilisant les valeurs suivantes : facteur = unites = 1.0 . On note que m et r étant positifs, avec ces valeurs, le décalage o est positif : les objets sont bien rapprochés du point de vue.