1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
// Each file Data/Bones/SomeName.node.raw represents a Node
// and has an associated TransformController represented by
// Data/Animation/SomeAnim/SomeName.xfrmctrl.raw whose file
// format is listed below.
// If 1, the node has a KeyframeController. If 0, the node
// does not have a KeyframeController, but is given a
// TransformController whose transform is constant over time.
int isKeyframeController;
// Controller elements
int repeatType; // Controller::Repeat (RT_CLAMP) [set to RT_WRAP?]
double minTime; // Controller::MinTime
double maxTime; // Controller::MaxTime
double phase; // Controller::Phase
double frequency; // Controller::Frequency
int active; // Controller::Active (active = 0, so Active = false)
// The initial local transform of the node. The 'char'
// values are used to create a Wild Magic Transform object.
float matrix[9];
float translate[3];
float scale[3];
char isIdentity; // 0 or 1
char isRSMatrix; // 0 or 1
char isUniformScale; // 0 or 1
char dummy; // pad to 4-byte boundary, value irrelevant
// The remaining data when isKeyframeController is 1. There is no
// remaining data when isKeyframeController is 0. This data is used
// to create a KeyframeController object.
int numTranslations; // possibly 0
int numRotations; // possibly 0
int numScales; // possibly 0
float translationTimes[numTranslations]; // no data when numTranslations is 0
APoint translations[numTranslations]; // no data when numTranslations is 0
float rotationTimes[numRotatios]; // no data when numRotations is 0
HQuaternion rotations[numRotations]; // no data when numRotations is 0
float scaleTime[numScales]; // no data when numScales is 0
float scales[numScales]; // no data when numScales is 0
struct APoint
{
float x, y, z, w; // w = 1
};
struct HQuaternion
{
float w, x, y, z;
};
|