Ich baue gerade meine Szenenhierarchie auf und weiß nicht, wie ich Rotationsinformation speichern soll. Dass ich noch nicht genau weiß, was ich brauche und was nicht, macht die Sache nicht leichter … was mir zur Auswahl steht:
- Eine Rotationsmatrix pro Objekt.
Vorteile:- Ich brauche mit an Sicherheit grenzender Wahrscheinlichkeit das lokale Koordinatensystem jedes Objekts. Das sind wiederum nur die passenden Zeilen der Matrix – ich erhalte es also quasi gratis.
- Weniger Implementierungsaufwand – Matrizen habe ich so oder so, und wenn ich noch eine Zeile für die Verschiebung dazuschreibe, habe ich nicht nur die Rotations- sondern direkt die fertige Transformationsmatrix, mit der ich die Hierarchie durchackern kann.
Vielleicht ist die Einbindung in Physik-Engines schwieriger – die benutzen doch bestimmt alle Quaternions. (?)– Zumindest PhysX benutzt 3×4-Matrizen.- Schwer interpolierbar.
Falls ich um beliebige Achsen rotieren will, wird es haarig – dann kommt der ganze Schmach mit Euler-Winkeln (Gimbal Lock) (?)– Das ist eine Eigenschaft jeder Parametrisierung, weil wir im dreidimensionalen Raum arbeiten.- Matrizenmultiplikationen sollen nicht gerade einfach verdaulich für die CPU sein. Wenn ich die ganze Hierarchie durchgehe ist es definitiv langsamer als es Quaternions wären.
- Ein Quaternion pro Objekt.
Vorteile:Gut, wenn ich Physik-Engines integrieren möchte. (?)s.o.- Beliebige Rotationsachsen aus dem Effeff.
- Leichte Interpolierbarkeit.
- Schnell.
Wenn ich die objektlokalen Achsen haben möchte, darf ich es erst zu einer Rotationsmatrix konvertieren.– Das geht mit Vektorbefehlen in wenigen Takten- Quaternions müsste ich erst implementieren und testen.
- Ein Hybrid. Vorteile und Nachteile? Keinen Plan.
Gruß, Ky