[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22219] branches/soc-2009-chingachgook/ source/blender/collada/DocumentExporter.cpp: Fixed child object transform issue in exporter: transform written for child objects was local-to-world, now it' s local-to-parent.

Chingiz Dyussenov chingiz.ds at gmail.com
Wed Aug 5 08:45:48 CEST 2009


Revision: 22219
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22219
Author:   chingachgook
Date:     2009-08-05 08:45:47 +0200 (Wed, 05 Aug 2009)

Log Message:
-----------
Fixed child object transform issue in exporter: transform written for child objects was local-to-world, now it's local-to-parent.

Modified Paths:
--------------
    branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp

Modified: branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp
===================================================================
--- branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp	2009-08-05 06:06:58 UTC (rev 22218)
+++ branches/soc-2009-chingachgook/source/blender/collada/DocumentExporter.cpp	2009-08-05 06:45:47 UTC (rev 22219)
@@ -599,11 +599,21 @@
 class TransformWriter : protected TransformBase
 {
 protected:
-	void add_node_transform(COLLADASW::Node& node, float mat[][4])
+	void add_node_transform(COLLADASW::Node& node, float mat[][4], float parent_mat[][4])
 	{
 		float loc[3], rot[3], size[3];
+		float local[4][4];
 
-		TransformBase::decompose(mat, loc, rot, size);
+		if (parent_mat) {
+			float invpar[4][4];
+			Mat4Invert(invpar, parent_mat);
+			Mat4MulMat4(local, mat, invpar);
+		}
+		else {
+			Mat4CpyMat4(local, mat);
+		}
+
+		TransformBase::decompose(local, loc, rot, size);
 		
 		/*
 		// this code used to create a single <rotate> representing object rotation
@@ -842,7 +852,7 @@
 			Mat4MulMat4(mat, pchan->pose_mat, ob_arm->obmat);
 		}
 
-		TransformWriter::add_node_transform(node, mat);
+		TransformWriter::add_node_transform(node, mat, NULL);
 	}
 
 	std::string get_controller_id(Object *ob_arm)
@@ -1179,7 +1189,7 @@
 		else
 			Mat4CpyMat4(mat, ob->obmat);
 
-		TransformWriter::add_node_transform(node, mat);
+		TransformWriter::add_node_transform(node, mat, ob->parent ? ob->parent->obmat : NULL);
 		
 		// <instance_geometry>
 		if (ob->type == OB_MESH) {





More information about the Bf-blender-cvs mailing list