diff options
author | Julien Duroure <julien.duroure@gmail.com> | 2019-02-14 23:20:43 +0300 |
---|---|---|
committer | Julien Duroure <julien.duroure@gmail.com> | 2019-02-14 23:20:43 +0300 |
commit | 5c254fc8c36941f5efb6916b609aa70b0d0f6175 (patch) | |
tree | f3383e73c63bd7b88368cfe05850a8b806448d17 | |
parent | 890a240c550430f9866352d3f1fd8a8c34840c4b (diff) |
glTF exporter: correctly convert UV texture transforms
-rwxr-xr-x | io_scene_gltf2/blender/com/gltf2_blender_conversion.py | 21 | ||||
-rwxr-xr-x | io_scene_gltf2/blender/exp/gltf2_blender_get.py | 3 |
2 files changed, 23 insertions, 1 deletions
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_conversion.py b/io_scene_gltf2/blender/com/gltf2_blender_conversion.py index adc797ee..7adb3c9b 100755 --- a/io_scene_gltf2/blender/com/gltf2_blender_conversion.py +++ b/io_scene_gltf2/blender/com/gltf2_blender_conversion.py @@ -13,7 +13,7 @@ # limitations under the License. from mathutils import Matrix, Quaternion -from math import sqrt +from math import sqrt, sin, cos def matrix_gltf_to_blender(mat_input): """Matrix from glTF format to Blender format.""" @@ -47,3 +47,22 @@ def correction_rotation(): # and lamps has no vertices :) return Quaternion((sqrt(2)/2, -sqrt(2)/2, 0.0, 0.0)).to_matrix().to_4x4() +def convert_texture_transform(texture_transform): + """ + Converts a KHR_texture_transform object in one UV space (glTF or Blender) + into the equivalent in the other UV space. The returned transform is the + same as switching UV spaces (with u,v -> u,1-v), applying texture_transform, + then switching back. + """ + offset = texture_transform.get('offset', [0, 0]) + rotation = texture_transform.get('rotation', 0) + scale = texture_transform.get('scale', [1, 1]) + return { + 'offset': [ + offset[0] - scale[1] * sin(rotation), + 1 - offset[1] - scale[1] * cos(rotation), + ], + 'rotation': -rotation, + 'scale': [scale[0], scale[1]], + } + diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_get.py b/io_scene_gltf2/blender/exp/gltf2_blender_get.py index d3c7d148..3e604bb7 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_get.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_get.py @@ -20,6 +20,7 @@ import bpy from . import gltf2_blender_export_keys from ...io.exp import gltf2_io_get +from ...blender.com.gltf2_blender_conversion import convert_texture_transform from io_scene_gltf2.io.com import gltf2_io_debug # # Globals @@ -365,6 +366,8 @@ def get_texture_transform_from_texture_node(texture_node): texture_transform["rotation"] = mapping_node.rotation[2] texture_transform["scale"] = [mapping_node.scale[0], mapping_node.scale[1]] + texture_transform = convert_texture_transform(texture_transform) + if all([component == 0 for component in texture_transform["offset"]]): del(texture_transform["offset"]) if all([component == 1 for component in texture_transform["scale"]]): |