# Max Headroom

/Processing script based off the TV show Max Headroom.

float rotx = PI/4; float roty = PI/4; float boxSize = 800; float lineNum = 30; void setup() { size(1020, 720, P3D); textureMode(NORMAL); shapeMode (CENTER); } void draw() { background(0); translate(width/2.0, height/2.0, boxSize/2); rotateX(rotx); rotateY(roty); stroke(255); noFill(); float z = boxSize/2; pushMatrix(); int side = 0; for (float rotY = HALF_PI; rotY <= TWO_PI; rotY+= HALF_PI) { switch (side) { case(0): stroke(255,0,0); break; case(1): stroke(255,255,0); break; case(2): stroke(255,255,0); break; case(3): stroke(255,0,0); break; } side++; for (int i = 0; i <= lineNum; i++) { if (rotY == HALF_PI || rotY == TWO_PI) { drawLineFromX(-boxSize/2, boxSize/2, -boxSize/2 + i * boxSize/lineNum, z, 20); } else{ drawLineFromY(-boxSize/2, boxSize/2, -boxSize/2 + i * boxSize/lineNum, z, 20); } } rotateY(rotY); } popMatrix(); pushMatrix(); rotateX(HALF_PI); stroke(0,0,255); for (int i = 0; i <= lineNum; i++) { drawLineFromY(-boxSize/2, boxSize/2, -boxSize/2 + i * boxSize/lineNum, z, 20); } popMatrix(); pushMatrix(); rotateX(-HALF_PI); stroke(0,255,0); for (int i = 0; i <= lineNum; i++) { drawLineFromY(-boxSize/2, boxSize/2, -boxSize/2 + i * boxSize/lineNum, z, 20); } popMatrix(); lineNum = 20 + 10 * sin(frameCount / 100.0); boxSize = 700 + 100 * sin(frameCount / 100.0 + PI); if(!mousePressed){ roty+=0.01; rotx+=0.02; } } float lineZOffset(int i, float z) { float size = 25 + 25 *sin(frameCount / 50.0 + PI /3); return z - size+ size * noise(frameCount / 100.0 + (float)i * 10000); } void drawLineFromX(float xStart, float xEnd, float y, float z, float points) { beginShape(); float next = abs(xEnd - xStart) / points; curveVertex(xStart - next, y, z); curveVertex(xStart, y, z); int i = 1; for (float x = xStart + next; x < xEnd; x+= next) { curveVertex(x, y, lineZOffset(2 + i, z)); i++; } curveVertex(xEnd, y, z); curveVertex(xEnd - next, y, z); endShape(); } void drawLineFromY(float yStart, float yEnd, float x, float z, float points) { beginShape(); float next = abs(yEnd - yStart) / points; curveVertex(x, yStart - next,z); curveVertex(x, yStart, z); int i = 1; for (float y = yStart + next; y < yEnd; y+= next) { curveVertex(x, y, lineZOffset(2 + i, z)); i++; } curveVertex(x, yEnd, z); curveVertex(x, yEnd + next, z); endShape(); }