模型视图变换
OpenGL没有视图矩阵,只有模型视图矩阵,一般游戏引擎都会抽象出视图矩阵的。
总的变换为:
v` = projection * view * mode * v;
父子节点变换
v` = worldMatrix * v = (parentWorldMatrix * localMatrix) * v;
其实真正表示的关节,而不是骨头,只是骨头比较好理解。
默认姿态网格对象坐标空空变换到骨骼局部坐标空间(offsetMatrix)。
完了后又从骨骼空间变换回动画姿态世界坐标(nodeWroldMatrix)。
v`= nodeWroldMatrix * offsetMatrix * v;
这里有一个bindShapeMatrix不知道是什么意思,猜测是网格对象绑定骨骼时的偏移,即:
offsetMatrix = inverseWroldMatrix(逆世界变换) * bindShapeMatrix;
由于MVP(模式视图矩阵)矩阵已经包含了M矩阵,所以在nodeWroldMatrix矩阵中必须排除最顶层变换,或者将MVP变为VP。
v` = projection * view * nodeWroldMatrix * offsetMatrix * v;
皮肤的变换,把每个nodeWroldMatrix * offsetMatrix的最终矩阵组成的列表叫做矩阵调色板。
每个皮肤顶点关联多个骨骼,也就是关联多个矩阵调色板中的矩阵,实现的时候一般用4个整数索引表示。
分别和每个矩阵矩阵调色板的矩阵相乘,然后取加权平均值,即为最终的位置。
这些概念大部分是我猜测出来的,基本搜不到这方面的资料。
原文地址:http://my.oschina.net/chunquedong/blog/304537