rotate & scale
rotate & scale
Dot = 내적연산
Cross = 외적연산
실제로 사용하고 있음므로
crucis = cross의 라틴어로 대체
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
float rect(vec2 loc, vec2 size, vec2 coord){
vec2 sw = loc - size/2.;
vec2 ne = loc + size/2.;
float pad = 0.01;
vec2 rect = smoothstep(sw-pad, sw, coord);
rect -= smoothstep(ne, ne+pad, coord);
return(rect.x*rect.y);
}
mat2 rotate2d(float _angle){
return mat2(cos(_angle),-sin(_angle),
sin(_angle),cos(_angle));
}
float crucis(vec2 loc, vec2 size, vec2 coord){
float r1 = rect(loc, size, coord);
float r2 = rect(loc, vec2(size.y,size.x), coord);
return max(r1, r2);
}
void main(){
vec2 coord = gl_FragCoord.xy/u_resolution;
coord = coord*2.-1.;
coord.x *= u_resolution.x/u_resolution.y;
coord = coord*(sin(u_time));
// coord = coord*1.;
// 숫자가 작아 질수록 커지고 커질수록 작아진다.
// 화면을 멀리서 보는 효과때문이다.
coord *= rotate2d(3.*sin(u_time)); // rotate는 값이 커질수록 오른쪽으로 돈다.
// coord = coord*rotate2d(0.);
vec3 col = vec3(crucis(vec2(.0), vec2(0.600,0.110), coord));
gl_FragColor = vec4(col, 1.);
}