Hallo zusammen,
ich versuche grade ein Plugin zuschreiben worüber es möglich ist DBO-Dateien zuladen.
Wer nicht weiß wofür DBO steht:
- DBO steht für DarkBasicObject und kommt von TGC ( The Game Creators ).
- DBO-Dateien sind 2D/3D-Meshfiles ( Objektdateien )
Zurzeit kann ich DBO-Dateien laden aber ohne Animation und Effekte.
Die Klasse die das Format läd leitet von IMeshLoader ab und wird in SceneManager registriert.
Bis dahin geht auch alles wunderbar.
Nun stehe ich vor den Problem das ich die Animationen nicht in das Mesh bekomme,
dazu habe ich mir mal die Klasse CSkinnedMesh angeschaut und ist für die auswahl der benötigten Animationmöglichkeiten die beste wahl.
Info zu DBO-Animationstruktur:Code:
struct sRotateKey
{
uint64 dwTime; // time value
D3DXQUATERNION Quaternion; // quaternion 4d vector
};
struct sPositionKey
{
uint64 dwTime; // time value
D3DXVECTOR3 vecPos; // position
D3DXVECTOR3 vecPosInterpolation; // interpolation
};
struct sScaleKey
{
uint64 dwTime; // time value
D3DXVECTOR3 vecScale; // scale
D3DXVECTOR3 vecScaleInterpolation; // interpolation
};
struct sMatrixKey
{
uint64 dwTime; // time
D3DXMATRIX matMatrix; // matrix
D3DXMATRIX matInterpolation; // interpolation
};
// Animationstruktur
struct sAnimation
{
sAnimation();
~sAnimation();
char szName[MAX_STRING]; // name
uint64 dwNumPositionKeys; // number of position keys
uint64 dwNumRotateKeys; // number of rotation keys
uint64 dwNumScaleKeys; // number of scale keys
uint64 dwNumMatrixKeys; // number of matrix keys
uint64 bBoneType; // type of bone
int* piBoneOffsetList; // offset list
int iBoneOffsetListCount; // count of offset list
int iBoneFrameA; // index a
int iBoneFrameB; // index b
sPositionKey* pPositionKeys; // position keys
sRotateKey* pRotateKeys; // rotate keys
sScaleKey* pScaleKeys; // scale keys
sMatrixKey* pMatrixKeys; // and finally matrix keys
sAnimation* pNext; // next animation
D3DXMATRIX** ppBoneFrames; // matrix frame
sFrame* pFrame; // internal
};
Diese Strukturen sind für das DBO Objekt.
Nach langen hin und her muste ich feststellen das fast alle Objekte egal ob X oder DBO Datei sMatrixKey Struktur verwenden und nicht die anderen drei.
Ich weiß nicht ob ich aus der Matrix die Pos, Rot und Scale Werte herausholen soll und ob es überhaupt was bringt diese in irrlicht auf die Pos-, Rot- und ScaleKey Strukturen zusetzen.
Leider finde ich auch nichts im Internet was mir weiterhelfen könnte auch nicht im Offi-forum.
Auch der Tipp mir die Meshloader-Klassen in Source von Irrlicht anzuschauen hat mich mehr verwirrt als alles andere.
Also wie oben bereite erwähnt kann man Statiche Objekte laden und mein nächster schritt soll es sein die Animation einzubetten und danach die Effekte.
Zum Punkt Animation:Wie kann ich die Informationen aus der DBO Struktur anbesten in Irrlicht umsetzen und auf das Objekt setzen.
- Codeauszüge würden helfen.
Info noch am rande:Die gesetzten Daten lese ich über den Debugger aus mit anderen Worten ich lasse mich schritt für schritt mit hilfe des Debuggers durch die Objektstrkturen leiten um zusehen was gesetzt wurde und was nicht.
Auf dieser Art und weise habe ich auch das DBO-Format "Studiert" und die Strukturen auf´s minimalste reduziert so das nur das wichtigste drin vorkommt.
Und bitte fragt mich jetzt nicht warum ich DX-Strukturen verwende!
Die Antwort lautet: Ich werde es später alles durch die Klassen und Strukturen von Irrlicht ersetzen wenn es funktioniert.