MD2文件格式
来源:互联网 发布:mysql 时间戳函数 编辑:程序博客网 时间:2024/06/01 10:17
MD2是一种3D模型网格存储文件格式,最早是由id Software公司为射击游戏Quake II创建的。
现今,很多游戏开发者借鉴于MD2文件格式的易用性来设计自己的模型文件。
本文来详细理解下MD2文件的结构。
参考内容《Focus On 3D Models》Chapter 3 Quake II's MD2 Models
一个MD2文件大致有以下内容
首先来看下MD2的文件头结构(Header)
iMagicNum:文件魔数,MD2文件魔数值为IDP2,转换成整型表达为844121161
iVersion:版本号,MD2文件的版本值为8
iSkinWidthPx/iSkinHeightPx:表示纹理的宽和高。虽然不同纹理可以被导入,但每个MD2模型同一时间只能使用一张纹理。
iFrameSize:每个关键帧的字节数
iNumSkins:定义的纹理数量
iNumVertices:每帧的顶点数
iNumTexCoords:纹理坐标数,无须与顶点数相同
iNumTriangles:模型中的三角形个数
iNumGLCommands:OpenGL的命令,如绘制triangle fans和triangle strips。对于导入模型的过程,该参数不是必须的
iNumFrames:帧数。每帧存有动画某个时间步的所有顶点位置信息,即一帧是一个模型当前位置的快照
iOffsetSkins/iOffsetTexCoords/iOffsetTriangles/iOffsetFrames/iOffsetGlCommands:上述信息在文件中的偏移位置
iFileSize:文件总的大小
内存中存放每帧的数据结构(Frame)如下
fScale:三个维度上的缩放比例
fTrans:三个维度上的平移
caName:该帧的名字
pVertss:该帧定义的顶点数组
一般每个顶点结构(Vertices)在内存中简单如下
通常顶点结构不是以float存放的,为了节省空间,每一个维度位置信息被压缩至一个byte,在读取之后需要再乘以一个float-point的缩放值,才能得到float的xyz信息。
三角形面片(Triangles)信息如下
在上述提及的文件头结构体中,iNumTriangles变量记录了模型所需的三角形面片数。
每个面片记录了顶点的索引值,同时还记录纹理坐标的索引,方便进行纹理的映射。
纹理结构(Texture Coordinates)与顶点类似
同样,使用short也是因为考虑空间压缩,需要通过乘以比例系数来获得float值。
绘制
在进行一帧绘制的时候,就获取当前需要绘制的frame,然后按照该帧定义的顶点集,遍历所有三角形面片的索引,进行绘制,代码片段如下:
在处理动画绘制的时候,遍历每帧,对前后两帧的每个顶点进行线性插值,插值参数t一般与时间点有关。
小结
MD2是一种含有动画的3D网格模型文件,存放动画的方式是保存关键帧的所有顶点。
- MD2文件格式
- MD2文件格式
- MD2文件格式简介
- Quake2的MD2文件格式
- Quake2的MD2文件格式
- Quake2的MD2文件格式
- MD2 文件格式详解
- Quake2的MD2文件格式
- 看Irrlicht引擎,获知md2文件格式
- Openssl-MD2
- md2格式杂记
- MD2关键帧动画
- OpenGL MD2模型显示
- MD2格式的认识
- MD2载入和绘制
- MD2模型結構解釋
- MD2模型结构解释
- MD2格式简介
- 不重启使XP环境变量生效
- 冒泡算法
- 菜单实现
- 2D游戏vs3D游戏
- 用PPA源安装unity 2D(11.04/10.10)
- MD2文件格式
- GDB调试大全
- hello world
- ILO资料
- javaScript JSP HTML Java CSS 注释
- 如何获取SIM2的imsi
- vc unicode一点知识
- android之PackageManager简介
- setPadding 与 setBackgroundDrawable