Rtm Binarised File Format: Difference between revisions
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