Shader

셰이더 공부하기 - atan

이족보행달팽이 2025. 9. 6. 10:16
#ifdef GL_ES
precision highp float;
#endif

#define TWO_PI 6.28318530718
#define PI 3.141592

uniform vec2 u_resolution;
uniform float u_time;

//  Function from Iñigo Quiles
//  https://www.shadertoy.com/view/MsS3Wc
vec3 hsb2rgb( in vec3 c ){
    vec3 rgb = clamp(abs(mod(c.x*6.0+vec3(0.0,4.0,2.0),
                             6.0)-3.0)-1.0,
                     0.0,
                     1.0 );
    rgb = rgb*rgb*(3.0-2.0*rgb);
    return c.z * mix( vec3(1.0), rgb, c.y);
}

void main(){
    vec2 coord = gl_FragCoord.xy/u_resolution;
    //원점을 정중앙으로 변경하기
    coord = coord*2.0-1.0;
    
    //각도구하기
    float angle = atan(coord.y, coord.x);
    //한바퀴 2파이
    angle += PI;
    //0~1화를 위해 2파이를 나누어서 정규화
    angle /= 2.*PI;
    //색반복 주기
    angle *= 1000.;
    
    float dist = length(coord); //distance()보다 더 빠른편 매개인자가 length가 더 적음 - length는 원점기준으로 무조건 잡힘
    
    vec3 color = hsb2rgb(vec3(angle, dist, 1.0));
    
    
    gl_FragColor = vec4(color,1.0);
    
    
    
}

 

지피티에게 atan에 대해 좀 더 다루게 해보았다.