Shader
셰이더 공부 - 2D Matrix
이족보행달팽이
2025. 9. 8. 06:27
Translate 매트릭스
#ifdef GL_ES
precision mediump float;
#endif
#define TWO_PI 6.28318530718
#define PI 3.141592
uniform vec2 u_resolution;
uniform float u_time;
float bar(vec2 loc, vec2 size, vec2 coord){
vec2 sw = loc - size/2.0;
vec2 ne = loc + size/2.0;
vec2 ret = step(sw,coord) - step(ne, coord);
return ret.x*ret.y;
}
float cross(vec2 loc, vec2 size, vec2 coord){
float b1 = bar(loc, size, coord);
float b2 = bar(loc, vec2(size.y,size.x), coord);
return max(b1,b2);
}
void main(){
vec2 coord = gl_FragCoord.xy/u_resolution;
coord.x *= u_resolution.x/u_resolution.y;
coord = coord*2.-1.;
vec3 col;
float rad = 0.5;
vec2 loc =vec2(0.) + vec2(sin(u_time)*rad, cos(u_time)*rad);
coord += loc;
col = vec3(cross(vec2(0.), vec2(0.65, 0.08), coord));
gl_FragColor = vec4(col, 1.0);
}
Rotation Matrix
#ifdef GL_ES
precision mediump float;
#endif
#define TWO_PI 6.28318530718
#define PI 3.141592
uniform vec2 u_resolution;
uniform float u_time;
float rect(vec2 loc, vec2 size, vec2 coord){
vec2 sw = loc - size/2.0;
vec2 ne = loc + size/2.0;
float pad = 0.01;
vec2 ret = smoothstep(sw-pad,sw,coord) - smoothstep(ne,ne+pad, coord);
return ret.x*ret.y;
}
float cross(vec2 loc, vec2 size, vec2 coord){
float b1 = rect(loc, size, coord);
float b2 = rect(loc, size.yx, coord);
return max(b1,b2);
}
mat2 rotate2d(float _angle){
return mat2(cos(_angle), -sin(_angle),
sin(_angle),cos(_angle));
}
void main(){
vec2 coord = gl_FragCoord.xy/u_resolution;
coord = coord*2.-1.;
coord.x *= u_resolution.x/u_resolution.y;
float rotatespeed = 1.0*u_time;
coord = coord*rotate2d(rotatespeed);
vec3 col;
col = vec3(cross(vec2(.0), vec2(0.55, 0.07), coord));
gl_FragColor = vec4(col, 1.0);
}