天天看點

M2檔案頭

M2檔案中的資訊大體是這樣的

全局紋理清單 全局頂點清單

  • Position
  • Blend weights
  • Blend indices
  • Normal
  • Texture coordinates

LOD (每個模型共4級?)

  • Vertex indices (這級LOD用到的頂點 為全局頂點清單的索引)
  • Face indices (每個三角形有三個, 同樣是全局頂點清單中的索引)
  • Vertex properties (每個頂點索引有一個, 未知)
  • Submeshes (一般每種材質一個)
  • Texture units (引用Subemesh, 全局紋理清單的索引, 綁定紋理單元的數目)

全局包圍體 (用來碰撞檢測?) 動畫(Animations, global sequences) 骨骼(Skeleton) 額外的渲染資訊: 顔色, 透明度, 紋理動畫, 模型混合等. 特效: 條帶, 粒子 燈光 錄影機

struct ModelHeader {  
 char id[4];                 //"MD20"  
    uint8 version[4];  
    uint32 nameLength;          //model name length (including /0) 
    uint32 nameOfs;             //model name offset  
    uint32 type;                //Model type? always 0, 1 or 3 (mostly 0)  
    uint32 nGlobalSequences;    //number of global sequences  
    uint32 ofsGlobalSequences;  //offset to global sequences  
    uint32 nAnimations;         //number of animation sequences  
    uint32 ofsAnimations;       //offset to animation sequences  
    uint32 nC;  
    uint32 ofsC;  
    uint32 nD;                  //always 201 or 203 depending on WoW client version  
    uint32 ofsD;  
    uint32 nBones;              //number of bones  
    uint32 ofsBones;            //offset to bones  
    uint32 nF;                  //bone lookup table  
    uint32 ofsF;  
    uint32 nVertices;           //number of vertices  
    uint32 ofsVertices;         //offset to vertices  
    uint32 nViews;              //number of views (LOD versions?) 4 for every model  
    uint32 ofsViews;            //offset to views  
    uint32 nColors;             //number of color definitions  
    uint32 ofsColors;           //offset to color definitions  
    uint32 nTextures;           //number of textures  
    uint32 ofsTextures;         //offset to texture definitions  
    uint32 nTransparency;       //number of transparency definitions  
    uint32 ofsTransparency;     //offset to transparency definitions  
    uint32 nI;                  // always unused ? 
    uint32 ofsI;  
    uint32 nTexAnims;           //number of texture animations  
    uint32 ofsTexAnims;         //offset to texture animations  
    uint32 nTexReplace;  
    uint32 ofsTexReplace;  
    uint32 nTexFlags;           //number of blending mode definitions  
    uint32 ofsTexFlags;         //offset to blending mode definitions  
    uint32 nY;                  //bone lookup table  
    uint32 ofsY;  
    uint32 nTexLookup;          //number of texture lookup table entries  
    uint32 ofsTexLookup;        //offset to texture lookup table  
    uint32 nTexUnitLookup;      //texture unit definitions?  
    uint32 ofsTexUnitLookup;  
    uint32 nTransparencyLookup; //number of transparency lookup table entries  
    uint32 ofsTransparencyLookup;//offset to transparency lookup table  
    uint32 nTexAnimLookup;      //number of texture animation lookup table entries  
    uint32 ofsTexAnimLookup;  
 float floats[14];  
    uint32 nBoundingTriangles;  
    uint32 ofsBoundingTriangles;  
    uint32 nBoundingVertices;  
    uint32 ofsBoundingVertices;  
    uint32 nBoundingNormals;  
    uint32 ofsBoundingNormals;  
    uint32 nAttachments;  
    uint32 ofsAttachments;  
    uint32 nAttachLookup;  
    uint32 ofsAttachLookup;  
    uint32 nQ;  
    uint32 ofsQ;  
    uint32 nLights;             //number of lights   
    uint32 ofsLights;           //offset to lights  
    uint32 nCameras;            //number of cameras  
    uint32 ofsCameras;          //offset to cameras  
    uint32 nT;  
    uint32 ofsT;  
    uint32 nRibbonEmitters;     //number of ribbon emitters   
    uint32 ofsRibbonEmitters;   //offset to ribbon emitters  
    uint32 nParticleEmitters;   //number of particle emitters  
    uint32 ofsParticleEmitters; //offset to particle emitters  
};            

複制

這把刀看起來挺漂亮, 就拿它開刀了:

16進制檔案分析: