※GLSL-canvasやShaderToyなど、記述が混在しているので注意
p:ピクセル,radius:半径
float circle(vec2 p,float radius){
vec2 dist = p-vec2(0.5);
return 1.0-step(radius-(radius*0.01),dot(dist,dist)*4.0);
}
p:ピクセル,size:縦横の大きさ
float box(vec2 p,vec2 size){
size = vec2(0.5)-size*0.5;
vec2 rect = step(size,p);
rect *= step(size,vec2(1.0)-p);
return rect.x*rect.y;
}
circle() や box() は描画系の関数として
void main( void ){
float TIME = iTime;
vec4 MOUSE = iMouse;
vec3 RES = iResolution;
float c = circle(p,1.0);
vec3 c_color = vec3(0,0,c);
float b = box(p,vec2(1.0,0.5));
vec3 b_color = vec3(b,0,0);
color = b_color + c_color;
gl_FragColor = vec4(color,1.0);
}
※画面中心を原点とする場合