我非常确定 mOffsetMatrix 将顶点从网格空间转换为骨骼空间,这一点已得到证实http://assimp.sourceforge.net/lib_html/structai_bone.html http://assimp.sourceforge.net/lib_html/structai_bone.html
但后来我看到了这个,它实际上将顶点从骨骼空间转换为网格空间。https://github.com/assimp/assimp/pull/1803 https://github.com/assimp/assimp/pull/1803
现在我很困惑。那么mOffsetMatrix到底是做什么的呢?
The 偏移矩阵骨头的该骨骼在绑定姿势下的全局变换的逆。换句话说,如果您遍历骨骼/节点层次结构,则应用局部变换(移动转型在 Assimp 中)将每个骨骼/节点分层到其子节点,我们得到每个骨骼/节点的全局变换。这inverse特定骨骼的该矩阵等于其偏移矩阵。正如此处所暗示的,它可以手动计算 - 不管怎样,它是恒定的,不应该每帧计算。
名称“offsetMatrix”,虽然有点令人困惑(类似于逆绑定会更清楚),可能来自它的使用。我们用于蒙皮的变换是(B_关键帧 * 偏移矩阵), 在哪里B_关键帧是骨骼在某个目标位置的全局变换,例如通过动画剪辑。这种复合变换实际上是offset,从绑定姿势(定义网格顶点的位置)到 B_keyframe。当应用于顶点时,(B_keyframe * offsetMatrix) 会将顶点从绑定位置“移动”到 B_keyframe 变换到的任何位置。
请注意,如果 B_keyframe 等于绑定变换,例如如上所述,根据骨架的 mTransformation:s 计算,则 (B_keyframe * offsetMatrix) 是恒等式,并且顶点不会从绑定姿势中的原始位置移动。
当谈到offsetMatrix时,我个人更喜欢“从网格空间到骨骼空间”的定义。为什么?因为 offsetMatrix 的逆 - (全局)骨骼变换(在绑定姿势) - 最直观地理解为从骨骼到网格/模型空间的转换。反转回来,offsetMatrix 变换从网格/模型空间到骨骼空间.
与渲染中的视图矩阵对比:它是相机世界变换(T*R)的逆矩阵,一般理解为从世界空间到视图空间的变换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)