#pragma once #include "Vec3.h" namespace Framework { class Skelett; class Knochen; class Animation3D { private: struct KnochenData { KnochenData *next; double time = 0; Vec3<float> pos; Vec3<float> rot; }; KnochenData *kd[ MAX_KNOCHEN_ANZ ]; double maxTime; int ref; // l�scht eine KnochenData Struktur void deleteKnochenData( KnochenData *d ); public: // Konstruktor __declspec( dllexport ) Animation3D(); // Destructor __declspec( dllexport ) ~Animation3D(); // F�gt f�r einen bestimmten Knochen ein Keyframe hinzu // kId: Die Id des Knochens // time: Die Zeit, die vergehen soll bis der Knochen die Position und die Rotation des Keyframes follst�ndig erreicht hat // pos: Die Position des Knochens die erreicht werden soll in Modellkoordinaten // rot: Die Rotation des Knochens um seine Position die erreicht werden soll __declspec( dllexport ) void addKeyFrame( int kId, double time, Vec3<float> pos, Vec3<float> rot ); // Wendet die Animation auf ein bestimmtes Skelett an // zS: Das Skelett // timeOffset: zeit in sekunden, die diese Animation bereits auf dem Skelett angewendet wurde. Wird automatisch von der Animation aktualisiert. // sec: zeit in Sekunden, die vergangen ist seit dem diese Methode zuletzt f�r das Skelett aufgerufen wurde __declspec( dllexport ) void apply( Skelett *zS, double &timeOffset, double sec ) const; // Wendet die Animation auf ein bestimmten Knochen an // zS: Der Knochen // timeOffset: zeit in sekunden, die diese Animation bereits auf dem Knochen angewendet wurde. // sec: zeit in Sekunden, die vergangen ist seit dem diese Methode zuletzt f�r dem Knochen aufgerufen wurde __declspec( dllexport ) void apply( Knochen *zK, double timeOffset, double sec ) const; // Erh�ht den Reference Counting Z�hler. // return: this. __declspec( dllexport ) Animation3D *getThis(); // Verringert den Reference Counting Z�hler. Wenn der Z�hler 0 erreicht, wird das Zeichnung automatisch gel�scht. // return: 0. __declspec( dllexport ) Animation3D *release(); }; }