2011-05-25 23 views
11

编辑(原文如下):从搅拌机中导出的正确的骨骼数据在ogl中查看?

所以我想出了以下代码。我可以导出网格,骨骼结构和动画。我可以动画一个简单的骨架。但是由于某种原因,如果我使用一个以上的骨骼进行动画处理,会出现一些错误,并且手臂会沿着错误的轴线移动。

我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; 
} 

iee一个简单的骨骼层次。

我相信我能制定出inv_bind_pose有:

world_bind_pose = bone.parent.world_bind_pose * local_bind_pose 
inv_bind_pose = world_bind_pose.inverse() 

我知道bind_pose必须是相对父骨骼。

我知道搅拌器是z =向上,我正在使用y =向上。

但我无法从搅拌机中获取此信息。我正在使用版本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

感谢你这么多!

+0

在搅拌机> 2.6中,您可以使用bpy_extras.io_utils.axis_conversion(参见:blender.org/documentation/blender_python_api_2_66a_release/...)转换为openGL空间。 – sarahm 2013-05-13 18:49:17

回答

0

这看起来相当复杂。我想你可以很容易地搞乱你应用矩阵变换的顺序。试着从一个非常简单的系统开始,在这里你可以把所有的东西都放在脑海里。

+0

是的,我认为这是问题所在。我试图将其简化为最低限度。也许我会看看它没有皮肤代码...谢谢你的答复。 :) – ashleysmithgpu 2011-07-04 08:55:28