Maintenant que nous savons créer des objets et leur donner une apparence particulière, nous allons pouvoir les transformer et les positionner dans la scène.
Les objets précédents peuvent être manipulés par les opérations géométriques usuelles de translation, rotation et homothétie. Il existe un nœud du langage permettant de procéder simultanément au positionnement (translation, rotation) et à la transformation (homothétie) des formes géométriques:
Transform {
center 0 0 0
translation 0 0 0
rotation 0 0 1 0
scale 1 1 1
scaleOrientation 0 0 1 0
children [ ... ]
}
Ce nœud fait partie de ce qu'on appelle les «nœuds de groupe». Ce sont des nœuds qui ont la propriété de pouvoir contenir d'autres nœuds du langage dans leurs paramètres.
Ici, le paramètre children contient d'autres nœuds (en particulier des Shape), auxquels les transformations géométriques seront appliquées.
![]() | Les transformations géométriques effectuées par ce nœud sont les
suivantes: translation déplace l'objet selon les axes X Y et Z. |
![]() | rotation (x y z a) tourne de a (en radians) autour du vecteur (x y
z). |
![]() | scale (homothétie) modifie l'échelle selon les 3 axes du repère
défini par scaleOrientation (cet axe fonctionne de la même manière
que le paramètre rotation). Center permet de spécifier un
centre pour l'homothétie. |
Exemple de translation :
Transform { # X Y Z translation 2.0 0.0 0.0 children [ . . . ] }
Référentiel du monde |
Référentiel translaté |
Objet translaté |
Exemple de rotation :
Transform { # X Y Z Angle rotation 0.0 0.0 1.0 0.52 children [ . . . ] }
Référentiel du monde
![]() |
Référentiel orienté
![]() | Objet orienté ![]() |
Sens des rotations :
![]() | Les rotations positives se font dans le sens trigonométrique |
![]() | Règle de la main droite pour la définition des
rotations.
![]() Ouvrir la main | |
![]() | Lever le pouce et l'orienter dans le sens positif de l'axe de rotation |
![]() | La direction d'enroulement des doigts est une rotation positive |
![]() Rotation autour de l'axe X |
![]() Rotation autour de l'axe Y |
![]() Rotation autour de l'axe Z |
Mise à l'échelle :
Transform { # X Y Z scale 0.5 0.5 0.5 children [ . . . ] }
Référentiel du monde
![]() |
Référentiel redimensionné
![]() | Objet redimensionné
![]() |
![]() | Il est fortement conseillé au départ de ne pas combiner plusieurs transformations dans un même nœud Transform |