Positionnement

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