Dans un programme de représentation graphiques d'objets, il faut appliquer des transformations affines aux objets pour les placer dans l'espace, soit de manière absolue, soit par rapport à d'autres objets. Ce document montre comment utiliser une structure de données en arbre pour stocker les objets afin de calculer efficacement la transformation affine de visualisation-modélisation (modelview) de chacun d'eux au moment d'effectuer le rendu.
Les objets sont placés dans un arbre qui permet de représenter les relations géométriques entre les différents objets. Considérons comme exemple une scène comportant la terre et un véhicule, lequel comporte deux roues.
Figure pleine pageL'objet racine est la scène. La scène doit être positionnée par rapport à la caméra (ce qui revient à positionner la caméra). Elle a pour cela une transformation affine de visualisation T0, comme expliqué dans Transformations de visualisation. Le sol est positionné dans la scène par une transformation affine de modélisation T2. Le chassis est positionné dans la scène par une transformation T1. Les roues sont positionnées (et orientées) par rapport au chassis, c'est pourquoi elles sont des enfants du chassis dans l'arbre. Les transformations affines de positionnement des roues par rapport aux chassis sont T3 et T4.
Chaque objet comporte donc une transformation affine qui le positionne (et l'oriente) par rapport à son objet père. Certains objets peuvent servir à regrouper d'autres objets, sans avoir eux-même de représentation graphique (c'est le cas de la scène).
Supposons que l'on cherche à calculer la transformation de visualisation-modélisation de l'objet 3. Elle est définie par :
Pour obtenir une matrice de visualisation-modélisation, il faut donc multiplier les matrices en parcourant l'arbre à partir de la racine. Pour l'objet 4 :
Les deux roues ont donc en commun la matrice T0T1 (celle du chassis). Pour éviter de calculer deux fois ce produit matriciel, on utilise le principe de la pile de transformations affines, introduit dans Transformations affines et perspective. Avant de traiter les objets fils de l'objet 1, on sauvegarde sa matrice de transformation T0T1 dans la pile. Lorsqu'on traite l'objet 3, on multiplie à droite par la matrice T2, puis on restore la matrice T0T1 stockée dans la pile lorsque le traitement est terminé. La matrice T0T1 est alors disponible pour le traitement de l'objet 4. La figure suivante montre l'état de la pile au moment du traitement de chaque objet de l'arbre. Les objets sont rangés dans l'ordre du traitement de la gauche vers la droite.
Figure pleine page