Last active
May 6, 2019 12:57
-
-
Save xsellier/d345d3e68a331dcbcf6bcf27b99d2e0c to your computer and use it in GitHub Desktop.
Computing UV map from an atlas texture
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static func compute_uv(atlas_texture): | |
var uv_array_region = atlas_texture.get_region() | |
var uv_array_size = atlas_texture.get_atlas().get_size() | |
# 0.5 is used to get a margin (remove blank pixel due to round) | |
var uv_array_00 = (uv_array_region.pos + Vector2(0.5, 0.5)) / uv_array_size | |
var uv_array_01 = (uv_array_region.pos + Vector2(0.5, uv_array_region.size.y - 0.5)) / uv_array_size | |
var uv_array_11 = (uv_array_region.pos + uv_array_region.size + Vector2(-0.5, -0.5)) / uv_array_size | |
var uv_array_10 = (uv_array_region.pos + Vector2(uv_array_region.size.x -0.5, 0.5)) / uv_array_size | |
return [uv_array_00, uv_array_10, uv_array_11, uv_array_01] | |
# Used for shader (when we use atlas texture in shaders) | |
static func compute_uv_decal(atlas_texture_from, atlas_texture_to): | |
var atlas_texture_size = atlas_texture_from.get_atlas().get_size() | |
var atlas_texture_from_region = atlas_texture_from.get_region().pos | |
var atlas_texture_to_region = atlas_texture_to.get_region().pos | |
return (atlas_texture_to_region - atlas_texture_from_region) / atlas_texture_size |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment