Skip to content

Instantly share code, notes, and snippets.

@supahfunk
Last active January 29, 2024 12:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save supahfunk/2bc0ae5f9bd9613ad619ba118d4f00e7 to your computer and use it in GitHub Desktop.
Save supahfunk/2bc0ae5f9bd9613ad619ba118d4f00e7 to your computer and use it in GitHub Desktop.
Cover UV / Contain UV
/*------------------------------
Background Cover UV
--------------------------------
u = basic UV
s = screensize
i = image size
------------------------------*/
vec2 CoverUV(vec2 u, vec2 s, vec2 i) {
float rs = s.x / s.y; // Aspect screen size
float ri = i.x / i.y; // Aspect image size
vec2 st = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x); // New st
vec2 o = (rs < ri ? vec2((st.x - s.x) / 2.0, 0.0) : vec2(0.0, (st.y - s.y) / 2.0)) / st; // Offset
return u * s / st + o;
}
/*------------------------------
Background Contain UV
--------------------------------
u = basic UV
s = screensize
i = image size
------------------------------*/
vec2 ContainUV (vec2 u, vec2 s, vec2 i) {
float rs = s.x / s.y; // Aspect screen size
float ri = i.x / i.y; // Aspect image size
vec2 st = rs > ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x); // New st
vec2 o = (rs > ri ? vec2((st.x - s.x) / 2.0, 0.0) : vec2(0.0, (st.y - s.y) / 2.0)) / st; // Offset
return u * s / st + o;
}
@supahfunk
Copy link
Author

supahfunk commented Aug 10, 2023

vec2 CoverUV(vec2 u, vec2 s, vec2 i) {
    vec2 r = vec2(min((s.x / s.y) / (i.x / i.y), 1.0), min((s.y / s.x) / (i.y / i.x), 1.0));
    return vec2(u.x * r.x + (1.0 - r.x) * 0.5, u.y * r.y + (1.0 - r.y) * 0.5);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment