构建Assimp骨骼层次结构,从根开始。

4
我正在使用Assimp.net将动画.dae文件导入到我的OpenTK引擎中,但是在建立可用的层次骨骼结构方面遇到了困难。
在我所遵循的tutorial中,根骨骼或“关节”包含其子关节的列表,以此类推。
Assimp返回每个已导入的Mesh对象及其所包含的Bone对象列表,其中包含骨骼的NameOffsetMatrixVertexWeights,但没有任何关于其子项或父项骨骼的信息。
包含MeshScene确实有一个总nodes列表(其中一些是骨骼),并且这些节点具有parentName值,但通过递归比较检查来构建层级结构变得非常混乱,并且远未能正常运行。
如何分离根骨骼,然后是它的子项,再然后是它们的子项等?
1个回答

9
原来每个节点都包含一个称为`children`的类型为`NodeCollection`的子节点集合,因此我开发了以下解决方案。
要查找根骨骼,请迭代遍历场景中的每个节点,并检查其名称是否在`mesh`中包含的`bones`列表中。然后,如果该节点具有未包含在`bones`列表中的父名称,则它必须是根骨骼。
要构建骨骼层次结构,请从上面找到的“根骨骼”节点获取其`children`,然后在网格的`bones`列表中查找匹配的名称,并从那里提取所需的顶点权重和偏移矩阵。接下来,使用与上述相同的方法递归地搜索这些子项的子项:在场景中迭代每个`node`直到找到匹配的`bone`名称,然后从`bones`列表中提取`bone`数据,反之直到没有孩子为止。
如果有更好的方法,我会很乐意听取建议。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接