diff options
Diffstat (limited to 'source/blender/collada')
-rw-r--r-- | source/blender/collada/AnimationExporter.cpp | 2 | ||||
-rw-r--r-- | source/blender/collada/ExportSettings.h | 12 | ||||
-rw-r--r-- | source/blender/collada/SceneExporter.cpp | 2 | ||||
-rw-r--r-- | source/blender/collada/TransformWriter.cpp | 36 | ||||
-rw-r--r-- | source/blender/collada/TransformWriter.h | 2 |
5 files changed, 36 insertions, 18 deletions
diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp index edd74886541..2c6ae8a52f5 100644 --- a/source/blender/collada/AnimationExporter.cpp +++ b/source/blender/collada/AnimationExporter.cpp @@ -133,7 +133,7 @@ void AnimationExporter::exportAnimation(Object *ob, BCAnimationSampler &sampler) * Note: For Armatures the skeletal animation has already been exported (see above) * However Armatures also can have Object animation. */ - bool export_as_matrix = this->export_settings.get_export_transformation_type() == + bool export_as_matrix = this->export_settings.get_animation_transformation_type() == BC_TRANSFORMATION_TYPE_MATRIX; if (export_as_matrix) { diff --git a/source/blender/collada/ExportSettings.h b/source/blender/collada/ExportSettings.h index 7112aeadb2a..ca118e4d14d 100644 --- a/source/blender/collada/ExportSettings.h +++ b/source/blender/collada/ExportSettings.h @@ -81,7 +81,8 @@ typedef struct ExportSettings { bool use_object_instantiation; bool use_blender_profile; bool sort_by_name; - BC_export_transformation_type export_transformation_type; + BC_export_transformation_type object_transformation_type; + BC_export_transformation_type animation_transformation_type; bool open_sim; bool limit_precision; @@ -232,9 +233,14 @@ class BCExportSettings { return export_settings.sort_by_name; } - BC_export_transformation_type get_export_transformation_type() + BC_export_transformation_type get_object_transformation_type() { - return export_settings.export_transformation_type; + return export_settings.object_transformation_type; + } + + BC_export_transformation_type get_animation_transformation_type() + { + return export_settings.animation_transformation_type; } bool get_open_sim() diff --git a/source/blender/collada/SceneExporter.cpp b/source/blender/collada/SceneExporter.cpp index 22b2eed79d3..7bf6a145886 100644 --- a/source/blender/collada/SceneExporter.cpp +++ b/source/blender/collada/SceneExporter.cpp @@ -128,7 +128,7 @@ void SceneExporter::writeNode(Object *ob) colladaNode.start(); if (ob->type == OB_MESH && armature_exported) { /* for skinned mesh we write obmat in <bind_shape_matrix> */ - TransformWriter::add_node_transform_identity(colladaNode); + TransformWriter::add_node_transform_identity(colladaNode, this->export_settings); } else { TransformWriter::add_node_transform_ob(colladaNode, ob, this->export_settings); diff --git a/source/blender/collada/TransformWriter.cpp b/source/blender/collada/TransformWriter.cpp index 965338a9fd8..fbf75552b85 100644 --- a/source/blender/collada/TransformWriter.cpp +++ b/source/blender/collada/TransformWriter.cpp @@ -30,11 +30,8 @@ void TransformWriter::add_joint_transform(COLLADASW::Node &node, float parent_mat[4][4], BCExportSettings &export_settings, bool has_restmat - ) { - // bool limit_precision = export_settings.limit_precision; - float loc[3], rot[3], scale[3]; float local[4][4]; if (parent_mat) { @@ -55,14 +52,11 @@ void TransformWriter::add_joint_transform(COLLADASW::Node &node, converter->mat4_to_dae_double(dmat, local); delete converter; - 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() + if (export_settings.get_object_transformation_type() == BC_TRANSFORMATION_TYPE_MATRIX) { node.addMatrix("transform", dmat); } else { + float loc[3], rot[3], scale[3]; bc_decompose(local, loc, rot, NULL, scale); add_transform(node, loc, rot, scale); } @@ -73,7 +67,7 @@ void TransformWriter::add_node_transform_ob(COLLADASW::Node &node, BCExportSettings &export_settings) { BC_export_transformation_type transformation_type = - export_settings.get_export_transformation_type(); + export_settings.get_object_transformation_type(); bool limit_precision = export_settings.get_limit_precision(); /* Export the local Matrix (relative to the object parent, @@ -112,10 +106,28 @@ void TransformWriter::add_node_transform_ob(COLLADASW::Node &node, } } -void TransformWriter::add_node_transform_identity(COLLADASW::Node &node) +void TransformWriter::add_node_transform_identity( + COLLADASW::Node &node, + BCExportSettings &export_settings) { - float loc[3] = {0.0f, 0.0f, 0.0f}, scale[3] = {1.0f, 1.0f, 1.0f}, rot[3] = {0.0f, 0.0f, 0.0f}; - add_transform(node, loc, rot, scale); + BC_export_transformation_type transformation_type = + export_settings.get_object_transformation_type(); + switch (transformation_type) { + case BC_TRANSFORMATION_TYPE_MATRIX: { + BCMatrix mat; + DMatrix d_obmat; + mat.get_matrix(d_obmat); + node.addMatrix("transform", d_obmat); + break; + } + default: { + float loc[3] = {0.0f, 0.0f, 0.0f}; + float scale[3] = {1.0f, 1.0f, 1.0f}; + float rot[3] = {0.0f, 0.0f, 0.0f}; + add_transform(node, loc, rot, scale); + break; + } + } } void TransformWriter::add_transform(COLLADASW::Node &node, diff --git a/source/blender/collada/TransformWriter.h b/source/blender/collada/TransformWriter.h index e12c2053594..f0bfbaabbc2 100644 --- a/source/blender/collada/TransformWriter.h +++ b/source/blender/collada/TransformWriter.h @@ -39,7 +39,7 @@ class TransformWriter { void add_node_transform_ob(COLLADASW::Node &node, Object *ob, BCExportSettings &export_settings); - void add_node_transform_identity(COLLADASW::Node &node); + void add_node_transform_identity(COLLADASW::Node &node, BCExportSettings &export_settings); private: void add_transform(COLLADASW::Node &node, float loc[3], float rot[3], float scale[3]); |