All pastes #765245 Raw Edit

Milkshape 3D animated mesh forma

public c v1 · immutable
·published 2007-11-07 22:02 UTC
rendered paste body
////////                MilkShape 3D 1.4.0 File Format Specification//////                  This specifcation is written in C style.////// The data structures are defined in the order as they appear in the .ms3d file.////////////// max values//#define MAX_VERTICES    8192#define MAX_TRIANGLES   16384#define MAX_GROUPS      128#define MAX_MATERIALS   128#define MAX_JOINTS      128#define MAX_KEYFRAMES   216     // increase when needed//// flags//#define SELECTED        1#define HIDDEN          2#define SELECTED2       4#define DIRTY           8//// types//#ifndef bytetypedef unsigned char byte;#endif // byte#ifndef wordtypedef unsigned short word;#endif // word//// First comes the header.//typdef struct{    char    id[10];                                     // always "MS3D000000"    int     version;                                    // 3} ms3d_header_t;//// Then comes the number of vertices//word nNumVertices;//// Then comes nNumVertices * sizeof (ms3d_vertex_t)//typedef struct{    byte    flags;                                      // SELECTED | SELECTED2 | HIDDEN    float   vertex[3];                                  //    char    boneId;                                     // -1 = no bone    byte    referenceCount;} ms3d_vertex_t;//// number of triangles//word nNumTriangles;//// nNumTriangles * sizeof (ms3d_triangle_t)//typedef struct{    word    flags;                                      // SELECTED | SELECTED2 | HIDDEN    word    vertexIndices[3];                           //    float   vertexNormals[3][3];                        //    float   s[3];                                       //    float   t[3];                                       //    byte    smoothingGroup;                             // 1 - 32    byte    groupIndex;                                 //} ms3d_triangle_t;//// number of groups//word nNumGroups;//// nNumGroups * sizeof (ms3d_group_t)//typedef struct{    byte            flags;                              // SELECTED | HIDDEN    char            name[32];                           //    word            numtriangles;                       //    word            triangleIndices[numtriangles];      // the groups group the triangles    char            materialIndex;                      // -1 = no material} ms3d_group_t;//// number of materials//word nNumMaterials;//// nNumMaterials * sizeof (ms3d_material_t)//typedef struct{    char            name[32];                           //    float           ambient[4];                         //    float           diffuse[4];                         //    float           specular[4];                        //    float           emissive[4];                        //    float           shininess;                          // 0.0f - 128.0f    float           transparency;                       // 0.0f - 1.0f    char            mode;                               // 0, 1, 2 is unused now    char            texture[128];                        // texture.bmp    char            alphamap[128];                       // alpha.bmp} ms3d_material_t;//// save some keyframer data//float fAnimationFPS;float fCurrentTime;int iTotalFrames;//// number of joints//word nNumJoints;//// nNumJoints * sizeof (ms3d_joint_t)////typedef struct{    float           time;                               // time in seconds    float           rotation[3];                        // x, y, z angles} ms3d_keyframe_rot_t;typedef struct{    float           time;                               // time in seconds    float           position[3];                        // local position} ms3d_keyframe_pos_t;typedef struct{    byte            flags;                              // SELECTED | DIRTY    char            name[32];                           //    char            parentName[32];                     //    float           rotation[3];                        // local reference matrix    float           position[3];    word            numKeyFramesRot;                    //    word            numKeyFramesTrans;                  //    ms3d_keyframe_rot_t keyFramesRot[numKeyFramesRot];      // local animation matrices    ms3d_keyframe_pos_t keyFramesTrans[numKeyFramesTrans];  // local animation matrices} ms3d_joint_t;//// Mesh Transformation:// // 0. Build the transformation matrices from the rotation and position// 1. Multiply the vertices by the inverse of local reference matrix (lmatrix0)// 2. then translate the result by (lmatrix0 * keyFramesTrans)// 3. then multiply the result by (lmatrix0 * keyFramesRot)//// For normals skip step 2.//////// NOTE:  this file format may change in future versions!////// - Mete Ciragan//