剑孤寒的小站

人生的价值不是用时间,而是用深度去衡量的!
posts - 75, comments - 290, trackbacks - 0, articles - 0

英雄传说6模型文件分析1

Posted on 2009-05-30 17:14 剑孤寒 阅读(1753) 评论(1)  编辑 收藏 引用 所属分类: 游戏编程

    一直很喜欢英雄传说6的模型,正好这两天有空,就琢磨着怎么把游戏模型给提取出来。
    为了不重复造轮子,先到google上搜了一下是否已有提取工具,结果发现除GameViewer能查看3D模型外,其它的工具只能提取2D图片。遗憾的是GameViewer仅能导出它自己专有格式的模型文件,所以对我来说没啥用(呃,真是应了GameViewer这个名字,只能看而已T_T),那么就自己动手吧!
    先把游戏所有x模型文件解出来,按照先易后难的原则先把模型文件按大小排序,选中最小的文件"BLACK00.X"并用16进制编辑工具打开。
    前面是场景节点定义和模型定义,往下看到的一个文件名"black.bmp",估计是前面的模型用到的纹理文件了,那么顶点数据应该就在这附近了,接着往下看,看到有很多有规律的FFFFFFFF,嗯,应该是顶点颜色吧,算了一下FFFFFFFF之间的间隔是40字节,猜测应该是下面这样的结构:

struct VertexFVF
 
{
  
float x, y, z;         //坐标
  float nx, ny, nz;      //法向量
  DWORD color;           //顶点颜色
  DWORD specular;        //反射光颜色
  float u, v;            //纹理坐标
 }
;
数了一下,这里一共有四个顶点,应该是矩形的四个角,肯定什么地方有顶点索引的记录,往前翻了翻,果然发现顶点索引记录。
    至此,顶点和纹理数据都知道了,先写了个小程序验证了一下,结果是画了个一个黑矩形出来,和在GameViewer里看到的一样,看了看表也差不多到吃饭的时间了,吃过饭再进行后面的分析吧^_^

<待续>

ps.
顺便分析了一下GameViewer的模型文件,
文件头四个字节为文件标识,后面是世界矩阵啥的。
从0x58开始是顶点信息,以0结尾,
再后面是顶点索引记录,同样以0结尾,
接着有一个数值标识用到的纹理文件名长度,
中间不知道为啥要空三个0,
然后是纹理文件名

Feedback

# re: 英雄传说6模型文件分析1  回复  更多评论   

2009-06-04 22:35 by 剑孤寒
今天有空又看了一下,以前的理解有误,索引数据是紧接着顶点数据的,
结构如下:

贴图名
未知(字节不定,以0x0000803f再加8个不知道干啥的字节结尾)
顶点数(DWORD)
顶点数据(前面提到的VertexFVF)
索引数(DWORD)
索引数据(UINT16)

另外,
英雄传说6中specular这个东东比较特殊,
看了一下解出来的map.vs,
specular是直接加上去的,
结果就产生了漂亮而且效率高的假光照

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理