Редактировать (Оригинальный пост ниже):
Итак, я придумал следующий код.Я могу экспортировать сетку, структуру кости и анимацию.Я могу оживить простой скелет.Но по какой-то причине, если я анимирую более одной кости, что-то пойдет не так, и рука будет двигаться по неправильной оси.
Мой код 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
Большое спасибо!