Animation&Speicher sparen
-
Morgen zusammen,
Frage: wie arbeite ich Ressourcensparend mit Animationspfaden?
Gleich vorweg:
Mir ist die prinzipielle Funktionsweise von Animationspfaden bekannt!
Ich habe vor in meiner Implementierung für jedes animierte Objekt eine initiale Translationsmatrix und eine initiale Rotationsmatrix im Objekt selbst zu kapseln, um stets über die Ausgangslage des Objekts im R3 informiert zu sein.
Mit jedem Renderschritt sollen dann, falls das Objekt animiert ist, die aktuelle Translations- und die Rotationsmatrix des Animationspfades ermittelt werden und zu den Initialmatrizen multipliziert werden.D.h.: AktuelleMatrix = InitialeRotation*AktuelleAnimationsRotation* InitialeTranslation*AktuelleAnimationsTranslation
Somit hätte ich für jeden Animationsschritt alle erforderlichen Animationsdaten in einer Matrix zusammengefasst.
Diese Matrix könnte ich dann in OpenGL nutzen (glMultMatrixf) oder anderweitig auswerten.Jetzt müssen diese Matrizen für jeden Animationsschritt ja irgendwo herkommen.
Eine Möglichkeit wäre:
Ich halte die Animation objektorientiert im Speicher.
D.h.: Ich habe auf eine Animation der Länge n Zugriff, wobei in jedem Animationsschritt vier Indizes abgelegt sind. Diese vier Indizes stehen jeweils für die aktuelle Position sowie für die drei Achsen des aktuellen lokalen Koordinatensystems und verweisen auf ein Vektorenarray, das alle in der Animation verwendeten Vektoren enthält. Auf diese Art und Weise erhoffe ich mir eine erhebliche Speicherersparnis. Müsste ja auch eigentlich eintreten. Wenn ich für jeden Animationsschritt die jeweilige Vektoren oder gar zwei komplette Matrizen abspeichern müsste, dann würde ich mit Sicherheit so um die 35% mehr Speicher verbraten.
Das ändert aber nichts an der Tatsache, dass ich alle Animationsschritte abspeichere. Jetzt könnte man natürlich sagen: Dann verwende doch für den Animationspfad eine Funktion!
Wäre prinzipiell eine Lösung. Nur, ist es, zumindest für mich, recht schwierig eine Animationspfadfunktion zu entwerfen, die nicht nur Translationen sondern auch Rotationen berücksichtigt. Und selbst wenn dies möglich wäre, könnte doch die Berechnung eines solchen Animationsschrittes so aufwendig sein, dass die Framerate gedrückt wird!Hatte schon einmal jemand von euch mit einem derartigen Problem zu kämpfen?
Wäre schön, wenn mir jemand einen kleinen Tipp geben könnte, wie im Rahmen der professionellen 3DProgrammierung/Spieleprogrammierung solche Probleme angegangen werden!Danke!
Grüße,
TS++