Rotation und Translation aus Matrix

Eine Matrix zu erzeugen ist mit den vielen Methoden, die das XNA-Framework zur Verfügung stellt nicht sonderlich schwierig. Hin und wieder möchte man aber genau den umgekehrten Weg gehen und aus einer vorhandenen Matrix wieder die Ursprungswerte für die Skalierung, die Rotation und die Translation ermitteln.

Auch hier liefert uns das XNA-Framework eine interessante Methode, die uns dabei hilft, nämlich Decompose. Damit ist es problemlos möglich, die einzelnen Elemente zu ermitteln.

Aus diesen Werten kann dann, evtl. nachdem die Werte verändert werden, wieder eine Matrix erzeugt werden. Sehr einfach das Ganze:

Vector3 scale;
Vector3 translation;
Quaternion rotation;

// Werte ermitteln
myMatrix.Decompose(out scale, out rotation, out translation);

// und wieder neu erzeugen
myMatrix = Matrix.CreateScale(scale) * Matrix.CreateFromQuaternion(rotation) * Matrix.CreateTranslation(translation);

Oft ist dies aber nicht so sinnvoll. Meistens erzeugt man die Matrix ja bereits aus der Skalierung, der Translation, sowie der Rotation. Damit hat man diese Werte ja bereits. Es macht also mehr Sinn aus diesen Werten, nachdem diese verändert wurden, eine komplett neue Matrix zu erzeugen. Die Werte werden also einfach zwischengespeichert. Dies ist günstiger als zuerst Decompose aufzurufen, die Werte zu verändern und dann eine neue Matrix zu erzeugen.

Advertisements

Veröffentlicht am 21.03.2010 in Grundlagen, XNA und mit , , getaggt. Setze ein Lesezeichen auf den Permalink. Hinterlasse einen Kommentar.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: