0

我正在尝试用 C++ 为骨架制作动画。我目前有所有关节的坐标以及哪些关节连接到哪个关节。

有谁知道我将如何进行,例如,将手臂抬高 90 度,然后计算手臂下方所有关节的新坐标?

我猜我必须获取每个骨骼的向量并旋转它们并从那里获取它,但我不确定如何去做。

(我正在使用 openGL 来显示它们)

4

1 回答 1

1

计算要旋转的点和轴。轴垂直于旋转平面。关键是你的肩膀。您将旋转手臂层次结构中的所有点相同的量。网上有很多关于任意轴旋转的例子。这是一个: http: //paulbourke.net/geometry/rotate/

另一种解决方法是使用局部变换重新解释您的骨架:每个新骨骼都从其父骨骼的世界空间进行变换。这对于前向运动学 (FK) 很有用,您只需根据局部旋转来设置骨架。大多数运动捕捉数据都是以这种方式存储的。要计算每个关节的世界坐标,您必须将所有局部矩阵乘上层级。

如果您目前在世界空间中只有骨架关节位置,那么生成局部变换矩阵会很痛苦,因为您不一定知道每个关节的局部矩阵。这是一个更大的话题。几年前,当我在一个名为 CAT 的 3dsmax 插件中开发动作捕捉重定向模块时,我就这样做了。

我使用了两种流行的格式:BVH 和 HTR。从记忆中,BVH 使用全局位置(并且很痛苦),而 HTR 使用局部联合矩阵并且更容易导入。

于 2013-03-02T21:06:39.237 回答