|
|
@@ -0,0 +1,103 @@ |
|
|
int[][] result; |
|
|
float t; |
|
|
|
|
|
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; |
|
|
draw_(); |
|
|
} else { |
|
|
for (int i=0; i<width*height; i++) |
|
|
for (int a=0; a<3; a++) |
|
|
result[i][a] = 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 = 4; |
|
|
int numFrames = 100; |
|
|
float shutterAngle = .85; |
|
|
|
|
|
boolean recording = false; |
|
|
|
|
|
void setup_() { |
|
|
size(800, 600, P2D); |
|
|
smooth(8); |
|
|
stroke(250); |
|
|
strokeWeight(5); |
|
|
} |
|
|
|
|
|
float x, y, tt; |
|
|
int N = 12; |
|
|
float l = 95, ll; |
|
|
float aa; |
|
|
|
|
|
void draw_() { |
|
|
background(#B74E39); |
|
|
pushMatrix(); |
|
|
translate(width/2, height/2); |
|
|
scale(1.25); |
|
|
for (int a=-2; a<N; a++) { |
|
|
aa = a+2*t; |
|
|
ll = .28*aa*l; |
|
|
tt = ease(constrain(.3*aa-.7, 0, 1)); |
|
|
if (aa>=0) { |
|
|
for (int i=0; i<6; i++) { |
|
|
strokeWeight(7); |
|
|
stroke(248); |
|
|
if(aa<=.1) |
|
|
strokeWeight(map(aa,0,.1,0,7)); |
|
|
if(aa>=5) |
|
|
strokeWeight(map(aa,5,6,7,0)); |
|
|
pushMatrix(); |
|
|
rotate(TWO_PI*(i+.5*a)/6); |
|
|
line(-ll/2, ll*mn, lerp(-ll/2, 0, 1-tt), ll*mn); |
|
|
line(ll/2, ll*mn, lerp(ll/2, 0, 1-tt), ll*mn); |
|
|
popMatrix(); |
|
|
} |
|
|
} |
|
|
} |
|
|
popMatrix(); |
|
|
} |