J'essaie de créer un graphe de scène pour mon jeu 3D dans lequel les transformations de chaque objet sont relatives à son parent. Chaque noeud du graphe a un vecteur Rotation, Scaling et Translation.3D par rapport aux transformations absolues
Quelle est la bonne façon de combiner les matrices de transformation relatives pour obtenir la transformation absolue d'un objet? Je serais heureux si vous pouviez également expliquer votre solution.
Voici un exemple de faire mal:
Cela en fait avéré être la solution:
Matrix GetAbsoluteTransformation()
{
if (!this.IsRoot())
{
return this.Transformation * this.Parent.GetAbsoluteTransformation();
}
else
{
return this.Transformation;
}
}
Dans ce cas, lorsque le nœud parent est mis en rotation, mis à l'échelle ou déplacé, l'enfant est transformé le même montant, ce qui est un comportement correct!
Mais l'enfant tourne uniquement autour de sa propre origine et ne se déplace pas autour de l'origine du parent.
Applications:
Il y a un modèle de voiture à quatre roues. Les roues sont positionnées de manière relative autour de l'origine de la voiture. Les roues peuvent tourner comme les vraies roues. Si je fais maintenant tourner la voiture, les roues devraient toujours rester attachées. Dans ce cas, la voiture est la racine et les roues sont les nœuds de l'enfant.
Un autre exemple serait un modèle du système solaire. Les planètes tournent autour de leur propre axe, se déplacent autour du soleil, et les lunes se déplacent autour des planètes.
Il s'avère que ma première idée de comment le faire, que j'ai alors considérée comme inadaptée, était en fait la solution! J'ai passé ces dernières heures à essayer de résoudre ça. * facepalm * Merci à tous pour l'aide rapide et précise! – Lucius