This is a 24 hour clock that grows back into itself. I actually had a hard time coming up with a solid concept for this project, and it definitely impacted the work. I originally wanted to do a "clock" based on the days of the user's life, with multiple spheres representing each day--spheres would alter in size and color, with different layers representing amount of fulfillment in relationships, work, etc. I had the sphere code from the beginning, but it became hard to scrape data and/or create user input in processing, at which point I decided to scope down. I'm not totally satisfied with =the simplification of the representation of multiple days to just a single day with a sphere, since it falls to close to just a normal clock. However, I like the emphasis on the regrowth visual/symbolism in the piece. Definitely need to focus on scoping down and making sure I have the capabilities for my vision in the next project thank you for the real talk @golan!!
--Process --
playing around with adding spheres (layers) on key pressed (earlier idea).
import peasy.*; PeasyCam cam; int time = 6; int time2; void keyPressed() { if (keyCode == UP) { time2 = time++%24; println(time2); } if (keyCode == DOWN) { time2 = time--%24; } } PVector[][] globe; int total = 72; float[][] firsts = new float[total+1][3]; float[][] lasts = new float[total+1][3]; void setup() { size(640, 640, P3D); cam = new PeasyCam(this, 500); globe = new PVector[total+1][total+1]; } void draw() { //println(hour()); background(255); pushMatrix(); textSize(20); fill(100); text(str(time2)+":00", -30,300); popMatrix(); noFill(); stroke(240); lights(); float smallRad = map(time2*3, 0, 72,0,200); sphere(smallRad); float r = 200; for (int i = 0; i < total+1; i++) { float lat = map(i, 0, total, 0, PI); for (int j = 0; j < total+1; j++) { float lon = map(j, 0, total, 0, TWO_PI); float x = r * sin(lat) * cos(lon); float y = r * sin(lat) * sin(lon); float z = r * cos(lat); globe[i][j] = new PVector(x, y, z); } } for (int i = 0; i < total; i++) { beginShape(TRIANGLE_STRIP); int curHour= 72-(time2*72)/24; //println(curHour); for (int j = 0; j < curHour; j++) { PVector v1 = globe[i][j]; vertex(v1.x, v1.y, v1.z); PVector v2 = globe[i+1][j]; vertex(v2.x, v2.y, v2.z); if (j==0) { firsts[i][0] = v1.x; firsts[i][1] = v1.y; firsts[i][2] = v1.z; } if (j==curHour-1) { lasts[i][0] = v2.x; lasts[i][1] = v2.y; lasts[i][2] = v2.z; } } endShape(); } fill(100); beginShape(); vertex(0,0,0); for (int i=0; i < total; i++) { vertex(firsts[i][0], firsts[i][1], firsts[i][2]); } vertex(0,0,cos(72)*200); endShape(); fill(100); beginShape(); vertex(0,0,0); vertex(firsts[0][0], firsts[0][1], firsts[0][2]); for (int i=0; i < total; i++) { vertex(lasts[i][0], lasts[i][1], lasts[i][2]); } //vertex(firsts[0][0], firsts[0][1], firsts[0][2]); vertex(0,0,cos(2*PI)*r); endShape(); } |