Skip to content

Instantly share code, notes, and snippets.

@xsellier
Last active May 6, 2019 12:57
Show Gist options
  • Save xsellier/d345d3e68a331dcbcf6bcf27b99d2e0c to your computer and use it in GitHub Desktop.
Save xsellier/d345d3e68a331dcbcf6bcf27b99d2e0c to your computer and use it in GitHub Desktop.
Computing UV map from an atlas texture
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