2016年3月3日 星期四

Week_許志遙_Leap Motion範例操作

1. 接續上周安裝程序,去官網下載驅動(※以後就不再提)

2. Processing滑鼠畫線
    line(x1,y1,x2,y2);       //畫線
void setup(){
  size(800,600);
  background(255);
}

void draw(){
  //background(255);
  line(mouseX,mouseY,pmouseX,pmouseY);
}

3. Processing滑鼠畫出有顏色的線
    stroke(R,G,B);        //顏色
void setup(){
  size(800,600);
  background(255);
}

void draw(){
  //background(255);
  stroke(48,191,74);
  line(mouseX,mouseY,pmouseX,pmouseY);
}

4. 如果用原來的方法在void draw(){}裡加入background(255);
    會發現滑鼠後方拖曳的線不是那麼長
    所以我們用另一種陣列的方法寫
PVector[] mousePV=new PVector[10];        //陣列寫法

void setup(){
  size(800,600,P3D);
  background(255);
  for(int i=0;i<10;i++) mousePV[i]=new PVector(0,0,0);        //初始化
}

void draw(){
  background(255);
  stroke(48,191,74);
  for(int i=9;i>0;i--) mousePV[i]=mousePV[i-1];        //後座標帶入前
  mousePV[0] = new PVector((int)mouseX,(int)mouseY,0);
  for(int i=1;i<10;i++)         //畫線
    line(mousePV[i].x,mousePV[i].y,mousePV[i].z,mousePV[i-1].x,mousePV[i-1].y,mousePV[i-1].z);
}

5. 代入leapMotion的裝置
    匯入leapmotion的Library        (※Sketch->Import Library...-> Add Library...->輸入Leap)
    接著以找到手->找到指->輸出位置,為目標就行
import de.voidplus.leapmotion.*;        //匯入leapMotion

PVector[] movePV=new PVector[10];  
LeapMotion leap;
void setup(){
  size(800,600,P3D);
  background(255);
  for(int i=0;i<10;i++) movePV[i]=new PVector(0,0,0);
  leap=new LeapMotion(this);
}

void draw(){
  background(255);
  stroke(48,191,74);
  for(int i=9;i>0;i--){ movePV[i]=movePV[i-1];}
  for(Hand hand : leap.getHands()){        //手掌迴圈
    for(Finger finger : hand.getFingers()){        //手指迴圈
      switch(finger.getType()){        //手指Type
        case 1:
          PVector indexPV = finger.getPosition();        //食指位置
          movePV[0]=indexPV;        //代入食指位置
          break;
      }
    }
  }
  for(int i=1;i<10;i++) 
     line(movePV[i].x,movePV[i].y,movePV[i].z,movePV[i-1].x,movePV[i-1].y,movePV[i-1].z);
}

6. 上面的範例只有找到食指,接著要教如何輸出(一隻手的)所有的手指
import de.voidplus.leapmotion.*;

PVector[][] movePV=new PVector[5][50];        //二維陣列,因為有5隻手指,加上增加殘影
LeapMotion leap;
void setup(){
  size(800,600,P3D);
  background(255);
  for(int f=0;f<5;f++)        //5隻手指所以要多一層迴圈
    for(int i=0;i<50;i++) movePV[f][i]=new PVector(0,0,0);
  leap=new LeapMotion(this);
  colorMode(HSB,100);        //顏色狀態改成HSB
}

void draw(){
  background(0);
  for(int f=0;f<5;f++)        //(同上)
    for(int i=49;i>0;i--) movePV[f][i]=movePV[f][i-1];
  for(Hand hand : leap.getHands()){
    for(Finger finger : hand.getFingers()){
      //switch(finger.getType()){        //因為要輸出5隻手指,所以不用switch, case輔助
        //case 1:
          int f=finger.getType();
          PVector fingerPV = finger.getPosition();
          movePV[f][0]=fingerPV;
          //break;
      //}
    }
  }
  for(int f=0;f<5;f++){
    stroke(f*20, 100, 100);        //給予line顏色
    for(int i=1;i<50;i++)
      line(movePV[f][i].x,movePV[f][i].y,movePV[f][i].z,
             movePV[f][i-1].x,movePV[f][i-1].y,movePV[f][i-1].z);
  }
}



沒有留言:

張貼留言