gpt4 book ai didi

c++ - Assimp 骨骼动画转换矩阵问题

转载 作者:行者123 更新时间:2023-11-30 03:53:17 30 4
gpt4 key购买 nike

我正在尝试使用 Assimp(Open Asset Import Library)制作骨骼动画。现在我可以成功加载 .dae 模型并用动画渲染它,但在这样做的过程中模型变得困惑。

http://i.imgur.com/O7YzK8o.png

左侧模型未正确装配和加载。右边的模型被装配并采用了动画中的正确姿势,但变得奇怪地扭曲了(扁平的火柴人~)。

我的看法是我可能通过骨矩阵乘法做错了什么。

最终的矩阵(我们称它们为 M)计算如下:

M[i] = transform_matrix[i] * scene->mRootNode->mTransformation * offset_matrix[i]

其中 offset_matrix[i]aiBone->mOffsetMatrix 串联的组合偏移矩阵,transform_matrix[i] 是来自 aiNodeAnim TRS 的矩阵串联的组合变换矩阵。

各自的连接是从底部到根部完成的。

while(node!=NULL){
mOffset = loadRelativeOffset(node, scene) * mOffset
node = node->mParent;
}
offset_matrix.push_back(mOffset);

loadRelativeOffset(node, scene) 将循环遍历 scene->mMeshes[0]->mNumBones 并返回匹配的 aiBone 矩阵.如果没有找到骨骼,将返回单位矩阵。因此,最终结果将是所有骨骼矩阵的串联,忽略 Armatureroot node

以类似的方式加载变换矩阵,但使用 mNumChannels 中的 aiNodeAnim 而不是 mNumBones 中的 aiBones >.

我想最终结果应该是这样的:

M = Arm * Hand * Finger * RootNode * Offset_Arm * Offset_Hand * Offset_Finger;

我不知道为什么 RootNode 矩阵在那里,但如果它不在那里,一切看起来都是胡说八道。

知道是什么原因造成的,或者我能做什么?

最佳答案

我解决了。问题很简单 - aiBone 中的骨骼偏移矩阵已经全局/组合,因此没有理由连接。

关于c++ - Assimp 骨骼动画转换矩阵问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156952/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com