Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

对骨骼动画的一点理解

来源: claien 分享至:

看了骨骼动画相关知识,写点自己的理解当作笔记。

一边想一边写,比较乱。 

 

每个骨骼动画有一个原点,他能代表整个骨骼动画在世界中的位置。

骨骼:将一个Mesh抽象理解成有许多个部分组成,例如人的肩,大臂,小臂,手等。
      骨骼是一个矩阵表示当前骨骼的原点在父矩阵的位置,是抽象存在的。

TransformMatrix:表示子骨骼对父骨骼的偏移

根矩阵:所用骨骼的最终父节点。通过他统一了说有兄弟骨骼在世界中的位置。

一个骨骼动画其实只有一份Mesh数据。包括所用的顶点,纹理,材质。

既然骨骼动画是一个mesh,那么从Max导出时有一个状态,例如站立,把这个状态作为参考姿势。

在此参考姿势下,每个骨骼都有自己的TransformMatrix矩阵。求出他的逆矩阵(一系列连乘的逆运算),用这个逆矩阵乘以参考姿势下的顶点数据,就得到了Mesh中的顶点在这个骨骼本地坐标中的位置。先把这个逆矩阵叫OffsetMatrix。

OffsetMatrix矩阵和骨骼动画无关,当骨骼进行了一系列变换和父骨骼连乘得出该骨骼对应世界的位置时,就该显示了,在显示蒙皮时需要OffsetMatrix。这样将骨骼本地坐标和Mesh参考姿势下存储的Mesh顶点数据对应起来了。

所有的顶点取自一个Mesh,怎么知道哪一个骨骼对应哪些顶点呢?
X文件中有一个SkinWeights结构,每个骨骼都有,他记录了顶点序号和对应某个骨骼的权重,我想这里可能记录了每个骨骼对应的顶点数据。不知道这里理解的对不对?


最后:
骨骼在世界的位置: Bone  TransformMatrix  * father TransformMatrix * ..... * Root
骨骼顶点:顶点数据 * 该骨骼的OffsetMatrix * Bone  TransformMatrix  * father TransformMatrix * ..... * Root 
计算权重的顶点:
Vworld = Vmesh * BoneOffsetMatrix1 * CombindMatrix1 * Weight1
+ Vmesh* BoneOffsetMatrix2 * CombinedMatrix2 * Weight2
+ …
+ Vmesh * BoneOffsetMatrixN * CombindMatrixN * WeightN


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史