import processing.core.*; import java.applet.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.text.*; import java.util.*; import java.util.zip.*; import java.util.regex.*; public class Explode extends PApplet { /** * Explode * by Daniel Shiffman. * * Mouse horizontal location controls breaking apart of image and * Maps pixels from a 2D image into 3D space. Pixel brightness controls * translation along z axis. */ PImage img; // The source image int cellsize = 2; // Dimensions of each cell in the grid int columns, rows; // Number of columns and rows in our system public void setup() { size(640, 360, P3D); img = loadImage("eames.jpg"); // Load the image columns = img.width / cellsize; // Calculate # of columns rows = img.height / cellsize; // Calculate # of rows } public void draw() { background(0); // Begin loop for columns for ( int i = 0; i < columns; i++) { // Begin loop for rows for ( int j = 0; j < rows; j++) { int x = i*cellsize + cellsize/2; // x position int y = j*cellsize + cellsize/2; // y position int loc = x + y*img.width; // Pixel array location int c = img.pixels[loc]; // Grab the color // Calculate a z position as a function of mouseX and pixel brightness float z = (mouseX / PApplet.parseFloat(width)) * brightness(img.pixels[loc]) - 20.0f; // Translate to the location, set fill and stroke, and draw the rect pushMatrix(); translate(x + 200, y + 100, z); fill(c, 204); noStroke(); rectMode(CENTER); rect(0, 0, cellsize, cellsize); popMatrix(); } } } static public void main(String args[]) { PApplet.main(new String[] { "Explode" }); } }