Rtm Binarised File Format: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
m (→Structure) |
||
Line 1: | Line 1: | ||
{{unsupported-doc}} | {{unsupported-doc}} | ||
==UnBinarised Format== | |||
Binarised rtm was introduced for the Arma2 engine. For unbinarised see [[Rtm (Animation) File Format]] | |||
==Structure== | ==Structure== |
Revision as of 19:49, 30 April 2010
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[7][ThisFrameNoOfBones]; }
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