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);
}