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.
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.