如何计算骨骼动画中的最终骨骼矩阵
How do I calculate the final bone matrix in skeletal animation?
我很难找到骨骼的最终骨骼矩阵。
我知道我的绑定姿势矩阵是有效的,我也知道我的变换矩阵也是有效的,但我想把它们相乘(我称之为复合矩阵),然后乘以它的父复合矩阵(然后再乘以它的父母,等等),会得到正确的矩阵。
值得注意的是,我使用glmatrix.js作为我的向量/矩阵数学库,它的矩阵数学工作原理相反,需要获得一个世界矩阵,位置矩阵*旋转矩阵*缩放矩阵,而不是相反。所以我可能把订单搞混了,
我试过改变绑定姿势矩阵和骨骼变换矩阵的乘法顺序,以及最终矩阵和父矩阵的顺序,但现在我简直难以置信。
无论如何,用鞠躬来结束这个问题,给定一个网格,其中每个顶点都被预变换到其相对骨骼空间,每个骨骼绑定姿势矩阵和每个骨骼每帧变换矩阵,我如何找到最终的骨骼矩阵?
编辑:
仍然有问题,但这可能有助于说明我目前的处境,下面的psuedo代码使模型完美地进入其绑定姿势
finalBones = []
foreach bone in bones
mat = bone.poseMatrix
parent = bone
while (parent.parent != null)
parent = parent.parent
mat *= parent.poseMatrix
finalBones.push(mat)
上面的snippest正是发生的事情,而无需解释矩阵函数(它的javascript是通过mat4.copy和mat4.mul等函数完成的)
我想如果我做了类似的事情
finalBones = []
foreach bone in bones
mat = bone.poseMatrix
mat *= bone.transformMatrix
parent = bone
while (parent.parent != null)
parent = parent.parent
mat *= parent.poseMatrix
mat *= parent.transformMatrix
finalBones.push(mat)
我会得到最终的矩阵(在poseMatrics之前我尝试过使用transformMatrix),但我得到的只是一个脊椎骨折、腿由内向外的模型
编辑2:
因此,在进一步检查时,空闲帧上的骨骼变换矩阵的中间2行是否反转?很奇怪,但我正在研究如果我现在把它们换回来会发生什么。
事实证明,矩阵的奇异性是整个问题,进一步的检查让我了解了四元数旋转以及它们是如何从blender导出的(我自己的文件类型很糟糕)我没有注意到blender有四元数格式(W,X,Y,Z),其中glmatrix.js(我使用的数学库)是格式化的(X,Y、Z,W)稍后对加载进行了一些调整,模型的动画效果很好!为了记录这个问题,这里是我发现有效的循环
finalBones = []
foreach bone in bones
parent = bone
mat = identityMatrix
while (parent.parent != null)
mat *= parent.transformMatrix
mat *= parent.poseMatrix
parent = parent.parent
finalBones.push(mat)
- 如何设置html元素填充的动画
- 如何使用动画实现纸张推车
- 如何在生成下载文件时显示加载动画
- 剑道网格jQuery动画()问题
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- jQuery Lazy加载动画滚动
- jquery动画可以通过编程链接吗
- Javascript将数学动画化
- 如何计算骨骼动画中的最终骨骼矩阵
- 在运行计算密集型 JavaScript 脚本时显示基于 css 的动画
- 在动画函数中进行计算
- 我如何用JQuery动画计算位置
- 获得动画线的计算值
- CSS动画在繁重的js计算
- 同步JQuery动画与计算在一个循环
- 计数器动画到一个计算值
- 如何在进行密集计算的同时保持动画gif的运行
- 如何动画宽度和计算新的左位置在同一时间与jQuery
- 你能用javascript计算动画中某一帧的点击量吗
- 如何在d3.js中通过计算' index '值来增加动画延迟