更多名人名博

上市公司专栏

实时股价每分更新

纳斯达克(美元)(市值:亿美元)
综指: 涨跌幅:
公司 股价 涨幅度 市值
盛大
网易
九城
畅游
完美
巨人
新浪
百度
恒生指数(港币)(市值:亿港币)
综指: 涨跌幅:
公司 股价 涨幅度 市值
腾讯
金山
网龙
创业板
综指: 涨跌幅:
公司 股价 涨幅度 市值
宝网
d
您现在的位置:首页> 开发|游戏策划| > 详细讲解 骨骼动画(Skinmesh)要诀

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

来源:IIEEG02-17-2011

  骨骼动画属于顶点变换应用的一种,就是在画顶点前用骨骼矩阵等来求出新顶点位置。

  要诀如下:

  有骨骼无动画: 新顶点位置 = 原始坐标×转换矩阵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 // 求当前顶点位置