diff options
Diffstat (limited to 'source/blender/collada/TransformWriter.cpp')
-rw-r--r-- | source/blender/collada/TransformWriter.cpp | 61 |
1 files changed, 22 insertions, 39 deletions
diff --git a/source/blender/collada/TransformWriter.cpp b/source/blender/collada/TransformWriter.cpp index 2ab9105976e..0cbb8c65cf1 100644 --- a/source/blender/collada/TransformWriter.cpp +++ b/source/blender/collada/TransformWriter.cpp @@ -28,8 +28,10 @@ void TransformWriter::add_node_transform(COLLADASW::Node &node, float mat[4][4], float parent_mat[4][4], - bool limit_precision) + BCExportSettings &export_settings + ) { + // bool limit_precision = export_settings.limit_precision; float loc[3], rot[3], scale[3]; float local[4][4]; @@ -42,67 +44,48 @@ void TransformWriter::add_node_transform(COLLADASW::Node &node, copy_m4_m4(local, mat); } + if (export_settings.get_apply_global_orientation()) { + bc_apply_global_transform(local, export_settings.get_global_transform()); + } + double dmat[4][4]; UnitConverter *converter = new UnitConverter(); converter->mat4_to_dae_double(dmat, local); delete converter; - bc_decompose(local, loc, rot, NULL, scale); - if (node.getType() == COLLADASW::Node::JOINT) { // XXX Why are joints handled differently ? + // GC: I believe this is a mistake. Here we might want to + // export according to how the transformation type + // is set, see add_node_transform_ob() node.addMatrix("transform", dmat); } else { + bc_decompose(local, loc, rot, NULL, scale); add_transform(node, loc, rot, scale); } } void TransformWriter::add_node_transform_ob(COLLADASW::Node &node, Object *ob, - BC_export_transformation_type transformation_type, - bool limit_precision) + BCExportSettings &export_settings) { -#if 0 - float rot[3], loc[3], scale[3]; - - if (ob->parent) { - float C[4][4], tmat[4][4], imat[4][4], mat[4][4]; - - // factor out scale from obmat - - copy_v3_v3(scale, ob->scale); - - ob->scale[0] = ob->scale[1] = ob->scale[2] = 1.0f; - BKE_object_to_mat4(ob, C); - copy_v3_v3(ob->scale, scale); - - mul_m4_series(tmat, ob->parent->obmat, ob->parentinv, C); - - // calculate local mat - - invert_m4_m4(imat, ob->parent->obmat); - mul_m4_m4m4(mat, imat, tmat); + BC_export_transformation_type transformation_type = + export_settings.get_export_transformation_type(); + bool limit_precision = export_settings.get_limit_precision(); - // done + /* Export the local Matrix (relative to the object parent, + * be it an object, bone or vertex(-tices)). */ + Matrix f_obmat; + BKE_object_matrix_local_get(ob, f_obmat); - mat4_to_eul(rot, mat); - copy_v3_v3(loc, mat[3]); + if (export_settings.get_apply_global_orientation()) { + bc_apply_global_transform(f_obmat, export_settings.get_global_transform()); } else { - copy_v3_v3(loc, ob->loc); - copy_v3_v3(rot, ob->rot); - copy_v3_v3(scale, ob->scale); + bc_add_global_transform(f_obmat, export_settings.get_global_transform()); } - add_transform(node, loc, rot, scale); -#endif - - /* Export the local Matrix (relative to the object parent, - * be it an object, bone or vertex(-tices)). */ - float f_obmat[4][4]; - BKE_object_matrix_local_get(ob, f_obmat); - switch (transformation_type) { case BC_TRANSFORMATION_TYPE_MATRIX: { UnitConverter converter; |