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

标签 c# opengl opentk assimp

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

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

Assimp 返回每个导入的 Mesh具有 Bone 列表的对象物体,包裹骨骼的 Name , OffsetMatrixVertexWeights ,但没有关于它的 child 或 parent 的骨头。
Scene ,其中包含 Mesh ,确实有列表总数nodes (其中一些是骨头)而且这些确实有 parentName但是通过递归比较检查构建层次结构很快就会变得困惑并且远不能正常工作。

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

最佳答案

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

寻找根骨 ,迭代每个 nodescene并检查它的名称是否在 bones 中找到mesh 中包含的列表, 那么如果 node有一个不在 bones 中的父名称list 那么它必须是根骨骼。

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

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

关于c# - 从根开始构建 Assimp 骨骼层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51225072/

相关文章:

c++ - 如何解决 linux 错误 - "cannot find -lGL"?

c# - 何时创建通用类和部分类

c# - XPath - 如何选择节点的子元素?

python - Pyglet vertex_list_indexed 异常

delphi - 计算对象的位置,使其与屏幕像素匹配

opengl - 之前对 GL.Color3 的调用使我的纹理使用了错误的颜色

c# - OpenTK 模板缓冲区

c# - 我的项目和取消项目功能有什么问题?

c# - 将 wav 文件转换为 8000Hz 16 位单声道 Wav

c# - ASP.Net MVC 4 中的 SAML 2.0 作为 IDP 实现