在骨骼动画中我无法理解。
我不明白如何使用影响他的所有关节的矩阵来计算瞬间T的顶点的最终位置P.
我现在正在做的是:
在顶点V的初始坐标上使用先前计算的变换矩阵,如下所示:
P=(0.0f,0.0f,0.0f)
for every joints J affecting vertex V
transformMatrix = J.matrix * weight
P = P + transformMatrix * V.coord
V.coord = P
在这里,我假设每个关节的J.matrix都是正确的T.对象。我在这个计算中做错了吗?我注意到我从未使用任何反向绑定矩阵,说实话,我也不能真正理解这个矩阵的目的。
编辑:嗯,让我们举个例子让事情变得更容易,告诉我你是否看到任何错误。
我计算顶点V的最终位置(-1.0f,-1.0f,-1.0f,1.0f)。 让我们考虑2个骨骼影响V,B1和B2,其中:
B1:联合矩阵J1 - 反向绑定矩阵IBM1
[1][0][0][0] [1][0][0][0]
[0][0][1][0] [0][0][-1][0]
[0][-1][0][0] [0][1][0][0]
[0][0][0][1] [0][0][0][1]
B2:联合矩阵J2 - 反向绑定矩阵IBM2
[0][0][1][0] [1][1][0][0]
[1][0][1][0] [1][0][0][0]
[1][0][0][0] [0][0][1][0]
[0][1][0][1] [0][0][0][1]
绑定形状矩阵BSM是
[0.5][0][0][0]
[0][0.5][0][0]
[0][0][1.5][0]
[0][0][0][1]
B1和B2的权重分别为0.6和0.4,B2是B1的子项。
我正在做的是:
计算V * BSM,每个骨头都相同,所以我把它保存在R中,这样做
R = [-0.5][-0.5][-1.5][1]
计算R * IBM1和R * IBM2,它给了我
IM1=[-0.5][-1.5][0.5][1] IM2=[-1][-0.5][-1.5][1]
计算IM1 * J1和IM2 * J2,结果为
X1 = [-0.5][0.5][1.5][1] X2 = [-2][1][-1.5][1]
用每个骨骼重量思考结果,总结它们,我认为这是V的最终位置,结果是
V = [-1.2][0.7][0.3][1]
我是这样做的吗?我看到一些人使用相对关节矩阵,所以例如联合矩阵J2将是J1 * J2的结果。这不是我在这里做的,这是一个错误吗?