平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

关于M2动画

我使用你的mywarcraftstudio可以正常的看到M2动画,但是我使用PlayerModel或者Model在WOW UI中调用OnUpdate事件并在SetSequenceTime(index,time)更新time时间以显示连贯动画,结果是只有小部分动画能够正常显示比如:Walk,run等
但是大部分动画如:Death,Emote等均不能正常显示。
这个跟M2源文件格式于定义有关系么?或者能够讨论一下么?

我的QQ:35548917

posted on 2005-11-03 14:49 linghuye 阅读(543) 评论(4)  收藏 引用

评论

# re: 关于M2动画  回复  更多评论   

我今天晚上又试过几次,发现这个问题源至一个由SetSequenceTime(index,time)指定的序列index,该index指向的动作序列是一类动画,具有随机性,所以Walk,Run可以正常显示,而Death,Attack就不能。
我所想知道的就是怎么才能把这个随机序列分开呢?你能从M2文件的方向给我解释一下吗?


十分感谢!
另:实在不知道AdvanceTime()干什么用的。。。。查了好多资料也无结果
2005-11-03 20:50 | Tcxxs

# re: 关于M2动画  回复  更多评论   

M2中的Sequence是这样,美工做好的一串帧序列Sequence动画,会包含多个动作,每个动作占用连续的一个帧段.
这个动作帧段的起始和结束帧是确定的,在m2中M2_ANIMATION_INFO为nFrameBegin/nFrameEnd.

按wowmapview的实现,time是一个全局时间概念,即随着世界时间流逝,人物动画进行.
time的单位和Sequence是一致的,可以认为Sequence就是一个time点,所以只要time是个不断向前的数值,动作就会被播放出来.

AdvanceTime应该是强制世界时间向前,应该带一个参数.

SetSequenceTime(index,time),这个index似乎有两种可能
1.m2中有一个Global Sequence序列,as 1,3333,6666,10000...., index可能为此索引,然而这个信息仅在m2文件中,未见函数暴露.
2.动作ID,AnimationData.dbc表中的动作ID.
2005-11-04 09:43 | 平民程序

# re: 关于M2动画  回复  更多评论   

十分感谢!
2005-11-04 20:10 | Tcxxs

# re: 关于M2动画  回复  更多评论   

嗯,也给了我一些启发。

最近觉得关键帧动画技术对于一个网络游戏和一般的动作游戏已经足够了。

研究quake3的.md3文件时候我就感觉关键帧动画技术很实用。
2006-02-28 21:40 | dsin
只有注册用户登录后才能发表评论。