import processing.video.*;
Capture camera;
float gridWidth = 12;
float maxZ = -100;
void setup(){
size(640, 480, OPENGL);
smooth();
camera = new Capture(this, width, height);
camera.start();
}
void draw(){
lights();
background(105);
camera.loadPixels();
int gridX = int(camera.width / gridWidth);
int gridY = int(camera.height / gridWidth);
float[][] brightness = new float[gridX][gridY];
for(int gx = 0; gx < gridX; gx++){
for(int gy = 0; gy < gridY; gy++){
int x = int(gx * gridWidth);
int y = int(gy * gridWidth);
color rgb = camera.pixels[y * camera.width + x];
brightness[gx][gy] = map(max(red(rgb), green(rgb), blue(rgb)), 0, 255, 0, 1);
}
}
translate(0, 0, -50);
stroke(128);
strokeWeight(1);
fill(0, 191, 255);
for(int gx = 0; gx < gridX - 1; gx++){
for(int gy = 0; gy < gridY - 1; gy++){
int x = gx * int(gridWidth);
int y = gy * int(gridWidth);
beginShape();
vertex(x, y, brightness[gx][gy] * maxZ);
vertex(x + gridWidth, y, brightness[gx + 1][gy] * maxZ);
vertex(x + gridWidth, y + gridWidth, brightness[gx + 1][gy + 1] * maxZ);
vertex(x, y + gridWidth, brightness[gx][gy + 1] * maxZ);
endShape(CLOSE);
}
}
}