游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2840|回复: 6

wow的 蒙皮骨胳递归计算问题w

[复制链接]

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2008-12-4 11:26:00 | 显示全部楼层 |阅读模式

骨胳的变换信息是递归的,每个骨胳都记录了当前骨胳的变换信息,需要乘以父骨胳的变换信息才可以的到真正的变换信息。
现在一般的变换信息都是通过矩阵方式实现的。但是我从wow里面获得的骨胳数据并不是以矩阵方式保存的,
他的保存方式如下。
首先是骨胳的信息 头是这样的
// block E - bones
struct ModelBoneDef {
        int32 animid;
        int32 flags;
        int16 parent; // parent bone index
        int16 geoid;
        // new int added to the bone definitions.  Added in WoW 2.0
        int32 unknown;
        AnimationBlock translation;
        AnimationBlock rotation;
        AnimationBlock scaling;
        Vec3D pivot;
};
然后是 平移 旋转 缩放 的 AnimationBlock  类型是这样的
struct AnimationBlock {
        int16 type;                // interpolation type (0=none, 1=linear, 2=hermite)
        int16 seq;                // global sequence id or -1
        uint32 nRanges;
        uint32 ofsRanges;
        uint32 nTimes;
        uint32 ofsTimes;
        uint32 nKeys;
        uint32 ofsKeys;
};
他们的 times 结构是 一个 整形的数据,记载了本桢的时间
keys 与 times 的个数总是一样的。
在这里面 平移和所放的 的keys 结构是 3个float
class Vec3D {
public:
        float x,y,z;}
旋转的keys结构是 4个float

class Vec3D {
public:
        float x,y,z,w}

我想我在进行递归计算的时候是不是 需要将他们的平移 旋转 缩放 分别相乘 得到新的 平移 旋转 缩放 数据然后 来计算该骨胳上的定点的 位置信息?

12

主题

128

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2008-12-4 12:39:00 | 显示全部楼层

Re:wow的 蒙皮骨胳递归计算问题w

我觉得你可以先试一下, 因为里面有个缩放矩阵, 结果究竟怎么样很难说.

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2008-12-4 13:34:00 | 显示全部楼层

Re:wow的 蒙皮骨胳递归计算问题w

o.如果没有缩放矩阵就可以这样做了吗?

12

主题

128

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2008-12-4 14:40:00 | 显示全部楼层

Re:wow的 蒙皮骨胳递归计算问题w

恩, 我觉得应该是吧. 因为不知道骨骼的坐标是基于哪里的. 如果有缩放, 各个骨骼坐标的(0, 0)点重合不重合很明显会影响到平移的位置, 而且如果有缩放的话, 假如整体缩放到原来的1/n大小, 那么是第一块骨骼的缩放矩阵是r, 别的都是单位矩阵还是每一块骨骼的缩放矩阵都是r, 如果是后者, 很明显是不能递归的

因为我也不知道wow到底是怎么安排的这些东西
所以估计你要么试试看, 要么详细的查一下文档了
我只是泛泛的说一下, 可能骨骼动画本身这些事情就是有默认的规则的.

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2008-12-4 17:46:00 | 显示全部楼层

Re:wow的 蒙皮骨胳递归计算问题w

恩。我观察了数据,只有个别骨胳缩放矩阵式 1以外的数据。我想如果平移式递归的,缩放应该也是把,比如骨胳1的缩放如果是 1.2,1.2,1.2 骨胳2(父骨胳是1)的缩放式 1,1,1 那么骨胳2的最后缩放应该 1.2,1.2,1.2 。
另外我想问一下 平移、旋转、缩放 的递归运算 是算乘法还是算加法?

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2008-12-5 00:19:00 | 显示全部楼层

Re:wow的 蒙皮骨胳递归计算问题w

整体缩放上不会影响offset的,需要处理的就是把Matrix的tranform拿出来做个scale.
如果嵌套的矩阵有缩放,主要是看在导出模型和骨架的时候怎么处理的,如果缩放也是相对父节点的话,就需要乘,我的模型就这么处理的。

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2008-12-5 08:34:00 | 显示全部楼层

Re:wow的 蒙皮骨胳递归计算问题w

都是高手阿。我需要做试验然后不明白再问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 18:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表