编辑(下面的原始帖子):
所以我想出了以下代码。我可以导出网格、骨骼结构和动画。我可以为一个简单的骨架制作动画。但是由于某种原因,如果我为多个骨骼设置动画,就会出现问题,并且手臂会在错误的轴上移动。
我的 cpp 代码在这里:http: //kyuu.co.uk/so/main.cpp
我的 python 导出代码在这里:http: //kyuu.co.uk/so/test.py
有人可以告诉我我做错了什么吗?我认为这可能与搅拌机中的骨卷有关。我看过很多关于这个的帖子。
谢谢。
(原帖:)
我一直在研究这个问题一段时间,但仍然无法弄清楚我错过了什么,所以我希望有人能帮助我:3
对,我的应用程序中有类似以下代码的内容:
class bone {
bone * child;
Eigen::Matrix4f local_bind_pose; // this i read from a file
Eigen::Matrix4f final_skinning_matrix; // i then transform each vertex by this matrix
// temporary variables
Eigen::Matrix4f inv_bind_pose;
Eigen::Matrix4f world_bind_pose;
}
即一个简单的骨骼层次结构。
我相信我可以解决inv_bind_pose
:
world_bind_pose = bone.parent.world_bind_pose * local_bind_pose
inv_bind_pose = world_bind_pose.inverse()
我知道bind_pose
必须相对于父骨骼。
我知道搅拌机是 z = up,我正在使用 y = up。
但我无法从搅拌机中导出这些信息。我使用的是 2.56.3 版。
矩阵的旋转部分是bone.matrix_local
?翻译部分会是bone.tail() - bone.head()
吗?
骨头卷呢?似乎确实会影响结果。
一些参考资料:
http://www.gamedev.net/topic/571044-skeletal-animation-bonespace
http://www.blender.org/development/release-logs/blender-240/how-armatures-work
太感谢了!