MD2帧动画模型载入.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MD2文件简介 MD2文件是Quake2专用模型文件。他是基于帧动画实现模型的 动态活动的(播放多个连续的帧来实现 3D模型的动态展示)。因此, 一个MD2文件,实际上是有多个帧组成的 MD2模型文件(* md2) 以及对应的纹理文件(*. pcx ,*bmp等)组成。 如图: 模型tris. ID2砧图嗣.xh完藝业示的模型 其中MD2模型文件(*. md2)又有两部分组成,头文件和数据区 头文件的格式是固定的,定义了 MD2文件的基本信息,如文件的标 志,版本号,MD2文件中含有几个帧等信息。头文件结构如下(对每 个MD2文件都是一样的): /** MD2文件头*/ struct tMd2Header int magic; /** 文件标志*/其值必须为IDP2 int version; /**<文件版本号*/其值为8 int skinWidth; /** 纹理宽度*/ int skinHeight; /** 纹理高度*/ int frameSize; /** 每一帧的字节数*/ int numSkins; /** 纹理数目*/ int numVertices; /**<顶点数目(每一帧中都是一样的)*/ int numTexCoords; /** 纹理坐标数目*/ int numTriangles; /** 三角行数目*/ int numGlCommands; /** g l命令数目*/ int numFrames; /** 总帧数*/ int offsetSkins; /** 纹理的偏移位置 */ int offsetTexCoords; /** 纹理坐标的偏移位置 */ int offsetTriangles; /** 三角形索引的偏移位置 */ int offsetFrames; /** 第一帧的偏移位置 */ int offsetGlCommands; /** OPenGL 命令的偏移位置 */ int offsetEnd; /** 文件结尾偏移位置 */ }; 而对于MD2文件的数据区,则是不同的MD2有不同的大小(很明 显,不同的模型所含的帧数,纹理数目等数据是不同的)。对于读取 MD2的数据区时还应该注意,由于 MD2原文件对帧的顶点信息(将 float 存储为 BYTE 型 ) , 纹理坐标信息 (int 存储为 short) 都进行 了压缩,因此在读取上面两个信息时,都要进行解压缩。 他们的解压公式为: 帧的顶点解压 : x = 缩放比例 * v[0] + 偏移量; y = 缩放比例 * v[1] + 偏移量 z = 缩放比例 * v[2] + 偏移量 其中缩放比例,偏移量在帧结构体中定义。 纹理坐标解压 : Like for vertices, data is compresed. Here we use short (2 bytes) instead of float (4 bytes) for storing texture coordinates. But to use them, we must convert them to float because texture coordinates range from 0.0 to 1.0, and if we kept short values, we could have only 0 or 1 and any intermediate value! So how to uncompress them? Its quite simple. Divide the short value by the texture size : 公式如下: RealST[i].s = (float)texCoord[i].s / header.skinwidth; RealST[i].t = (float)texCoord[i].t / header.skinheight; 读取 MD2 文件 前面说过,MD2文件是基于帧动画的模型文件,因此,一个 *.md2 文件实际上是一个有许多帧的集合体 (每个帧又由许多三角形组成一 个网络,每个三角形又由 3的顶点组成,每个顶点又由 (x,y,z) 组成)。 对于MD2文件的读取,实质上是我们把MD2文件中的帧一个个读取到 我们自定义的MD2文件对象中。当我们把所有的帧都统一存储在我们 定义的MD2文件对象(*pModel)后,我们对于MD2文件的读取就完成 了。但事实是这样的吗,当然不是!我们此时只是存储了一个个静止 的帧(其实就是一个个摆出静止动作的 3D模型),我们下面的任务, 就是区分这些帧都是属于那些动作的, (如 0~16帧属于跑步的动作, 17~20帧属于射击的动作, 20~32 帧属于敬礼的动作)并将它

文档评论(0)

wq1987 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档