require("../global.php"); entete(); ?>
Lors du processus d'affichage de la scène 3D, il va nous falloir projeter tous les objets dans le champ de la caméra sur l'écran. La projection sur un écran quelconque est une opération longue et il est bien préférable d'intégrer les mouvements de la caméra à ceux des objets.
Ainsi, en déplaçant la caméra, on cherche à répondre à la question : « Où se trouverait un point si au lieu de déplacer la caméra c'est ce point qui bougeait ? »
Pour résoudre ce problème, on va procéder comme on l'a déjà fait pour supprimer le calcul des normales : on fait subir aux objets les déplacements inverses de la caméra.
Le cas d'une translation est immédiat : pour simuler la translation de vecteur D de la caméra, il suffit d'appliquer une translation de vecteur -D aux points de la scène.
Celui de la rotation découle de ce que nous avons dit précédement sur
l'inverse des matrices de rotations :
De là, on en déduit le cas général :
Si la caméra C subit une transformation de la forme [R]*C + D
avec [R] une matrice de rotation et D un vecteur déplacement
alors il est équivalent de la laisser fixe et faire subir aux
points P une transformation de la forme :
|
Nous avons vu dans le paragraphe précédent comment combiner les transformations; celle liée à la caméra s'intègre sans difficulté dans les transformations à appliquer aux points. Par conséquent, mis à part la phase de calcul de sa position, le déplacement de la caméra n'est pas pénalisant en temps de calcul.
Nous sommes à présent en mesure de représenter complètement une scène en 3 dimensions avec les mouvements de caméra quelconques.
Il reste cependant une difficulté pratique : jusqu'à présent, on a considéré qu'on connaissait la position des points dans un repère unique; seulement il est nettement plus confortable d'associer les points de chaque objet à un repère qui lui soit propre.
Ainsi dans un simulateur de vol par exemple, on décrira chaque engin dans un repère qui lui est propre et pour construire la scène à l'écran il sera nécessaire de regrouper toutes les machines donc de calculer la position des points dans un repère général.
Mais comment passer d'un repère à l'autre ?
PiedDePage(); ?>