使用Assimp导入时确定骨骼长度

时间:2015-02-11 19:39:01

标签: animation assimp

我正在尝试使用Assimp 3.1.1加载和渲染一些装配模型 所以我在aiNode的层次结构中确定了aiBone。 对于每个aiBone,我有它的转换(TRS)w.r.t。到了父母。

我的问题是,我如何确定每根骨骼的长度? 假设连接骨架,除了叶骨之外,对于大多数骨骼来说这不是问题。 假设我有以下骨架结构: b0 - > b1 - > B2 b0是根骨,b2是叶骨。我怎么知道b2的长度(因为我只有它的变换w.r.t.b1)?

谢谢!

2 个答案:

答案 0 :(得分:2)

尽管大多数SDK和游戏引擎都将骨架定义为骨骼,但这是不正确的。它实际上有关节。骨头是关节之间的隐含连接。当你这样看时,你会发现所有的骨骼都有一个长度,没有骨头延伸过叶关节。

用关节替换你的例子:

J0 ---B0---> J1 ---B1---> J2

B0是J0和J1之间的骨骼,B1是J1和J2之间的骨骼。

答案 1 :(得分:1)

所以,经过一点点的挖掘...... ISTM没有任何隐含的方法知道叶子骨头应该终止的地方。

以下代码注释来自Ogre3D wiki(它不是assimp,但我们在这里讨论同样的问题)。

if(numChildren == 0)
{
    // There are no children, but we should still represent the bone
    // Creates a bone of length 1 for leaf bones (bones without children)
    // ...
}

我想你可以考虑通过计算从骨骼到你正在渲染的网格边缘的距离来尝试计算叶子骨骼的长度。虽然这可能比它的价值更麻烦。“ p>