Sto provando a creare un grafico di scena per il mio gioco 3D in cui le trasformazioni di ogni oggetto sono relative al suo genitore. Ogni nodo del grafico ha un vettore Rotazione, Ridimensionamento e Traslazione.3D relativo alle trasformazioni assolute
Qual è il modo corretto di combinare le matrici di trasformazione relative per ottenere la trasformazione assoluta di un oggetto? Sarei felice se potessi anche spiegare la tua soluzione.
Ecco un esempio di farlo sbagliato:
Questo in realtà si è rivelata la soluzione:
Matrix GetAbsoluteTransformation()
{
if (!this.IsRoot())
{
return this.Transformation * this.Parent.GetAbsoluteTransformation();
}
else
{
return this.Transformation;
}
}
In questo caso, quando il nodo padre viene ruotato, ridimensionato o spostato, il bambino viene trasformato nella stessa quantità, che è un comportamento corretto!
Ma il bambino ruoterà solo attorno alla propria origine e non si muoverà attorno all'origine del genitore.
Applicazioni:
c'è un modello di auto a quattro ruote. Le ruote sono relative posizionate attorno all'origine dell'auto. Le ruote possono ruotare proprio come fanno le ruote reali. Se ora ruoto la macchina, le ruote dovrebbero rimanere sempre attaccate ad essa. In questo caso l'auto è la radice e le ruote sono i nodi figlio.
Un altro esempio potrebbe essere un modello del sistema solare. I pianeti ruotano intorno al proprio asse, si muovono intorno al sole e le lune si muovono attorno ai pianeti.
Scopriamo che la mia prima idea di come farlo, che ho poi considerato non adatto, era in realtà la soluzione! Ho passato le ultime ore a cercare di risolvere questo problema. * facepalm * Grazie a tutti per l'aiuto rapido e preciso! – Lucius