魔兽世界客户端数据研究(二)

原创 2013年05月10日 00:13:54

终于决定,还是通过wow model viewer起手,研究一下WOW的数据类型,从另一个角度,体验一把这

个唯一让我充过值的游戏。

这将是一系列随笔,即在读代码的时候,顺便记录,以理清思路和加深映象。 其中会有很多让人费

解的地方,如果有幸被某位兄弟看见,请勿见笑。

 

上次弄到nAttachLookup就不行了,这次继续弄。
最近四川地震了,所以弄得比较慢。

好吧,我们接着nAttachLookup说。
读完挂接数据后,我们接着读了堆nAttachLookup个的uint16数据。这串数据最后被存了下来。在

WMV中用了一个uint16的数组来存储,叫attLookup
经过多方面分析,这个attLookup正如其名字一样,是用来查询挂接点的。
而attLookup的值可以是以下枚举成员

enum POSITION_SLOTS
{ // wxString Attach_Names[]
    ATT_LEFT_WRIST = 0, // Mountpoint
    ATT_RIGHT_PALM,
    ATT_LEFT_PALM,
    ATT_RIGHT_ELBOW,
    ATT_LEFT_ELBOW,
    ATT_RIGHT_SHOULDER, // 5
    ATT_LEFT_SHOULDER,
    ATT_RIGHT_KNEE,
    ATT_LEFT_KNEE,
    ATT_RIGHT_HIP,
    ATT_LEFT_HIP, // 10
    ATT_HELMET,
    ATT_BACK,
    ATT_RIGHT_SHOULDER_HORIZONTAL,
    ATT_LEFT_SHOULDER_HORIZONTAL,
    ATT_BUST, // 15
    ATT_BUST2,
    ATT_FACE,
    ATT_ABOVE_CHARACTER,
    ATT_GROUND,
    ATT_TOP_OF_HEAD, // 20
    ATT_LEFT_PALM2,
    ATT_RIGHT_PALM2,
    ATT_PRE_CAST_2L,
    ATT_PRE_CAST_2R,
    ATT_PRE_CAST_3, // 25
    ATT_RIGHT_BACK_SHEATH,
    ATT_LEFT_BACK_SHEATH,
    ATT_MIDDLE_BACK_SHEATH,
    ATT_BELLY,
    ATT_LEFT_BACK, // 30
    ATT_RIGHT_BACK,
    ATT_LEFT_HIP_SHEATH,
    ATT_RIGHT_HIP_SHEATH,
    ATT_BUST3, // Spell Impact
    ATT_PALM3, // 35
    ATT_RIGHT_PALM_UNK2,
    ATT_DEMOLISHERVEHICLE,
    ATT_DEMOLISHERVEHICLE2,
    ATT_VEHICLE_SEAT1,
    ATT_VEHICLE_SEAT2, // 40
    ATT_VEHICLE_SEAT3,
    ATT_VEHICLE_SEAT4
};

上面这个枚举成员,定义了WOW中一个带动画的模型可以挂接物体的位置。又可以说,是骨头ID。在

先前我们的ModelAttachment或者ModelAttachmentDef结构体中定义的id,就正好是上面的枚举值中

的一个。

读完挂接信息以后,就是颜色和透明度数据了,WOW的模型中,一个模型可以持有由若干颜色和透明

度组成的序列,在每帧渲染的时候,动态插值计算出当前的值。 即可以实现颜色闪烁和透明度变化

的效果。 幽灵虎和凤凰什么的,就是用到了这个。

//这是颜色结构体的定义,可以看出,它定义了一个颜色值,和一个16位的透明度值
struct ModelColorDef {
    AnimationBlock color; // (Vec3D) Three floats. One for each color.
    AnimationBlock opacity; // (UInt16) 0 - transparent, 0x7FFF - opaque.
};

//这是透明度结构体的定义,也是一个16位的透明度值。
struct ModelTransDef {
    AnimationBlock trans; // (UInt16)
};

这两个定义,导致了模型透明度的重复。 而在WMV中的代码,也确实是这样写的。先将颜色进行了

插值,而后又用透明队列的值对颜色中的ALPHA通道进行修改。

读取完了上面的数据后,接下来的,就是模型的LOD数据。 LOD中则包含了对应的材质数据。 在WMV

中,只读取了LOD0的模型。

读取完LOD后,WMV对模型的顶点数据建立了一个索引。

    if (nIndices) {
        IndiceToVerts = new size_t[nIndices+2];
        for (size_t i=0;i<nIndices;i++){
            size_t a = indices[i];
            for (size_t j=0;j<header.nVertices;j++){
                if (a < header.nVertices && origVertices[a].pos == origVertices[j].pos){
                    IndiceToVerts[i] = j;
                    break;
                }
            }
        }
    }

今天暂时写到这里,改天继续。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

基于Java的开源3D游戏引擎jMonkeyEngine

jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就是你可以用它做任何你想做的事情而...

魔兽世界客户端数据研究(一)

终于决定,还是通过wow model viewer起手,研究一下WOW的数据类型,从另一个角度,体验一把这个唯一让我充过值的游戏。 这将是一系列随笔,即在读代码的时候,顺便记录,以理清思路和加深映...

ASP.Net全局变量的设置和读取方法

ASP.Net全局变量的设置和读取方法其它 信息对本文进行评分:2.60 分 (5票)差好本文发表于: 2006-12-15本文介绍两种ASP.Net项目中全局变量使用的方式。web.config文件...

千百万Java开发者的福音:跨平台Cocos2d-Java游戏引擎诞生

跨平台Cocos2d-Java游戏引擎以及配套的CocosEditor2.0游戏开发工具终于诞生了。使用Java语言来开发Cocos2d跨平台游戏, 和-lua,-js 的风格相近API,毋庸置疑,这...

开源3D游戏引擎Irrlicht简介

Irrlicht简介Irrlicht在国内也被叫做“鬼火”引擎,是一款用C++编写的开放源代码的高性能游戏引擎。而且是跨平台的,具有很好的移植性,Irrlicht支持OpenGl、Direcx3D渲染...

各种Java游戏引擎简介

各种Java游戏简介 JME(jMonkey Engine): JME是一个高性能的3D图形API,采用LWJGL作为底层支持。它的后续版本将支持JOGL。JME和Java 3D具有类似的场...

(转)《魔兽世界》地形研究

《魔兽世界》地形研究          《魔兽世界》地形的惊艳之处,主要在于无缝连接的世界和精细的渲染效果,借助WoWmapview源码及能以线框模式查看D3D程序的分析工具,可以对其实现略窥一二。...

《魔兽世界》地形研究

《魔兽世界》地形的惊艳之处,主要在于无缝连接的世界和精细的渲染效果,借助WoWmapview源码及能以线框模式查看D3D程序的分析工具,可以对其实现略窥一二。   组织方式          ...

螃蟹辞职 大数据冲击网络社交 魔兽世界如何前进

我是一名魔兽世界的老玩家了,从六十的新鲜,到七十的成熟与狂热,再到八十的坚守,最后在八十五失去了方向。应该说,七十是魔兽的黄金时期,也是风格上的转变的时期,同时也是技术层面上的转变时期。 七十时...

魔兽世界之二:装备

总时间限制: 1000ms 内存限制: 65536kB 描述 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。  红司令部,City 1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)