详细讲解骨骼动画(Skinmesh)要诀

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

骨骼动画属于顶点变换应用的一种,就是在画顶点前用骨骼矩阵

等来求出新顶点位置。

要诀如下:

有骨骼无动画: 新顶点位置 = 原始坐标×转换矩阵1(累级相乘后的矩阵)

有骨骼有动画: 新顶点位置 =

原始坐标×转换矩阵2×权值矩阵

转换矩阵1 = 顶点所在的Mesh,Mesh所在的Frame,Frame的原始矩阵

frame-oldtransformmatrix,此矩阵自顶向下累级

相乘后的矩阵,记为frame-nowtransformmatrix,

跟权值里的那个矩阵无关。

转换矩阵2 = 先计算全部骨骼此时刻的变换矩阵animate-transformmatrix,

然后用它代替原始的Frame-oldTransformmatrix ,然后累级相乘,

得到一个现在的转换矩阵 frame-nowtransformmatrix。

注意的是,转换矩阵1是顶点所在Mesh的转换矩阵,

而转换矩阵二是用此顶点所在骨骼的变换矩阵,都需要自顶向下累级相乘而得到,

在这些Frame-oldtransformmatrix累级相乘前需要将其变换到原始位置,

就是用文件载入得Frame-Transformmatrix将现行得Frame-oldtransformmatrix初始化。

伪码(随手写来的):

while_begin

update() // 更新顶点坐标

render() // 渲染

while_end

update_begin

frame-transformmatrix = settime() // 按时间提取Animation里的矩阵更新frame(二叉树型)矩阵

frame-nowtransformmatrix = recursionmatrix() // 将各个frame矩阵进行递归累积得到现在的变换矩阵

my_transformmatirx =frame-nowtransformmatrix * frame-weightmatrix // 变换矩阵乘以权值矩阵

every_vertex = old_vertex * my_transformmatrix // 求当前顶点位置

update_end

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航