Processing 2007/02/27 16:06

카메라 장난질

// 카메라 인풋을 위해 추가하는 부분
import JMyron.*;
// 카메라 클래스의 객체 생성..
//이건 일러스트 출력할때도 비슷한 것 경험했을듯..
JMyron m;
float ballX[] = new float[6000];
float ballY[] = new float[6000];
float speedX[] = new float[6000];
float speedY[] = new float[6000];
float GRAVITY = 0.05;
void setup(){
  int w = 320;
  int h = 240;
  size(w,h);
// 카메라 인풋 객체를 제대로 생성한다.
  m = new JMyron();
// 카메라 받기 시작하는데 대신 320,240으로 해준다.
  m.start(320,240);
// 그냥 두시길..
  m.findGlobs(1);
  for (int i=0; i<6000; i++) {
    ballX[i] = random(60)+130;
    ballY[i] = -random(height);
    speedX[i] = random(0.4)-0.2;
    speedY[i] = random(3);
  }
 
}
void draw(){
  background(255);
  // 이건 드로우 함수 안에 반드시 들어간다.
  // 일러스트 출력에서도 ai.run() 같은게 있듯이
  // 카메라도 매번 업데이트 해줘야 매 프레임 영상을 받아올 수 있다.
  m.update();
  // 카메라에서 받은 이미지를 배열 형태로 저장한다.
  // 그리고 img라는 배열에 넣어버린다.
  int[] img = m.image();
  // 그림그리는 판때기에 직접 접근하려는 수작..
  loadPixels();
  // 여긴 컬러로 받은 영상을 회색으로 바꾸는 부분.
  for(int i=0;i<width*height;i++){
    if (brightness(img[i])<70) {
      pixels[i] = 0xffd0d0d0;
    }
  }
  // 그림그리는 판에 엑세스하는 것 중단하고, 그림판을 수정해준다.
  updatePixels();

  for (int i=0; i<5950; i++) {
    int index = (int)ballX[i] + ((int)ballY[i])*width;
    if (index>=0 && index<width*height) {
      if (brightness(img[index])<70) {
        speedY[i] = -random(2);
        speedX[i] = random(4)-2;
      }
    }
    speedY[i] = speedY[i] + GRAVITY;
    ballY[i] = ballY[i] + speedY[i];
    ballX[i] = ballX[i] + speedX[i];
    point(ballX[i],ballY[i]);
    if (ballY[i]>height || ballX[i]>width || ballX[i]<0) {
      ballX[i] = random(60)+130;
      ballY[i] = -random(height);
      speedX[i] = random(0.4)-0.2;
      speedY[i] = 0;
    }
  }
}

// 양민하