在 Assimp 中获取骨骼动画的变换矩阵

Posted

技术标签:

【中文标题】在 Assimp 中获取骨骼动画的变换矩阵【英文标题】:Getting transformation matrix for bone animation in Assimp 【发布时间】:2020-09-27 04:03:32 【问题描述】:

我正在学习在 Visual Studio Express 2019Assimp 中操作模型。所以我加载了一个模型,它有 0 个动画。我想对它的骨头应用一些变换,也许是手,并以我导出的 obj 格式查看它的效果。现在要查看 obj 格式的效果,我必须对其顶点应用更改,因此我必须在骨骼中分层应用变换。但我不明白如何实现这一切。 我看过 oglDev 教程 38 但看不懂。因此,我们将不胜感激。

以下是我需要帮助的想法->

1. 如何对骨骼及其所有孩子应用一些变换(考虑一个简单的人体模型)。

2. 如何获取受特定骨骼影响的顶点的最终位置,对于骨骼,我们只有变换矩阵,那么如何将它们转换为 X、Y、Z 坐标来告诉顶点位置。

我没有使用 OpenGL。

我想在 Assimp 中使用简单的 C++ 代码来完成这一切。

请参阅此处了解更多进度和困难详情: Wrong Bone Rotation in Assimp

【问题讨论】:

【参考方案1】:

.obj 格式不支持骨骼动画(或任何形式的动画)。您不能旋转不存在的骨骼。您需要使用支持骨骼动画的模型格式并使用包含该数据的模型。示例格式包括 .fbx、.gltf、.dae (COLLADA)。

【讨论】:

我使用 obj 格式只是为了打印顶点位置。我知道看不到骨骼动画,但我想要的是对骨骼应用一些变换(可能是任何旋转 90 度的手臂),然后将相对于新骨骼位置的变换应用到顶点,然后检查 obj 格式的新顶点位置. 我已经学会了展示模型,现在我想应用任何转换。为此,我在许多地方读到他们将旋转矩阵应用于 mesh 的父节点。父节点是什么意思?他们的意思是 node->mRootNode 吗?并且不对该节点应用旋转将整个模型转换 90 度或任何旋转,而我只想要从肩部到手腕的旋转?

以上是关于在 Assimp 中获取骨骼动画的变换矩阵的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASSIMP 的骨骼动画

如何使用 assimp 在 C++ 中旋转蒙皮模型的骨骼?

Skeleton with Assimp 骨骼动画解析

DirectX 12 中 Assimp 的骨骼动画错误

CSharpGL(50)使用Assimp加载骨骼动画

带有 Assimp 的 OpenGL (GLSL) 中的骨骼动画