MD2格式简介

转载自: http://www.cnblogs.com/tanhao/archive/2009/09/24/1573376.html

                http://blog.csdn.net/lostgdi731/article/details/6113041

 

        MD2是Quake2中使用的模型文件格式,由于其比较简单,容易实现,所以应用很广,是一种经典的动画模型格式。该文件格式由2部分组成:一部分是文件头,包含了文件ID号、版本号和有关模型的各种数据的起始地址等;另一部分是文件的主体,包含了有关模型的各种数据,如顶点数据、纹理数据、法向量数据等。MD2是基于关键帧动画的。
         动画就是连续出现的画面,在3D动画中,在一个在两个差别很大的动作之间进行插值,使得3D模型的各个部分连续运动而得到动画的效果。比如:将手臂在左边时的3D模型和手臂在右边时的3D模型进行保留,然后根据时间在这两个模型之间进行插值,让其在某个时刻显示其在中间的模型,如此连续的显示便构成了动画的效果。
因此,MD2文件中便存储了动画的各个关键帧,只不过可能某些动作的完成需要多个关键帧,另外,我们了解了动画的原理,我们便知道,在动画的运动过程中,模型的顶点个数和纹理是相同的,只是在某个时刻模型的顶点坐标有差异。
 

       MD2格式是由id Software公司开发的,首先用在了Quake II游戏中。id Software后来开发了Quake II游戏引擎的源代码,自此以后,Quake II模型格式变得很流行,因为它的动画很稳定,容易实现,制作模型的工具花费也不多。

Quake II格式是通过关键帧实现动画的。模型的顶点定位在关键帧上。在动画过程中,顶点被映射到两个关键帧之间的时间线上的对应位置。

不像其他模型格式,在模型创建过程中Quake II模型不使用骨骼层次或蒙皮权重,这些信息的缺失会导致模型关节周围的蒙皮不真实的褶皱。但是你可以通过在设计模型时仔细的规划避免(或使之最小)这种情况的发生。近距离观察Quake II模型时蒙皮会有些缺陷,但在远距离时很难注意到它们。

Quake II模型使用的三角形不能超过4,096个。

深入理解.md2数据

让我们看一下.md2文件的结构和它如何实现动画。

Quake II数据以二进制方式存储,可以对顶点和索引进行压缩。为了帮你解开数据,文件开始包含了一个文件头显示文件类型,纹理属性,顶点属性,顶点数量,帧数量和二进制偏移(处理顶点和动画帧的细节)。下面是标准的.md2文件头:

struct md2
{
    int fileFormatVersion; // file type which must equal 844121161 
    int version; // file format version which must be 8 
    int skinWidth; // texture width 
    int skinHeight; // texture height 
    int frameSize; // bytes per frame 
    int numSkins; // total skins used 
    int numVertices; // total vertices per frame 
    int numUVs; // total texture UV's 
    int numTris; // number of triangle coordinates 
    int numglCommands; // number of glCommands 
    int numFrames; // number of keyframes 
    int ofsSkins; // binary offset to skin data 
    int ofsUV; // offset to texture UV data 
    int ofsTriangle; // offset to triangle list data 
    int ofsFrames; // offset to frame data 
    int ofsglcmds; // offset to OpenGL command data 
    int ofsEnd; // offset to end of file 
};

每帧中的每个顶点都是被索引化的,索引的顺序就是三角形序列的顺序。当文件加载时,索引用来生成顶点坐标的集合,这个坐标用来创建三角形集合。基于效率考虑,你可以使用glCommands数据重写模型加载和动画代码,以三角形带或三角扇形绘制模型。在Quake II模型中可以存储一个以上的动画,例如,你的模型可以跑、跳、挑衅、点头,蹲下或站立,你还想控制这些动作。要处理这些信息,使用.md2文件头,文件头包含了帧信息的偏移量。帧信息可以使用偏移量读取,所有帧信息从第一帧到最后一帧排列在一起,每个帧信息包含动画名称和帧数量的信息。

要确定每个动画的开始帧和结束帧,你必须解析每个帧信息匹配动画名称。一旦有了匹配动画名称的集合,你就可以将开始帧和结束帧的序号存储在这个集合中了。当你想播放想要的动画时,你可以将帧的序号设置为开始帧的序号,当到达结束帧的序号时,你可以从头播放或切换到另一个动画。

在动画播放过程中,顶点被映射到两个关键帧之间的时间线上,法线向量必须也通过这种方式进行插值。

md2格式的纹理

在Quake II游戏中,Quake II模型使用.pcx文件作为纹理。但是XNA的内容管道不支持.pcx格式。一种解决方法是使用图像编辑器将.pcx文件保存为.tga格式,你可以使用.tga文件作为纹理。一个模型文件还可以包含多张纹理,本章的Quake II模型导入器只支持一张纹理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值