[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