正确的骨骼数据从blender导出到ogl中的视图?

时间:2011-05-25 19:35:21

标签: python math animation blender blender-2.50

编辑(下面的原始帖子):

所以我想出了以下代码。我可以导出网格,骨骼结构和动画。我可以为一个简单的骨架制作动画。但由于某些原因,如果我为多个骨骼制作动画,则会出现问题并且手臂会在错误的轴上移动。

我的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://blenderartists.org/forum/showthread.php?209221-calculate-bone-location-rotation-from-fcurve-animation-data

http://www.blender.org/development/release-logs/blender-240/how-armatures-work

http://code.google.com/p/gamekit/source/browse/trunk/Engine/Loaders/Blender/gkSkeletonLoader.cpp?spec=svn482&r=482

非常感谢你!

1 个答案:

答案 0 :(得分:0)

这看起来很复杂。我想你可以轻松搞砸你应用矩阵变换的顺序。尝试从一个非常简单的系统开始,在那里你可以把所有东西都放在脑中。