Heath's Blog

There is no end, it is just the beginning! - A Game Developer's Notes

写着玩(2)——WoW角色资源读取

    早在一年前就计划把wow的资源利用起来,在业余时间可以自己做些东西。虽然去年5月份就把mpq库放到MyEngine中了,但一直抽不出整块时间安心写代码,总是在遗忘和重拾之间缓慢前行。年后,越发感觉手上的工作吊不起胃口,便决定挤时间尽快搞定它。

    wow的资源文件关系比较复杂,一个静态模型至少会涉及三类文件.m2、.skin及.blp,如果不可换肤,texture会在.m2中直接给出blp文件名,否则需要查找对应的XXXDisplayInfo.dbc。对于带动画的模型,除了上面提到的三类文件,可能还会涉及到.anim。wow中的动画大致有下面几种:骨骼、材质(纹理、颜色、透明)、粒子、条带、摄像机、光照。为了骨骼数据的复用,wow将可由一个以上模型共用的骨骼数据放到.anim文件中,而模型特有动画则会直接放在.m2中。动画的ID与名字等信息放在AnimationData.dbc中。

    wow资源所使用的坐标系与D3D有区别,旋转角度的定义也与D3D相反,三维、四维向量的转换代码如下:

 

Vector3 Conv2D3DCoordSystem(const Vector3& v)
{
	return Vector3(v._x, v._z, v._y);
}

typedef Vector4 Quaternion;

Quaternion Conv2D3DCoordSystemQuat(const Quaternion& v)
{
	return Quaternion(-v._x, -v._z, -v._y, -v._w);
}

 

 

 

 

 

 

 

 

    对于texture,根据压缩和非压缩来处理,如果为压缩格式(D3DFMT_DXT1、3、5),则先创建对应压缩格式的Texture,然后直接memory copy LockRect出来的空间;如果为非压缩格式,则先将texture数据写到内存,然后简单调用D3DXCreateTextureFromFileInMemoryEx创建格式为D3DFMT_A8B8G8R8的纹理。

    下图为整个框架设计的简易类图(目前还不是很合理)

System

上两张截图:

 MyEnine_1

 MyEnine_2

P.S. 贴图没做融合、光照还未处理 :P

 

参考:

[1] wowmodelview, www.wowmodelviewer.org

[2] Game Engine Architecture, Jason Gregory, A K Peters, 2009.7

posted on 2010-04-24 12:31 Heath 阅读(2315) 评论(2)  编辑 收藏 引用 所属分类: Game Development

Feedback

# re: 写着玩(2)——WoW角色资源读取 2010-04-24 14:43 小时候可靓了

我也想拿点WOW资源来用,可无从下手,连个资源提取器都下载不到!  回复  更多评论   

# re: 写着玩(2)——WoW角色资源读取 2010-05-19 22:14 dtzleg

一般搞wow的都会从wowmodelviewer开始  回复  更多评论   


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