Coordonnées globales et locales

 

Les coordonnées globales sont les coordonnées d'un objet par rapport au point 0 du monde, alors que les coordonnées locales sont calculées par rapport à l'objet parent. Si l'objet n'a pas de parent les deux coordonnées sont identiques. Ceci est valable pour la position, l'échelle et la rotation. Toutes les trois peuvent être locales ou globales. Les valeurs affichées dans l'onglet coordonnées du gestionnaire d'attributs sont toujours locales. Seul le gestionnaire de coordonnées peut être réglé pour afficher les valeurs globales. Lorsque vous utilisez un nœud d'objet les deux type de coordonnées sont disponibles. Seule l'échelle globale n'est pas disponible du fait qu'elle n'est pratiquement jamais utilisée.

La base de toutes ces coordonnées est la matrice. C'est une matrice de 4x4, réduite à 3x4 pour en faciliter l'utilisation.

Une matrice consiste en 4 vecteurs, avec 3 valeurs chacun.
V0 contient la position (décalage) pendant que V1-V3 contiennent la rotation et l'échelle. V1-V3 ne sont pas utilisables directement. Quiconque est intéressé par plus de détails sur le fonctionnement des matrices devrait consulter le chapitre de Mikael Sternes consacré aux matrices et qui se trouve dans la documentation de C.O.F.F.E.E. SDK sur plugincafe.
Si nous avons besoin d'accéder à ces vecteurs nous pouvons utiliser les nœuds adaptateurs prévus pour cet usage.

Pourquoi se donner la peine d'utiliser quelque chose d'aussi complexe qu'une matrice ? Eh bien, cela peut être complexe mais cela rend les choses plus faciles. Les matrices stockent toutes les informations dont nous avons besoin en un paquet unique et permettent quelques astuces qui rendent la vie plus facile.

Un bon exemple est ce que vous connaissez sous le nom d'expression cible. Comment vous y prendriez vous pour recréer cette expression ? Certains d'entre vous, qui connaissent la trigonométrie pourraient commencer avec des sinus et cosinus mais la voie la plus facile passe par les vecteurs et les matrices. L'élément principal dont nous avons besoin est la différence des vecteurs entre l'objet qui doit s'orienter et sa cible. Nous aurons besoin des coordonnées globales pour cela car l'expression doit agir indépendamment de la hiérarchie des objets. En soustrayant un vecteur de l'autre nous obtenons un vecteur de la différence que vous pouvez imaginer comme une flèche pointant d'un objet vers l'autre.

Ce vecteur différence est tout ce dont nous avons besoin, excepté que nous ne pouvons pas encore l'utiliser pour faire pivoter l'objet. Nous allons avoir besoin d'une nouvelle matrice basée sur ce vecteur. Pour cela il existe un nœud tout prêt appelé Vecteur -> Matrice, il crée une matrice qui, une fois connectée à l'entrée matrice globale d'un objet, va l'aligner en fonction du vecteur différence, mais il manque encore quelque chose d'important. Le vecteur de différence ne contient aucune information su sa position de départ (rappelez-vous le port V0 d'une matrice). Nous pouvons corriger cela en séparant les différents composants de la matrice puis en injectant la position originale de l'objet.
L'expression complète ressemble à l'illustration ci-dessous et elle est disponible en tant que scène ici

Pour rendre les choses un petit peu plus intéressantes nous allons jeter un coup d'œil à une solution légèrement différente. La base (vecteur différence) est la même, mais plutôt que d'assigner directement la matrice nous utiliserons uniquement une rotation. Nous disposons pour cela du nœud Matrice->HPB. Pour activer le port de sortie du vecteur de rotation il suffit de cliquer sur le carré rouge dans le coin supérieur droit du nœud et de le sélectionner. Maintenant injectez cette rotation dans la rotation globale de l'objet. Vous trouverez cette scène ici.

Les deux expressions donnent le même résultat.

Retour à l'index