Правильные данные кости для экспорта из блендера для просмотра в огл? - PullRequest
11 голосов
/ 25 мая 2011

Редактировать (Оригинальный пост ниже):

Итак, я придумал следующий код.Я могу экспортировать сетку, структуру кости и анимацию.Я могу оживить простой скелет.Но по какой-то причине, если я анимирую более одной кости, что-то пойдет не так, и рука будет двигаться по неправильной оси.

Мой код 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.

Но я не могу экспортировать эту информацию из blender.Я использую версию 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 голосов
/ 03 июля 2011

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

...