2011-05-25 22 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