PGraphics pg; void setup() { size(400, 400); pg = createGraphics(400,400,P3D); pg.colorMode(RGB, 1); } void draw3quads(float r1, float r2, float g1, float g2, float bin) { float r = 0; float g = 0; float b = 0; // rgb r = r1; g = g1; b = bin; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); r = r2; g = g1; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); r = r2; g = g2; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); r = r1; g = g2; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); // brg r = bin; g = r1; b = g1; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); g = r2; b = g1; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); g = r2; b = g2; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); g = r1; b = g2; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); // gbr r = g1; g = bin; b = r1; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); r = g1; b = r2; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); r = g2; b = r2; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); r = g2; b = r1; pg.fill(255*r, 255*g, 255*b); pg.vertex(r*2-1, g*2-1, b*2-1); } float xmag = 0; float ymag = 0; boolean first = true; boolean blend = false; void draw() { pg.beginDraw(); pg.noStroke(); if (blend) { if (first) { pg.background(0); first = false; } pg.filter(BLUR, 3); } else { pg.background(0,0,0,8); } pg.pushMatrix(); pg.translate(width/2, height/2, -30); float newXmag = mouseX/float(width) * TWO_PI; float newYmag = mouseY/float(height) * TWO_PI; float diff = xmag-newXmag; if (abs(diff) > 0.01) { xmag -= diff/4.0; } diff = ymag-newYmag; if (abs(diff) > 0.01) { ymag -= diff/4.0; } pg.rotateX(-ymag); pg.rotateY(-xmag); pg.scale(90); pg.beginShape(QUADS); float t = 1./3.; float s = 2./3.; // z==1 draw3quads(0, t, 1, s, 1); draw3quads(t, s, 1, s, 1); draw3quads(s, 1, 1, s, 1); draw3quads(0, t, s, t, 1); // draw3quads(s, 1, s, t, 1); draw3quads(0, t, t, 0, 1); draw3quads(t, s, t, 0, 1); draw3quads(s, 1, t, 0, 1); // z = t // draw3quads(t, s, 0, t, s); // draw3quads(0, t, t, s, s); // draw3quads(s, 1, t, s, s); // draw3quads(t, s, s, 1, s); // // z = -t // draw3quads(t, s, 1, s, t); // draw3quads(0, t, s, t, t); // draw3quads(s, 1, s, t, t); // draw3quads(t, s, t, 0, t); // // z = -1 draw3quads(0, t, s, 1, 0); draw3quads(t, s, s, 1, 0); draw3quads(s, 1, s, 1, 0); draw3quads(0, t, t, s, 0); // draw3quads(s, 1, t, s, 0); draw3quads(0, t, 0, t, 0); draw3quads(t, s, 0, t, 0); draw3quads(s, 1, 0, t, 0); pg.endShape(); pg.popMatrix(); pg.endDraw(); image(pg, 0, 0); } void keyPressed() { if (key == ' ') { first = true; } else if (key == 'b') { blend = !blend; } }