📝 ~ 

GLSL|Transform

2024.03.17
RELATED CATEGORY
TABLE OF CONTENTS

GLSLで使用するトランスフォームのコードについてメモしています。

rotate 2d

mat2 rotate2d(float rad) {
  float c = cos(rad);
  float s = sin(rad);
  return mat2(
    c, s,
    -s, c
  );
}

rotate 3d

mat4 rotationMatrix(vec3 axis, float angle) {
    axis = normalize(axis);
    float s = sin(angle);
    float c = cos(angle);
    float oc = 1.0 - c;
    return mat4(oc * axis.x * axis.x + c,           oc * axis.x * axis.y - axis.z * s,  oc * axis.z * axis.x + axis.y * s,  0.0,
                oc * axis.x * axis.y + axis.z * s,  oc * axis.y * axis.y + c,           oc * axis.y * axis.z - axis.x * s,  0.0,
                oc * axis.z * axis.x - axis.y * s,  oc * axis.y * axis.z + axis.x * s,  oc * axis.z * axis.z + c,           0.0,
                0.0,                                0.0,                                0.0,                                1.0);
}

vec3 rotate(vec3 v, vec3 axis, float angle) {
	mat4 m = rotationMatrix(axis, angle);
	return (m * vec4(v, 1.0)).xyz;
}

translate

vec2 translate(vec2 p, vec2 r, float t, float e){;
  return vec2(
    r.x * cos(uTime * t + p.x * p.y * e),
    r.y * sin(uTime * t + p.x * p.y * e)
  );
}

PICKUP ARTWORK