Правильные данные кости для экспорта из блендера для просмотра в 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;
}

т.е. простая иерархия костей.

Я считаю, что я могу разработать inv_bind_pose с помощью:

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

Я знаю, что bind_pose должен относиться к родительской кости.

Я знаю, что blender - 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

Это выглядит довольно сложно. Наверное, вы можете легко испортить порядок применения матричных преобразований. Попробуйте начать с очень простой системы, где вы можете держать все в своей голове.