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进制文件分析:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GIS讲堂

Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)

咱们书接上文,在上文,实现了基于距离的空间聚类的算法实现,在本文,将继续介绍空间聚类之基于区域范围的实现方式,好了,闲言少叙,先看看具体的效果:

1645
来自专栏walterlv - 吕毅的博客

用动画的方式画出任意的路径(直线、曲线、折现)

发布于 2017-11-20 00:49 更新于 2017-11...

1002
来自专栏IMWeb前端团队

前端如何呼风唤雨

创世纪第一章 首卷原文 起初我创造了canvas 。 我说,要有雨,就有了雨; 我说,要有雪,就有了雪。 而对于前端来说,canvas即是天地 在canv...

3417
来自专栏HT

基于HT for Web的3D拓扑树的实现

在HT for Web中2D和3D应用都支持树状结构数据的展示,展现效果各异,2D上的树状结构在展现层级关系明显,但是如果数据量大的话,看起来就没那么直观,找到...

2345
来自专栏Flutter入门

Android OpenGL ES(五)-结合相机

上文中我们已经实现了在纹理上添加滤镜的效果。这编文章就是将OpenGl和相机结合到一起。

3903
来自专栏hightopo

基于HT for Web的3D树的实现

1112
来自专栏菩提树下的杨过

“AS3.0高级动画编程”学习:第一章高级碰撞检测

AdvancED ActionScript 3.0 Animation 是Keith Peters大师继"Make Things Move"之后的又一力作,网上...

21510
来自专栏hightopo

基于HTML5的3D网络拓扑树呈现

1582
来自专栏游戏杂谈

as3绘制抛物线

一般做页游的过程中,特效的释放可能是不是固定位置的播放,是需要进行“运动的”(其实就是移动特效这个影响剪辑)。举个例子:步兵射箭,不确定箭发射的方向,事先也不...

1082
来自专栏游戏开发那些事

【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

1402

扫码关注云+社区

领取腾讯云代金券