From 22214fda573811ec0a083396174fb56dbf28de1c Mon Sep 17 00:00:00 2001 From: Julien Duroure <julien.duroure@gmail.com> Date: Fri, 1 Feb 2019 19:41:26 +0100 Subject: [PATCH] glTF importer: Fix some antipodal issue in bone rotation --- .../blender/imp/gltf2_blender_animation_bone.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py b/io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py index bdafae5ec..e05f1f647 100755 --- a/io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py +++ b/io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py @@ -100,12 +100,20 @@ class BlenderBoneAnim(): if animation.samplers[channel.sampler].interpolation == "CUBICSPLINE": # TODO manage tangent? - quat_keyframes = ( + quat_keyframes = [ quaternion_gltf_to_blender(values[idx * 3 + 1]) for idx in range(0, len(keys)) - ) + ] else: - quat_keyframes = (quaternion_gltf_to_blender(vals) for vals in values) + quat_keyframes = [quaternion_gltf_to_blender(vals) for vals in values] + + # Manage antipodal quaternions + # (but is not suffisant, we also convert quaternion --> euler --> quaternion) + for i in range(1, len(quat_keyframes)): + if quat_keyframes[i].dot(quat_keyframes[i-1]) < 0: + quat_keyframes[i] = -quat_keyframes[i] + + if not node.parent: final_rots = [ bind_rotation.inverted() @ quat_keyframe -- GitLab