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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Duroure <julien.duroure@gmail.com>2019-02-14 23:20:43 +0300
committerJulien Duroure <julien.duroure@gmail.com>2019-02-14 23:20:43 +0300
commit5c254fc8c36941f5efb6916b609aa70b0d0f6175 (patch)
treef3383e73c63bd7b88368cfe05850a8b806448d17
parent890a240c550430f9866352d3f1fd8a8c34840c4b (diff)
glTF exporter: correctly convert UV texture transforms
-rwxr-xr-xio_scene_gltf2/blender/com/gltf2_blender_conversion.py21
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_get.py3
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"]]):