Rtm Binarised File Format: Difference between revisions
Jump to navigation
Jump to search
m (→Structure) |
|||
Line 45: | Line 45: | ||
{ | { | ||
ulong ThisFrameNoOfBones; // Should always be same as nBones | ulong ThisFrameNoOfBones; // Should always be same as nBones | ||
short Transforms[ | short Transforms[ThisFrameNoOfBones][7]; | ||
} | } | ||
Revision as of 15:22, 9 February 2013
UnBinarised Format
Binarised rtm was introduced for the Arma2 engine. For unbinarised see Rtm (Animation) File Format
Structure
RTMB { RTMBHeader Header; byte Always1; // ?? XYZTriplet Displacement; ulong nFrames; // 55 eg ulong Generally0; // ?? ulong nBones; // same value as NoOfBones ulong NoOfBones; // 128 eg Asciiz BoneNames[NoOfBones]; // "weapon\0\rightarm\leftarm\etc..." CompressedFloats FrameTimes; CompressedFrames Frames[nFrames]; }
BoneNames are the traditional Bis catenated string. Unlike some however, there is no terminating null because the count is known
RTMBHeader
RTMBHeader { char[4] Type; //"BMTR" ulong Version; // =3 }
CompressedFloats
CompressedFloats { ulong nFrameTimes; // should always be same as nFrames float Array[nFrameTimes]; }
This is the traditional Bis potentially compressed structure, where, if, the total bytes stored >=1024, the array is compressed (in lzo format)
CompressedFrames
CompressedFrames { ulong ThisFrameNoOfBones; // Should always be same as nBones short Transforms[ThisFrameNoOfBones][7]; }
The short values are compressed floats (7 in total) for each 'frame'
conversion to float is
float ShortToFloat(short value) {return ((float)1.0 / (65534)) * (value + 32767);}
this is suspiciously similar to ofp compressed floats
float = short * 0.045
4 floats probably are used to describe a quaternion that describes the rotation. the other 3 floats are then for the translation