【问题标题】:The correct bone data to export from blender to view in ogl?从搅拌机导出的正确骨骼数据以在 ogl 中查看?
【发布时间】:2011-09-02 01:25:24
【问题描述】:

编辑(原帖如下):

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

我的 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

非常感谢!

【问题讨论】:

  • 在 blender > 2.6 中,您可以使用 bpy_extras.io_utils.axis_conversion(参见:blender.org/documentation/blender_python_api_2_66a_release/...)转换为 openGL 空间。

标签: python math animation blender blender-2.50


【解决方案1】:

这看起来很复杂。我想你可以很容易地搞砸你应用矩阵变换的顺序。尝试从一个非常简单的系统开始,您可以在其中记住所有内容。

【讨论】:

  • 是的,我认为这就是问题所在。我试图将其简化到最低限度。也许我会在没有皮肤代码的情况下看看它......谢谢你的回复。 :)
猜你喜欢
  • 2012-02-02
  • 2011-09-01
  • 2019-11-06
  • 2013-12-04
  • 2012-11-11
  • 2016-08-17
  • 1970-01-01
  • 2011-10-21
  • 2019-08-06
相关资源
最近更新 更多