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

liv*_*muk 4 c# opengl opentk assimp

我正在使用 Assimp.net 将动画 .dae 文件导入我的 OpenTK 引擎并努力建立可用的分层骨骼结构。

在我正在关注的教程中,根骨骼或“关节”包含它的子关节列表,以及它们的子关节列表等等。

Assimp 返回Mesh带有对象列表的每个导入对象Bone,封装了骨骼的Name,OffsetMatrixVertexWeights,但没有关于它的子骨骼或父骨骼。

Scene,其中包含了Mesh,确实有总名单nodes(其中一些是骨头),这些确实具有parentName价值,但通过递归比较检查建立等级越来越凌乱快速远未发挥作用。

我怎样才能隔离根骨骼,然后是孩子,然后是他们的孩子,等等?

liv*_*muk 5

原来每个节点都包含一个名为type的子节点的集合,从那里我开发了以下解决方案。childrenNodeCollection

找了根骨头,迭代每一个nodescene,检查它的名字在发现bones包含在列表中mesh,那么如果node有这不是在父母的名字bones列表,那么它必须是根骨头。

要构建骨骼层次结构,请children从上面找到的“根骨骼”节点中获取 ,然后在网格bones列表中找到匹配的名称,并从那里提取所需的顶点权重和偏移矩阵。接下来,递归通过这些儿童的儿童用同样的方法与上述搜索:遍历每个node场景直到匹配bone名字发现,然后从提取数据bone的内部bones列表,这样做的反向,直到有没有孩子离开了。

如果有更好的方法,我很想听听。