Transformations de visualisation
et autres Par Xavier Michelon |
Dernier point technique que nous aborderons avant de nous consacrer à l'étude d'un exemple concret, les transformations de projection correspondent au passage de la scène 3D à une image 2D affichable à lécran. Comme je l'ai dit la dernière fois, il existe un matrice pour stocker les transformations de projection qu'on peut activer en appelant glMatrixMode(GL_PROJECTION). Il existe différents types de projections. L'ouvrage de Foley et Van Dam cité en référence à la fin du didacticiel détaille bon nombre de méthodes de projection. Comme les projections sont stockées dans des matrices et vu qu'il est possible de spécifier une matrice en explicitant chacun de ces coefficients (avec la fonction glLoadMatrix()), vous pourrez utiliser n'importe type de projection. Mais OpenGL vous fournit des fonctions permettant de spécifier simplement les matrices des deux types de projection les plus fréquents (la projection orthogonale et la projection perspective),tout en gérant le problème du fenêtrage.
Le fenêtrage :
Lorsque vous observez une scène 3D, il est possible qu'un certain nombre d'objets se situent hors du champs de vision (derrière la caméra par exemple). Le fenêtrage (clipping en anglais) consiste à déterminer à lavance les objets de la scène qui se situent hors du champs de la caméra. Pour cela, on définit un volume de vue : tous les objets se situant à l'intérieur du volume seront affichés à l'écran, les objets situés à l'extérieurs du volume seront ignorés. Si un objet est partiellement inclus dans le volume, il sera tronqué, et seul la partie située à l'intérieur du volume sera affichée.
La projection perspective :
Aujourdhui, nous
nétudierons que la projection perspective. la projection orthogonale sera
abordé dans un futur didacticiel concernant la réalisation dun mini-modeleur
3D. OpenGL fournit deux fonctions pour spécifier une projection perspective.
La plus simple (et la seule que nous verrons aujourd'hui) se nomme gluPerspective,
et a le prototype suivant :
void gluPerspective(GLdouble cdv,GLdouble rapport,GLdouble devant,GLdouble derriere);
Les paramètres de gluPerspective() permettent de définir le volume de vue associé à la projection perpective. La signification de chacun des paramètres est expliquée sur la figure 1, excepté rapport, qui correspond au rapport largeur/hauteur de l'image. Jusqu'à présent, nous avons toujours travaillé avec des images carrées, donc pour éviter les distorsions, il nous faut choisir un rapport de 1.
Figure 1 : pyramide correspondant au volume de vision en projection perpective |
De manière standard, la définition d'une méthode de projection pour un scène se fait de la manière suivante :
glMatrixMode(GL_PROJECTION); /* on rend active la matrice de projection */ glLoadIdentity(); /* on reinitialise la matrice de projection */ glOrtho(...) /* ou gluPerspective() ou glFrustum(), pour déterminer le type de projection voulu */ glMatrixMode(GL_MODELVIEW); /* retour à la matrice de modélisation-visualisation */
|