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 netscape.javascript.*; import javax.comm.*; import javax.sound.midi.*; import javax.sound.midi.spi.*; import javax.sound.sampled.*; import javax.sound.sampled.spi.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.sax.*; import javax.xml.transform.stream.*; import org.xml.sax.*; import org.xml.sax.ext.*; import org.xml.sax.helpers.*; public class video_3d_4 extends BApplet {int inc;//, vidH = 480, vidW = 640;
BImage frame;
boolean refresh = false;
int black = 0;
float rotX, rotY, rotZ;
int cubed = 20, cubeSize = 7;
int[][][] pix = new int[cubed][cubed][cubed];
//pix = new Array[30];
//color white = color(255,255,255);
void setup() {	 
  println("new run--------------------");
  size(320, 240); 
  beginVideo(cubed, cubed, cubed); 
  //frame = loadImage("30x30.gif");
  background(0xffEF8616);
  //noStroke();
  for(int i = 0; i < cubed; i++){ //cols
    for(int j = 0; j < cubed; j++){
      for(int k = 0; k < cubed; k++){
        pix[i][j][k] = (0xffEF6716);
      }
    }
  } 
} 
 
public void videoEvent() { 
   refresh = true;
} 
void loop(){
  translate(width/2, height/2, 0);
  rotateY(rotY);
  rotateX(rotX);
  rotateZ(rotZ);
  rotX += .005f;
  rotY += .01f;
  rotZ += .02f;
  
  if(refresh == true){
  refresh = false;
  background(0xffEF8616);
  
   //shift everyone over
  for(int i = 0; i < cubed-1; i++){ //cols
    for(int j = 0; j < cubed; j++){
      for(int k = 0; k < cubed; k++){
        int temp = pix[cubed-2-i][j][k];
        pix[cubed-i-1][j][k] = temp;
      }
    }
  }
    
  //input video data into pix[0]  
  for(int j = 0; j < cubed; j++){ //cols
    for(int i = 0; i < cubed; i++){ //rows
      if (red(video.pixels[(i*cubed)+j]) + green(video.pixels[(i*cubed)+j]) + blue(video.pixels[(i*cubed)+j]) < 400){
         pix[0][i][j] = black;
      }else{
        pix[0][i][j] = video.pixels[(i*cubed)+j];
      }
    }
  }
    
  //draw boxes
  for(int i = 0; i < cubed; i++){ //cols
    for(int j = 0; j < cubed; j++){
      for(int k = 0; k < cubed; k++){
        if (pix[i][j][k] != black){
          fill(pix[i][j][k]);
          push();
          translate((i*cubeSize)-(cubed*cubeSize/2),(j*cubeSize)-(cubed*cubeSize/2), (k*cubeSize)-(cubed*cubeSize/2));
          box(cubeSize);
          pop();
        }
      }
    }
  } 
  }
  inc++;
  //saveFrame("video32d"+inc+".tga");
  //println(inc);
}

void keyPressed() 
{ 
println("tiff");
saveFrame("video3d"+random(100)+".tif");
}

}