Estoy tratando de crear un gráfico de escena para mi juego 3D en el que las transformaciones de cada objeto son relativas a su padre. Cada nodo del gráfico tiene un vector de Rotación, Escala y Traducción.3D Relativo a las Transformaciones Absolutas
¿Cuál es la forma correcta de combinar las matrices de transformación relativa para obtener la transformación absoluta de un objeto? Me gustaría que también pudieras explicar tu solución.
Aquí es un ejemplo de hacerlo mal:
En realidad, esto resultó ser la solución:
Matrix GetAbsoluteTransformation()
{
if (!this.IsRoot())
{
return this.Transformation * this.Parent.GetAbsoluteTransformation();
}
else
{
return this.Transformation;
}
}
En este caso, cuando se gira el nodo padre, escalado o movido, el niño se transforma la misma cantidad, que es un comportamiento correcto!
Pero el niño solo girará alrededor de su propio origen y no se mueve alrededor del origen de los padres.
Aplicaciones:
hay un modelo de automóvil con cuatro ruedas. Las ruedas están colocadas de forma relativa alrededor del origen del automóvil. Las ruedas pueden girar al igual que las ruedas reales. Si ahora giro el auto, las ruedas deberían permanecer unidas a él en todo momento. En este caso, el automóvil es la raíz y las ruedas son los nódulos infantiles.
Otro ejemplo sería un modelo del sistema solar. Los planetas giran alrededor de su propio eje, se mueven alrededor del sol y las lunas se mueven alrededor de los planetas.
Resulta que mi primera idea de cómo hacerlo, que luego consideré como no adecuada, ¡en realidad fue la solución! Pasé las últimas horas tratando de resolver esto. * facepalm * ¡Gracias a todos por la ayuda rápida y precisa! – Lucius