如何从头尾滚动获得骨转换矩阵

时间:2014-07-31 12:03:44

标签: c++ animation math

在搅拌机中,每根骨头都有头尾和滚动。 我需要从骨骼表示中获得一个变换矩阵。 我发现了反向操作,如果我们有矩阵T那么: head = T *(0,0,0) tail = T *(0,1,0)

如何建立这个矩阵?

1 个答案:

答案 0 :(得分:1)

我们正在寻找一个不包含透视变换的4x4矩阵。所以最后一行是(0, 0, 0, 1)。给出了两个主矢量的映射,得到了这个部分矩阵:

/      tail.x         head.x \
|      tail.y         head.y |
|      tail.z         head.z |
\ 0    0         0    1      /

还剩下两个向量。这就是滚动发挥作用的地方。两个向量应垂直于tail并且彼此垂直。为了解决这个问题,我们需要一个参考方向(基本上说明其中一个向量 - 在这种情况下x向量 - 指向0角)。然后我们可以做到:

r = rotate reference about tail by roll
z = cross(r, tail)
x = cross(tail, z)

产生这个完整的矩阵:

/ x.x  tail.x   z.x  head.x \
| x.y  tail.y   z.y  head.y |
| x.z  tail.z   z.z  head.z |
\ 0    0        0    1      /

您需要找到的一件事是参考矢量。应该有两个(如果tail与第一个平行)。或者,如果您可以找到关于roll含义的任何参考,您应该相应地调整计算。