Изменить (исходное сообщение ниже):
Итак, я придумал следующий код. Я могу экспортировать сетку, структуру кости и анимацию. Я могу анимировать простой скелет. Но по какой-то причине, если я одушевляю более одной кости, что-то идет не так, и рука будет двигаться на неправильной оси.
Мой код 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://www.blender.org/development/release-logs/blender-240/how-armatures-work
Спасибо вам большое!