C# 从根开始构建Assimp骨骼层次

C# 从根开始构建Assimp骨骼层次,c#,opengl,opentk,assimp,C#,Opengl,Opentk,Assimp,我正在使用Assimp.net将动画.dae文件导入我的OpenTK引擎,并努力建立一个可用的层次结构 在下面的“我是”中,根骨骼或“关节”包含其子关节的列表,以及这些子关节的列表,依此类推 ASIMP返回每个导入的网格对象,其中包含骨骼对象列表,包含骨骼的名称、偏移矩阵和顶点权重,但不包含其子骨骼或父骨骼 包含网格的场景,确实有一个总节点的列表(其中一些是骨骼),这些节点确实有一个parentName值,但是通过递归比较检查构建层次结构很快就会变得杂乱无章,远远不能正常工作 如何分离根骨骼,然

我正在使用Assimp.net将动画.dae文件导入我的OpenTK引擎,并努力建立一个可用的层次结构

在下面的“我是”中,根骨骼或“关节”包含其子关节的列表,以及这些子关节的列表,依此类推

ASIMP返回每个导入的
网格
对象,其中包含
骨骼
对象列表,包含骨骼的
名称
偏移矩阵
顶点权重
,但不包含其子骨骼或父骨骼

包含
网格的
场景
,确实有一个总
节点的列表
(其中一些是骨骼),这些节点确实有一个
parentName
值,但是通过递归比较检查构建层次结构很快就会变得杂乱无章,远远不能正常工作


如何分离根骨骼,然后是子节点,然后是它们的子节点,等等?

结果是每个节点都包含一个名为
children
的子节点集合,类型为
NodeCollection
,从那里我开发了以下解决方案

要查找根骨骼,请在
场景
中的每个
节点
上迭代,并检查其名称是否在
网格
中包含的
骨骼
列表中找到,如果该
节点
具有不在
骨骼
列表中的父名称,则它必须是根骨骼

要构建骨骼层次,请从上面找到的“根骨骼”节点中获取子节点
,然后在网格骨骼列表中找到匹配名称,并从中提取所需的顶点权重和偏移矩阵。接下来,使用与上面相同的方法递归搜索这些子节点的子节点:迭代场景中的每个
节点
,直到找到匹配的
骨骼
名称,然后从
骨骼
列表中的
骨骼
中提取数据,并反向执行,直到没有子节点

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