개발/Shader / / 2023. 2. 28. 20:19

GLSL - shape circle clover (or windmill) 클로버 혹은 바람개비 모양

반응형

https://thebookofshaders.com/07/

 

The Book of Shaders

Gentle step-by-step guide through the abstract and complex universe of Fragment Shaders.

thebookofshaders.com

※ 다음 페이지를 참고하여 공부한 게시물입니다.

https://www.opentutorials.org/module/3659/22810

 

14. circle3 - GLSL / Shader

14. circle3 2018-10-29 08:51:13

www.opentutorials.org

Circle

// Author @patriciogv - 2015
// http://patriciogonzalezvivo.com

#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;

void main(){
    vec2 st = gl_FragCoord.xy/u_resolution.xy;
    vec3 color = vec3(0.0);

    vec2 pos = vec2(0.5)-st;

    float r = length(pos)*2.0;
    float a = atan(pos.y,pos.x);

    float f = cos(a*3.);
    // f = abs(cos(a*3.));
    // f = abs(cos(a*2.5))*.5+.3;
    // f = abs(cos(a*12.)*sin(a*3.))*.8+.1;
    // f = smoothstep(-.5,1., cos(a*10.))*0.2+0.5;

    color = vec3( 1.-smoothstep(f,f+0.02,r) );

    gl_FragColor = vec4(color, 1.0);
}

위와 같은 클로버? 바람개비? 문양을 그리는 코드에 대해서 알아보자.

 

#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;

void main(){
    vec2 coord = gl_FragCoord.xy/u_resolution;
    coord = coord*2.-1.;
    coord.x *= u_resolution.x/u_resolution.y;
    
    float a = atan(coord.y, coord.x);
    float d = distance(vec2(0.), coord);
    
    a += 0.;
    a *= 3.;
    
    float r = sin(a);
    
    vec3 col = vec3(step(r, d));
    
    gl_FragColor = vec4(col, 1.);
}

위와 같은 모양을 그려내기 위한 코드를 보자.

a에는 atan()으로 각 좌표에 대한 각도를 담는다. d에는 원점과 좌표간의 distance를 담는다. 

그런다음 반지름 r의 값을 sin()을 이용해서 a각도에 따라 반지름이 0에서 1을 왔다갔다 한다. 이 주기는 a에 3.0을 곱했으므로 총 세번 나오게 되어 날개가 3개인 바람개비 모양이 나오게 된다. 

step(r,d)로 반지름 r보다 작은 distance는 0으로 처리하고 나머지는 1로 처리하였으므로 색은 바람개비 검은색에 배경 흰색으로 나온다. 

 

step(d,r)과 같이 distance보다 반지름이 작은 경우를 0으로 한다면 이렇게 반전된 색상이 된다.

각도의 크기인 a값에 주기의 반복 횟수 3.0을 곱해서 주기가 나오는데, a에 특정 수를 더하면 각도에 대한 offset을 주게 된다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유