C# 从根开始构建Assimp骨骼层次
我正在使用Assimp.net将动画.dae文件导入我的OpenTK引擎,并努力建立一个可用的层次结构 在下面的“我是”中,根骨骼或“关节”包含其子关节的列表,以及这些子关节的列表,依此类推 ASIMP返回每个导入的C# 从根开始构建Assimp骨骼层次,c#,opengl,opentk,assimp,C#,Opengl,Opentk,Assimp,我正在使用Assimp.net将动画.dae文件导入我的OpenTK引擎,并努力建立一个可用的层次结构 在下面的“我是”中,根骨骼或“关节”包含其子关节的列表,以及这些子关节的列表,依此类推 ASIMP返回每个导入的网格对象,其中包含骨骼对象列表,包含骨骼的名称、偏移矩阵和顶点权重,但不包含其子骨骼或父骨骼 包含网格的场景,确实有一个总节点的列表(其中一些是骨骼),这些节点确实有一个parentName值,但是通过递归比较检查构建层次结构很快就会变得杂乱无章,远远不能正常工作 如何分离根骨骼,然
网格
对象,其中包含骨骼
对象列表,包含骨骼的名称
、偏移矩阵
和顶点权重
,但不包含其子骨骼或父骨骼
包含网格的场景
,确实有一个总节点的列表
(其中一些是骨骼),这些节点确实有一个parentName
值,但是通过递归比较检查构建层次结构很快就会变得杂乱无章,远远不能正常工作
如何分离根骨骼,然后是子节点,然后是它们的子节点,等等?结果是每个节点都包含一个名为children
的子节点集合,类型为NodeCollection
,从那里我开发了以下解决方案
要查找根骨骼,请在场景
中的每个节点
上迭代,并检查其名称是否在网格
中包含的骨骼
列表中找到,如果该节点
具有不在骨骼
列表中的父名称,则它必须是根骨骼
要构建骨骼层次,请从上面找到的“根骨骼”节点中获取子节点
,然后在网格骨骼列表中找到匹配名称,并从中提取所需的顶点权重和偏移矩阵。接下来,使用与上面相同的方法递归搜索这些子节点的子节点:迭代场景中的每个节点
,直到找到匹配的骨骼
名称,然后从骨骼
列表中的骨骼
中提取数据,并反向执行,直到没有子节点
如果有更好的办法,我很想听