Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const mat2 rot180 = mat2(cos(3.14159),sin(3.14159),-sin(3.14159),cos(3.14159));
- float time = iGlobalTime;
- vec3 rgbcol(float r, float g, float b){
- return vec3(r/256.,g/256.,b/256.);
- }
- float sineCurve(vec2 p){
- return p.x-sin(3.*p.y-8.*time);
- }
- vec2 gradSineCurve(vec2 p){
- vec2 h = vec2( 0.1, 0.0 );
- return vec2( sineCurve(p+h.xy) - sineCurve(p-h.xy),
- sineCurve(p+h.yx) - sineCurve(p-h.yx) )/(2.0*h.x);
- }
- float boxRegion(vec2 p,float a, float b){
- return min(1.-abs(a*p.x),1.-abs(b*p.y));
- }
- float pseudoCircle(vec2 p,float r, float alpha){
- float f = pow(p.x,alpha)+pow(p.y,alpha);
- return r-pow(f,1./alpha);
- }
- float triangle(vec2 p,float a,float b){
- return min(p.y,min(p.x-p.y+0.5,-p.x-p.y+0.5));
- }
- void main(){
- float angle = sin(8.*time);
- mat2 m = mat2(cos(angle),sin(angle),-sin(angle),cos(angle));
- vec2 p = gl_FragCoord.xy/iResolution.xy-0.5;
- p.x*=iResolution.x/iResolution.y;
- //Curve
- vec2 pcurve = 10.*p;
- float lineCurve = abs(sineCurve(pcurve));
- vec2 gradLineCurve = gradSineCurve(pcurve);
- lineCurve = lineCurve/length(gradLineCurve);
- lineCurve = smoothstep(0.025,0.025,lineCurve)+step(0.,-pcurve.y);
- lineCurve = clamp(0.,1.,lineCurve);
- //Base pencil
- vec3 colBasePencil;
- float height = cos(8.*time);
- height*=height;
- vec2 ppencil = (m*(p-vec2(0.0,0.05*height+0.07)));
- float basePencil = boxRegion(ppencil,15.,5.);
- basePencil = step(0.5,basePencil);
- basePencil = max(step(0.,pseudoCircle(30.*ppencil+vec2(0.,-3.),1.,2.5)),basePencil);
- float bandcircle = step(0.,length(ppencil)-0.05)*step(0.,0.07-length(ppencil));
- colBasePencil = vec3(1.0)*basePencil;
- colBasePencil = mix(colBasePencil,rgbcol(102.,204.,255.),bandcircle);
- colBasePencil = mix(colBasePencil,0.85*colBasePencil,step(0.02,-ppencil.x)*basePencil);
- //Corner pencil
- vec3 colCornerPencil;
- float cornerPencil = step(0.,triangle(vec2(15.,12.)*(rot180*ppencil+vec2(0.,-0.1)),1.,2.));
- colCornerPencil = rgbcol(244.,240.,194.)*cornerPencil;
- colCornerPencil = mix(colCornerPencil,rgbcol(102.,204.,255.),step(0.125,-ppencil.y)*cornerPencil);
- colCornerPencil = mix(colCornerPencil,0.85*colCornerPencil,step(0.0,-ppencil.x-0.6*ppencil.y-0.08)*cornerPencil);
- //Layer combination
- vec3 col = rgbcol(45.,53.,89.);
- col = mix(rgbcol(102.,204.,255.),col,lineCurve);
- col = mix(col,colBasePencil,basePencil);
- col = mix(col,colCornerPencil,cornerPencil);
- gl_FragColor = vec4(col,1.0);
- }
Advertisement
Add Comment
Please, Sign In to add comment