我试图用C ++动画骨架。我目前有所有关节的坐标和哪个关节连接到哪个。
有没有人知道我会怎么做,比如说,将手臂向上抬起90度,然后计算出手臂下方所有关节的新坐标?
我猜我必须得到每个骨头的矢量并旋转它们并从中取出它,但我不知道该怎么做。
(我正在使用openGL来显示它们)
答案 0 :(得分:1)
计算您想要旋转的点和轴。轴垂直于旋转平面。关键在于你的肩膀。您可以将臂层次结构中的所有点旋转相同的量。网上有许多关于任意轴旋转的例子。这是一个:http://paulbourke.net/geometry/rotate/
另一种方法是使用局部变换重新解释骨骼:即每个新骨骼都有一个来自其父骨骼世界空间的变换。这对于正向运动学(FK)非常有用,您只需根据局部旋转构造骨架。大多数动作捕捉数据以这种方式存储。要计算每个关节的世界坐标,必须将所有局部矩阵乘以层次结构。
如果您目前在世界空间中只有骨架关节位置,那么生成局部变换矩阵会很痛苦,因为您不一定知道每个关节的局部矩阵。这是一个更大的话题。几年前我在一个名为CAT的3dsmax插件中使用动作捕捉重新定位模块时做到了。
我使用了两种流行的格式:BVH和HTR。从记忆中,BVH使用全局位置(并且很痛苦),而HTR使用局部关节矩阵,并且更容易导入。