![]() |
Pour définir une projection de type perspectif, il faut définir un centre de projection, une distance focale (distance du centre de projection au plan de projection) et une direction de projection. Dans OpenGL, la direction de projection est toujours suivant l'axe des z. Le centre de projection est à l'origine du repère courant et la distance focale est paramétrable. Pour spécifier une projection perspective, OpenGL fournit la fonction :
glFrustum(gauche, droit, bas, haut, proche, loin)
Tous les paramètres étant ici de type GLdouble. La matrice de projection correspondante est (où d représente la valeur droit, g la valeur gauche, etc.) :
La fonction glFrustum() prend en argument, comme dans le cas orthographique, les tailles et position du volume d'observation. Encore une fois, ce volume n'est pas caractéristique de la projection mais permet de définir une région de visibilité. Celui-ci est, dans le cas perspectif, une pyramide tronquée. Le plan image de la projection correspondant à une des faces de la pyramide tronquée (voir la figure 7). La distance focale de la projection est donc ici égale à la valeur de la variable proche.
Une autre façon de spécifier une projection perspective consiste à utiliser la fonction de la librairie GLU :
gluPerspective(fov, rapport, proche, loin)
Cette fonction sert à spécifier une matrice de projection perspective de la même manière que précédemment, c'est à dire par un volume d'observation. fov est l'angle (en degré) du champs d'observation (voir figure 8), rapport est le rapport d'échelle entre la largeur et la hauteur du volume d'observation, enfin proche et loin sont les distances entre le centre de projection et les plans proche et lointain du volume d'observation.
![]() |
En résumé, pour la spécification d'une projection perspective :
glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(gauche, droit, bas, haut, proche, loin); // gluPerspective(angle,rapport, proche, loin); /* angle [0 .. 180] */ /* rapport = largeur/hauteur */