PMD格式模型的读取和显示

PMD格式模型的读取和显示


已经五月了,花了超过十天的时间研究终于出成果了,写一篇日志纪念一下。
PMD,全称Polygon Model Document,是一种三维模型格式,主要在MikuMikuDance和PMDEditor等中使用。而关于格式的说明就更少了,所以我的研究主要参考 itsuhane的mmd库。
PMD格式文件也是一种简单二进制文件,由于文件格式规范较为严格,因而文件内的chunk不是很自由,比较好解析。而VMD文件(全称Vocaloid Motion Data)描述的是模型动作,需要对模型骨骼进行插值以实现动画的效果,由于写完这篇日志后可能没有什么时间了,因而对PMD光照、材质、骨骼的部分以及VMD部分没有作深入的研究了。
原创博客,严禁未授权的转载(原博客地址:http://blog.csdn.net/jiangcaiyang123/article/details/8898734)。
演示程序下载地址: 这里

下面是程序的截图:

PMD格式模型的读取和显示_第1张图片

PMD格式模型的读取和显示_第2张图片

PMD格式模型的读取和显示_第3张图片

PMD格式模型的读取和显示_第4张图片

PMD格式模型的读取和显示_第5张图片

这里默认载入的是洛天依的模型,当然程序附带的初音ミク、镜音双子(リン、レン)、KAITO等等都可以载入(开始载入这些模型的时候还出现了小问题,后面再仔细地看了看格式说明才知道需要一些变通方法才可以正确地载入)。
程序使用Qt框架构建,使用OpenGL渲染,此外还运用了Qt的状态机框架、动画框架。关于其中的飞入-消失特效将会在一个单独的日志中进行讲解。由于知识有限,因此OpenGL渲染还是停留在glBegin()/glEnd()水平,也不知为什么让Qt程序使用多采样抗锯齿并不成功。此外不知为什么,在Ubuntu13.04下打开这个程序洛天依的眼睛没了(大概是luo_eye.bmp文件无法载入)希望在下一个版本中加以改进吧。

下面是制作本程序的黑历史,现在看来简直是糟糕透了。

#1 没有处理好纹理

PMD格式模型的读取和显示_第6张图片

#2 同样没有处理好纹理……

PMD格式模型的读取和显示_第7张图片

#3 可怕!ミク没有眼睛l了!

PMD格式模型的读取和显示_第8张图片

#4 虽然有纹理了,但是纹理坐标错了

PMD格式模型的读取和显示_第9张图片

#5 只用线段绘制,还真像抽象画

PMD格式模型的读取和显示_第10张图片

#6 仰视洛天依……o(>﹏<)o

PMD格式模型的读取和显示_第11张图片

你可能感兴趣的:(PMD格式模型的读取和显示)