Chinaunix首页 | 论坛 | 博客
  • 博客访问: 174371
  • 博文数量: 43
  • 博客积分: 827
  • 博客等级: 准尉
  • 技术积分: 487
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-26 19:19
文章分类

全部博文(43)

文章存档

2015年(1)

2014年(1)

2013年(5)

2012年(36)

我的朋友

分类: WINDOWS

2012-01-31 23:20:56

Skinned Animation Theory

对于Skinned Animation中的Bone最初是在Bone空间的,而Bone空间的原点就是这个Bone和自己Parent Bone的连接点,注意:原点和该连接点重合是必须的,因为在Bone在自己的Bone空间变换的时候,链接点不能够变化。否则,在变换过后,Bone会和Parent Bone脱节。
一个Bone在Bone空间的本地变换,记为L,L负责该Bone自身的动作和将该Bone平移到Parent Bone的Bone空间。
比如:
图中,上两个图是原始图和每一个Bone在Bone Space中的图。
下半部图是将原图中的Bone 2进行内部动作得到的结果,以及这个过程的描述。


这里L首先将Bone 2进行自己的动作变换,然后将自己变换到Bone 1的Bone空间中

对于每一个Bone都有自己的 L 矩阵。

对于一个Bone,他的L矩阵不仅仅施加于自己,他将施加到自己的整个一个分支上。这样对于子Bone才会跟随Parent Bone一起动作。
所以一个Bone的另一个矩阵 C, C负责将整个Bone从Bone Space变换到Character Space中。

C = L*P
这里P就是该Bone 的Parent Bone的C。

那么假设Bone0-->Bone1-->Bone2-->...-->Bonei,这里Bonei是Bonej的Parent Bone(i
那么Ci = Li*Li-1...*L0

对于这个过程的描述:
1:Bone i在自己的Bone Space中动作,然后变换到Parent Bone的Bone Space
2:Bone i跟随Parent Bone一起变换,最终变换到Character Space

在上面的过程中,基于一个条件,就是每一根Bone最初都在Bone Space中,但是通常给出的Bone并不是在Bone Space中,那么要施加上面的过程,必须首先将该Bone变换到Bone Space中,这就引出了偏移矩阵O,O将模型中的Bone变换到Bone Space。
所以最终一个施加的Bone的矩阵记为Fi
Fi = Oi*Ci = Oi*Li*Pi

Reference:
Frank Luna . "Skinned Mesh Character Animation with Direct3D 9.0C"
阅读(975) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~