Commit: 482d3522b4e7365e226d33ccac11907437975f36 Author: Gaia Clary Date: Wed Apr 10 22:22:26 2019 +0200 Branches: collada https://developer.blender.org/rB482d3522b4e7365e226d33ccac11907437975f36
feature: Collada export:added global axis transform option(wip) =================================================================== M source/blender/collada/AnimationExporter.cpp M source/blender/collada/AnimationExporter.h M source/blender/collada/BCAnimationSampler.cpp M source/blender/collada/BCAnimationSampler.h M source/blender/collada/BCSampleData.cpp M source/blender/collada/BCSampleData.h M source/blender/collada/BlenderContext.h M source/blender/collada/DocumentExporter.cpp M source/blender/collada/ExportSettings.h M source/blender/collada/GeometryExporter.cpp M source/blender/collada/SceneExporter.h M source/blender/collada/TransformWriter.cpp M source/blender/collada/collada_utils.cpp =================================================================== diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp index 1a52586f03a..b2eb9c1fbdb 100644 --- a/source/blender/collada/AnimationExporter.cpp +++ b/source/blender/collada/AnimationExporter.cpp @@ -78,7 +78,7 @@ void AnimationExporter::close_animation_container(bool has_container) bool AnimationExporter::exportAnimations() { - Scene *sce = blender_context.get_scene(); + Scene *sce = export_settings.get_scene(); LinkNode &export_set = *this->export_settings.get_export_set(); bool has_anim_data = bc_has_animations(sce, export_set); @@ -88,16 +88,10 @@ bool AnimationExporter::exportAnimations() BCObjectSet animated_subset; BCAnimationSampler::get_animated_from_export_set(animated_subset, export_set); animation_count = animated_subset.size(); - BCAnimationSampler animation_sampler(blender_context, animated_subset); + BCAnimationSampler animation_sampler(export_settings, animated_subset); try { - animation_sampler.sample_scene( - export_settings.get_sampling_rate(), - /*keyframe_at_end = */ true, - export_settings.get_open_sim(), - export_settings.get_keep_keyframes(), - export_settings.get_export_animation_type() - ); + animation_sampler.sample_scene(export_settings, /*keyframe_at_end = */ true); openLibrary(); @@ -234,11 +228,24 @@ void AnimationExporter::export_matrix_animation(Object *ob, BCAnimationSampler & std::string target = translate_id(name) + '/' + channel_type; - export_collada_matrix_animation(id, name, target, frames, samples); + BC_global_rotation_type global_rotation_type = get_global_rotation_type(ob); + export_collada_matrix_animation(id, name, target, frames, samples, global_rotation_type, ob->parentinv); } } } +BC_global_rotation_type AnimationExporter::get_global_rotation_type(Object *ob) +{ + bool is_export_root = this->export_settings.is_export_root(ob); + if (!is_export_root) { + return BC_NO_ROTATION; + } + + bool apply_global_rotation = this->export_settings.get_apply_global_orientation(); + + return (apply_global_rotation) ? BC_DATA_ROTATION : BC_OBJECT_ROTATION; +} + //write bone animations in transform matrix sources void AnimationExporter::export_bone_animations_recursive(Object *ob, Bone *bone, BCAnimationSampler &sampler) { @@ -344,7 +351,8 @@ void AnimationExporter::export_curve_animation( collada_target += "/" + get_collada_sid(curve, axis); } - export_collada_curve_animation(id, curve_name, collada_target, axis, curve); + BC_global_rotation_type global_rotation_type = get_global_rotation_type(ob); + export_collada_curve_animation(id, curve_name, collada_target, axis, curve, global_rotation_type); } @@ -356,7 +364,8 @@ void AnimationExporter::export_bone_animation(Object *ob, Bone *bone, BCFrames & std::string id = bc_get_action_id(id_name(action), name, bone_name, "pose_matrix"); std::string target = translate_id(id_name(ob) + "_" + bone_name) + "/transform"; - export_collada_matrix_animation(id, name, target, frames, samples); + BC_global_rotation_type global_rotation_type = get_global_rotation_type(ob); + export_collada_matrix_animation(id, name, target, frames, samples, global_rotation_type, ob->parentinv); } bool AnimationExporter::is_bone_deform_group(Bone *bone) @@ -382,7 +391,8 @@ void AnimationExporter::export_collada_curve_animation( std::string name, std::string collada_target, std::string axis, - BCAnimationCurve &curve) + BCAnimationCurve &curve, + BC_global_rotation_type global_rotation_type) { BCFrames frames; BCValues values; @@ -430,14 +440,14 @@ void AnimationExporter::export_collada_curve_animation( closeAnimation(); } -void AnimationExporter::export_collada_matrix_animation(std::string id, std::string name, std::string target, BCFrames &frames, BCMatrixSampleMap &samples) +void AnimationExporter::export_collada_matrix_animation(std::string id, std::string name, std::string target, BCFrames &frames, BCMatrixSampleMap &samples, BC_global_rotation_type global_rotation_type, Matrix &parentinv) { fprintf(stdout, "Export animation matrix %s (%d control points)\n", id.c_str(), int(frames.size())); openAnimationWithClip(id, name); std::string input_id = collada_source_from_values(BC_SOURCE_TYPE_TIMEFRAME, COLLADASW::InputSemantic::INPUT, frames, id, ""); - std::string output_id = collada_source_from_values(samples, id); + std::string output_id = collada_source_from_values(samples, id, global_rotation_type, parentinv); std::string interpolation_id = collada_linear_interpolation_source(frames.size(), id); std::string sampler_id = std::string(id) + SAMPLER_ID_SUFFIX; @@ -516,7 +526,8 @@ void AnimationExporter::add_source_parameters(COLLADASW::SourceBase::ParameterNa std::string AnimationExporter::collada_tangent_from_curve(COLLADASW::InputSemantic::Semantics semantic, BCAnimationCurve &curve, const std::string& anim_id, std::string axis_name) { - Scene *scene = blender_context.get_scene(); + Scene *scene = this->export_settings.get_scene(); + std::string channel = curve.get_channel_target(); const std::string source_id = anim_id + get_semantic_suffix(semantic); @@ -562,6 +573,7 @@ std::string AnimationExporter::collada_source_from_values( const std::string& anim_id, const std::string axis_name) { + BlenderContext &blender_context = this->export_settings.get_blender_context(); Scene *scene = blender_context.get_scene(); /* T can be float, int or double */ @@ -602,7 +614,7 @@ std::string AnimationExporter::collada_source_from_values( /* * Create a collada matrix source for a set of samples */ -std::string AnimationExporter::collada_source_from_values(BCMatrixSampleMap &samples, const std::string &anim_id) +std::string AnimationExporter::collada_source_from_values(BCMatrixSampleMap &samples, const std::string &anim_id, BC_global_rotation_type global_rotation_type, Matrix &parentinv) { COLLADASW::InputSemantic::Semantics semantic = COLLADASW::InputSemantic::OUTPUT; std::string source_id = anim_id + get_semantic_suffix(semantic); @@ -621,9 +633,10 @@ std::string AnimationExporter::collada_source_from_values(BCMatrixSampleMap &sam BCMatrixSampleMap::iterator it; int precision = (this->export_settings.get_limit_precision()) ? 6 : -1; // could be made configurable for (it = samples.begin(); it != samples.end(); it++) { - const BCMatrix *sample = it->second; - double daemat[4][4]; - sample->get_matrix(daemat, true, precision); + BCMatrix sample = BCMatrix(*it->second); + DMatrix daemat; + sample.add_transform(this->export_settings.get_global_transform()); + sample.get_matrix(daemat, true, precision); source.appendValues(daemat); } diff --git a/source/blender/collada/AnimationExporter.h b/source/blender/collada/AnimationExporter.h index 70f3f786658..cf55a98ad95 100644 --- a/source/blender/collada/AnimationExporter.h +++ b/source/blender/collada/AnimationExporter.h @@ -87,18 +87,25 @@ typedef enum BC_animation_source_type { BC_SOURCE_TYPE_TIMEFRAME } BC_animation_source_type; +typedef enum BC_global_rotation_type { + BC_NO_ROTATION, + BC_OBJECT_ROTATION, + BC_DATA_ROTATION +} BC_global_rotation_type; + class AnimationExporter: COLLADASW::LibraryAnimations { private: - BlenderContext &blender_context; + COLLADASW::StreamWriter *sw; BCExportSettings &export_settings; + BC_global_rotation_type get_global_rotation_type(Object *ob); + public: - AnimationExporter(BlenderContext &blender_context, COLLADASW::StreamWriter *sw, BCExportSettings &export_settings): + AnimationExporter(COLLADASW::StreamWriter *sw, BCExportSettings &export_settings): COLLADASW::LibraryAnimations(sw), - blender_context(blender_context), sw(sw), export_settings(export_settings) {} @@ -178,7 +185,8 @@ protected: std::string name, std::string target, std::string axis, - BCAnimationCurve &curve); + BCAnimationCurve &curve, + BC_global_rotation_type global_rotation_type); /* call to the low level collada exporter */ void export_collada_matrix_animation( @@ -186,7 +194,9 @@ protected: std::string name, std::string target, BCFrames &frames, - BCMatrixSampleMap &outmats); + BCMatrixSampleMap &outmats, + BC_global_rotation_type global_rotation_type, + Matrix &parentinv); BCAnimationCurve *get_modified_export_curve(Object *ob, BCAnimationCurve &curve, BCAnimationCurveMap &curves); @@ -206,7 +216,9 @@ protected: /* Output sources (matrix data) */ std::string collada_source_from_values( BCMatrixSampleMap &samples, - const std::string& anim_id); + const std::string& anim_id, + BC_global_rotation_type global_rotation_type, + Matrix &parentinv); /* Interpolation sources */ std::string collada_linear_interpolation_source( diff --git a/source/blender/collada/BCAnimationSampler.cpp b/source/blender/collada/BCAnimationSampler.cpp index afc37191e2e..e21ad090570 100644 --- a/source/blender/collada/BCAnimationSampler.cpp +++ b/source/blender/collada/BCAnimationSampler.cpp @@ -44,8 +44,8 @@ extern "C" { static std::string EMPTY_STRING; static BCAnimationCurveMap BCEmptyAnimationCurves; -BCAnimationSampler::BCAnimationSampler(BlenderContext &blender_context, BCObjectSet &object_set): - blender_context(blender_context) +BCAnimationSampler::BCAnimationSampler(BCExportSettings &export_settings, BCObjectSet &object_set): + export_settings(export_settings) { BCObjectSet::iterator it; for (it = object_set.begin(); it != object_set.end(); ++it) { @@ -65,6 +65,7 @@ BCAnimationSampler::~BCAnimationSampler() void BCAnimationSampler::add_object(Object *ob) { + BlenderContext blender_context = export_settings.get_blender_context(); BCAnimation *animation = new BCAnimation(blender_context.get_context(), ob); objects[ob] = animation; @@ -150,6 +151,10 @@ void BCAnimationSampler::update_animation_curves(BCAnimation &animation, BCSampl BCSample &BCAnimationSampler::sample_object(Object *ob, int frame_index, bool for_opensim) { BCSample &ob_sample = sample_data.add(ob, frame_index); + //if (export_settings.get_appl @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs