Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/collada')
-rw-r--r--source/blender/collada/AnimationExporter.cpp2
-rw-r--r--source/blender/collada/ExportSettings.h12
-rw-r--r--source/blender/collada/SceneExporter.cpp2
-rw-r--r--source/blender/collada/TransformWriter.cpp36
-rw-r--r--source/blender/collada/TransformWriter.h2
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]);