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進制檔案分析: