// by david whyte aka bees and bombs. im sorry for this int[][] result; float t, c; float ease(float p) { return 3*p*p - 2*p*p*p; } float ease(float p, float g) { if (p < 0.5) return 0.5 * pow(2*p, g); else return 1 - 0.5 * pow(2*(1 - p), g); } float mn = .5*sqrt(3); void setup() { setup_(); result = new int[width*height][3]; } void draw() { if (!recording) { t = mouseX*1.0/width; c = mouseY*1.0/height; if (mousePressed) println(c); draw_(); } else { for (int i=0; i<width*height; i++) for (int a=0; a<3; a++) result[i][a] = 0; c = 0; for (int sa=0; sa<samplesPerFrame; sa++) { t = map(frameCount-1 + sa*shutterAngle/samplesPerFrame, 0, numFrames, 0, 1); draw_(); loadPixels(); for (int i=0; i<pixels.length; i++) { result[i][0] += pixels[i] >> 16 & 0xff; result[i][1] += pixels[i] >> 8 & 0xff; result[i][2] += pixels[i] & 0xff; } } loadPixels(); for (int i=0; i<pixels.length; i++) pixels[i] = 0xff << 24 | int(result[i][0]*1.0/samplesPerFrame) << 16 | int(result[i][1]*1.0/samplesPerFrame) << 8 | int(result[i][2]*1.0/samplesPerFrame); updatePixels(); saveFrame("f###.gif"); if (frameCount==numFrames) exit(); } } ////////////////////////////////////////////////////////////////////////////// int samplesPerFrame = 8; int numFrames = 100; float shutterAngle = .75; boolean recording = false; void setup_() { size(500, 500, P3D); smooth(8); noStroke(); } float x, y, tt; int N = 320; color[] cs = { #ee3322, #22aa44, #0033dd, #eecc22 }; float l = 10; void thing() { for (int i=0; i<4; i++) { pushMatrix(); rotateY(HALF_PI*i); fill(cs[i]); beginShape(); vertex(0, -l, 0); vertex(l, 0, 0); vertex(0, 0, l); endShape(); popMatrix(); } for (int i=0; i<4; i++) { pushMatrix(); scale(1, -1, 1); rotateY(HALF_PI*i + PI); fill(cs[i]); beginShape(); vertex(0, -l, 0); vertex(l, 0, 0); vertex(0, 0, l); endShape(); popMatrix(); } } void draw_() { background(22); pushMatrix(); translate(width/2, height/2, -40); for (int i=0; i<N; i++) { randomSeed(12345*i + 23456); x = 60 + 140*sqrt(random(1)); x += (20+x/10)*sin(TWO_PI*t - 0.019*x); pushMatrix(); rotateZ(random(TWO_PI)); rotateY(random(TWO_PI)); rotateX(random(TWO_PI)); rotateZ(random(TWO_PI)); rotateY(random(TWO_PI)); rotateX(random(TWO_PI)); translate(x,0,0); rotateZ(random(TWO_PI)); rotateY(TWO_PI*t + random(TWO_PI)); rotateX(random(TWO_PI)); rotateZ(random(TWO_PI)); rotateY(TWO_PI*t + random(TWO_PI)); rotateX(random(TWO_PI)); thing(); popMatrix(); } popMatrix(); }