[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58742] trunk/blender/source/blender/ collada: apply world matrix only to armature, Bones and children get it implicit via parenting
Gaia Clary
gaia.clary at machinimatrix.org
Tue Jul 30 13:10:04 CEST 2013
Revision: 58742
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58742
Author: gaiaclary
Date: 2013-07-30 11:10:04 +0000 (Tue, 30 Jul 2013)
Log Message:
-----------
apply world matrix only to armature, Bones and children get it implicit via parenting
Modified Paths:
--------------
trunk/blender/source/blender/collada/ArmatureImporter.cpp
trunk/blender/source/blender/collada/SkinInfo.cpp
Modified: trunk/blender/source/blender/collada/ArmatureImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ArmatureImporter.cpp 2013-07-30 10:58:36 UTC (rev 58741)
+++ trunk/blender/source/blender/collada/ArmatureImporter.cpp 2013-07-30 11:10:04 UTC (rev 58742)
@@ -86,17 +86,15 @@
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<COLLADAFW::Node *>::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 @@
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);
Modified: trunk/blender/source/blender/collada/SkinInfo.cpp
===================================================================
--- trunk/blender/source/blender/collada/SkinInfo.cpp 2013-07-30 10:58:36 UTC (rev 58741)
+++ trunk/blender/source/blender/collada/SkinInfo.cpp 2013-07-30 11:10:04 UTC (rev 58742)
@@ -226,8 +226,6 @@
ArmatureModifierData *amd = (ArmatureModifierData *)md;
amd->object = ob_arm;
- copy_m4_m4(ob->obmat, bind_shape_matrix);
- BKE_object_apply_mat4(ob, ob->obmat, 0, 0);
#if 1
bc_set_parent(ob, ob_arm, C);
#else
@@ -243,6 +241,8 @@
DAG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
#endif
+ copy_m4_m4(ob->obmat, bind_shape_matrix);
+ BKE_object_apply_mat4(ob, ob->obmat, 0, 0);
amd->deformflag = ARM_DEF_VGROUP;
More information about the Bf-blender-cvs
mailing list