From 5c69338fe61d24924dfb3d9a5c9f960b62cc6e7e Mon Sep 17 00:00:00 2001 From: Gaia Clary Date: Tue, 30 Jul 2013 11:10:04 +0000 Subject: apply world matrix only to armature, Bones and children get it implicit via parenting --- source/blender/collada/ArmatureImporter.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'source/blender/collada/ArmatureImporter.cpp') diff --git a/source/blender/collada/ArmatureImporter.cpp b/source/blender/collada/ArmatureImporter.cpp index 71dd7f280d0..5d47ce155c8 100644 --- a/source/blender/collada/ArmatureImporter.cpp +++ b/source/blender/collada/ArmatureImporter.cpp @@ -86,17 +86,15 @@ JointData *ArmatureImporter::get_joint_data(COLLADAFW::Node *node); void ArmatureImporter::create_bone(SkinInfo *skin, COLLADAFW::Node *node, EditBone *parent, int totchild, float parent_mat[4][4], bArmature *arm) { + float mat[4][4]; + float joint_inv_bind_mat[4][4]; + //Checking if bone is already made. std::vector::iterator it; it = std::find(finished_joints.begin(), finished_joints.end(), node); if (it != finished_joints.end()) return; - float joint_inv_bind_mat[4][4]; - // JointData* jd = get_joint_data(node); - - float mat[4][4]; - float obmat[4][4]; // TODO rename from Node "name" attrs later EditBone *bone = ED_armature_edit_bone_add(arm, (char *)bc_get_joint_name(node)); @@ -105,9 +103,18 @@ void ArmatureImporter::create_bone(SkinInfo *skin, COLLADAFW::Node *node, EditBo if (skin && skin->get_joint_inv_bind_matrix(joint_inv_bind_mat, node)) { // get original world-space matrix invert_m4_m4(mat, joint_inv_bind_mat); + + // And make local to armature + Object *ob_arm = skin->BKE_armature_from_object(); + if (ob_arm) { + float invmat[4][4]; + invert_m4_m4(invmat, ob_arm->obmat); + mul_m4_m4m4(mat, invmat, mat); + } } // create a bone even if there's no joint data for it (i.e. it has no influence) else { + float obmat[4][4]; // bone-space get_node_mat(obmat, node, NULL, NULL); -- cgit v1.2.3