Skip to content

Instantly share code, notes, and snippets.

@ayamflow
Created January 16, 2018 23:24
Show Gist options
  • Select an option

  • Save ayamflow/c06bc0c8a64f985dd431bd0ac5b557cd to your computer and use it in GitHub Desktop.

Select an option

Save ayamflow/c06bc0c8a64f985dd431bd0ac5b557cd to your computer and use it in GitHub Desktop.
Rotate UV in GLSL
vec2 rotateUV(vec2 uv, float rotation)
{
float mid = 0.5;
return vec2(
cos(rotation) * (uv.x - mid) + sin(rotation) * (uv.y - mid) + mid,
cos(rotation) * (uv.y - mid) - sin(rotation) * (uv.x - mid) + mid
);
}
vec2 rotateUV(vec2 uv, float rotation, vec2 mid)
{
return vec2(
cos(rotation) * (uv.x - mid.x) + sin(rotation) * (uv.y - mid.y) + mid.x,
cos(rotation) * (uv.y - mid.y) - sin(rotation) * (uv.x - mid.x) + mid.y
);
}
vec2 rotateUV(vec2 uv, float rotation, float mid)
{
return vec2(
cos(rotation) * (uv.x - mid) + sin(rotation) * (uv.y - mid) + mid,
cos(rotation) * (uv.y - mid) - sin(rotation) * (uv.x - mid) + mid
);
}
#pragma glslify: export(rotateUV)
@Sparkwave2

Sparkwave2 commented Aug 30, 2020

Copy link
Copy Markdown

@nickyvan

nickyvan commented Sep 8, 2020

Copy link
Copy Markdown

<3+++

@urjas

urjas commented Oct 28, 2020

Copy link
Copy Markdown

<3

@pathei

pathei commented Nov 2, 2020

Copy link
Copy Markdown

<3

@mats31

mats31 commented Jan 16, 2021

Copy link
Copy Markdown

@vfreman

vfreman commented Feb 11, 2021

Copy link
Copy Markdown

👌

@SabinT

SabinT commented Apr 26, 2021

Copy link
Copy Markdown

<3

@FuriouZz

FuriouZz commented May 3, 2021

Copy link
Copy Markdown

Compute cos()/sin() once.

vec2 rotateUV(vec2 uv, float rotation)
{
    float mid = 0.5;
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    return vec2(
        cosAngle * (uv.x - mid) + sinAngle * (uv.y - mid) + mid,
        cosAngle * (uv.y - mid) - sinAngle * (uv.x - mid) + mid
    );
}

vec2 rotateUV(vec2 uv, float rotation, vec2 mid)
{
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    return vec2(
        cosAngle * (uv.x - mid.x) + sinAngle * (uv.y - mid.y) + mid.x,
        cosAngle * (uv.y - mid.y) - sinAngle * (uv.x - mid.x) + mid.y
    );
}

vec2 rotateUV(vec2 uv, float rotation, float mid)
{
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    return vec2(
        cosAngle * (uv.x - mid) + sinAngle * (uv.y - mid) + mid,
        cosAngle * (uv.y - mid) - sinAngle * (uv.x - mid) + mid
    );
}

#pragma glslify: export(rotateUV)

@manudurgoni

Copy link
Copy Markdown

<3

@fahad0samara

Copy link
Copy Markdown

<3

@zkarmakun

Copy link
Copy Markdown

<3

@CharlesGrs

Copy link
Copy Markdown

<3

@Wizer21

Wizer21 commented Jan 5, 2022

Copy link
Copy Markdown

<3

@geminic

geminic commented Feb 11, 2022

Copy link
Copy Markdown

👍

@mathijspb

Copy link
Copy Markdown

<3

@Vaults

Vaults commented Mar 13, 2022

Copy link
Copy Markdown

🙏

@Lhuith

Lhuith commented Aug 17, 2022

Copy link
Copy Markdown

<3

@Orsbert

Orsbert commented Aug 22, 2022

Copy link
Copy Markdown

<3

@dakumisu

Copy link
Copy Markdown

<3

@tlztonio

tlztonio commented Nov 5, 2022

Copy link
Copy Markdown

@MrSquirrel26

Copy link
Copy Markdown

<3

@LeonBaudouin

Copy link
Copy Markdown

<3

@bogosorted

Copy link
Copy Markdown

<3

@SPLEEN96

Copy link
Copy Markdown

<3

@flement

flement commented Apr 4, 2023

Copy link
Copy Markdown

❤️

@dmnsgn

dmnsgn commented Oct 17, 2023

Copy link
Copy Markdown
Compute cos()/sin() once.
vec2 rotateUV(vec2 uv, float rotation)
{
    float mid = 0.5;
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    return vec2(
        cosAngle * (uv.x - mid) + sinAngle * (uv.y - mid) + mid,
        cosAngle * (uv.y - mid) - sinAngle * (uv.x - mid) + mid
    );
}

vec2 rotateUV(vec2 uv, float rotation, vec2 mid)
{
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    return vec2(
        cosAngle * (uv.x - mid.x) + sinAngle * (uv.y - mid.y) + mid.x,
        cosAngle * (uv.y - mid.y) - sinAngle * (uv.x - mid.x) + mid.y
    );
}

vec2 rotateUV(vec2 uv, float rotation, float mid)
{
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    return vec2(
        cosAngle * (uv.x - mid) + sinAngle * (uv.y - mid) + mid,
        cosAngle * (uv.y - mid) - sinAngle * (uv.x - mid) + mid
    );
}

Compute point once:

vec2 rotateUV(vec2 uv, float rotation)
{
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    vec2 p = uv - vec2(0.5);
    return vec2(
        cosAngle * p.x + sinAngle * p.y + 0.5,
        cosAngle * p.y - sinAngle * p.x + 0.5
    );
}

vec2 rotateUV(vec2 uv, float rotation, vec2 mid)
{
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    vec2 p = uv - mid;
    return vec2(
        cosAngle * p.x + sinAngle * p.y + mid.x,
        cosAngle * p.y - sinAngle * p.x + mid.y
    );
}

vec2 rotateUV(vec2 uv, float rotation, float mid)
{
    float cosAngle = cos(rotation);
    float sinAngle = sin(rotation);
    vec2 p = uv - vec2(mid);
    return vec2(
        cosAngle * p.x + sinAngle * p.y + mid,
        cosAngle * p.y - sinAngle * p.x + mid
    );
}

#pragma glslify: export(rotateUV)

💙

@Ahlecss

Ahlecss commented Mar 29, 2024

Copy link
Copy Markdown

<3

@PolyBytes

Copy link
Copy Markdown

<3

@BerryOnGit

Copy link
Copy Markdown

<3

@noboike

noboike commented Dec 27, 2024

Copy link
Copy Markdown

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

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