fractalkitty looking for math? fractalkitty.com

Genuary 2023

genuary13 - hyperspace puddle

#trig#3d#shader#animation#spiral#genuary

cnv2myShaderdrawScreenfragvert


let cnv2;
let myShader;

function setup() {
  createCanvas(600, 600, WEBGL);
  cnv2 = createGraphics(width*2, height*2);
  myShader = createShader(vert, frag);
  cnv2.background(0);
  cnv2.stroke(255);
  cnv2.strokeWeight(0.05);
 shader(myShader);
}


let a = 9
function draw() {
  let t = frameCount/500;
  myShader.setUniform("u_time",t)
  myShader.setUniform("u_resolution",[width,height])
  cnv2.translate(width,height)
  cnv2.background(0,0,a)
  
  for(let i=0;i<1000;i+=2){
    cnv2.fill(50,240-i/4,250-i/4)
    cnv2.push()
    cnv2.rotate(137.5*i+t+tan(i+t*0.00001))//golden angle
    cnv2.ellipse(0,i/2+i*sin(t)/2+i*sin(i*t/5+i)/30,4+10*abs(sin(t)),2+10*abs(sin(t-i)))
    cnv2.pop()
  } 
  drawScreen();
  cnv2.translate(-width,-height)
}




function drawScreen() {
  myShader.setUniform('texture', cnv2);
  rect(-width, -height, width, height);
}


var frag = `
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 vTexCoord;
uniform float u_time;
uniform sampler2D texture;

void main() {
  vec2 uv = vTexCoord;
  uv.y = 1.0 - uv.y;//flip y  
  vec2 offset = vec2(0.01*sin(u_time),0.01*cos(u_time));
  
  vec3 col;
  col.r = texture2D(texture, uv+offset*sin(u_time)*sin(u_time) ).r;
  col.g = texture2D(texture, uv-offset*sin(u_time)*sin(u_time)).g;
  col.b = texture2D(texture, uv).b;
  gl_FragColor = vec4(col.r,col.g,col.b, 1);
  
  
}
`

var vert = `
attribute vec3 aPosition;
attribute vec2 aTexCoord;

varying vec2 vTexCoord;

void main() {
  // copy the texcoords
  vTexCoord = aTexCoord;

  vec4 positionVec4 = vec4(aPosition, 1.0);
  positionVec4.xy = positionVec4.xy * 2.0 - 1.0;//remap center

  gl_Position = positionVec4;
}
`