2016年3月17日 星期四

02160225_周煒皓_week04


偵測食指

import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
    size(600,400);
    leap = new LeapMotion(this);
}
void draw()
{
  background(255);
  for(Hand hand:leap.getHands()){
    Finger finger_index = hand.getIndexFinger();
    finger_index.draw();
  }
}



長方體旋轉

import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
  size(600,400,P3D);
  leap = new LeapMotion(this);
}
void draw()
{
  background(255);
  for(Hand hand : leap.getHands()){
    Finger finger_index = hand.getIndexFinger();
    finger_index.draw();
    PVector pos = finger_index.getPosition();
    PVector dir = finger_index.getDirection();
    println(pos);
    println(dir);
  }
  lights();
  fill(255,0,0);
  translate(width/2, height/2);
  rotateY(radians(frameCount));
  box(300,100,100);
}




利用球體來表達食指的指向




import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
    size(640,400,P3D);
    leap = new LeapMotion(this);
}
 PVector pos=null,dir=null;
void draw(){
  background(255);
  for(Hand hand:leap.getHands()){
  Finger finger_index = hand.getIndexFinger();
  finger_index.draw();
   pos = finger_index.getPosition();
   dir = finger_index.getDirection();
  }
  lights();
  fill(#958D2C);
  pushMatrix();
  translate(width/2,height/2);
  for(int i=0;i<10;i++){
  if(dir!=null) translate(dir.x*10*i,dir.y*10*i,dir.z*10*i);
  sphere(40);
  }
  popMatrix();
}



將藍色球體當成子彈,依照紅色球體的手指指向發射






import de.voidplus.leapmotion.*;
LeapMotion leap;
PVector pos = null, dir=null;
PVector []bullet = new PVector[10];
PVector []bullet_dir = new PVector[10];
int bulletNow = 0;
void setup(){
  size(640, 480,P3D);
  leap = new LeapMotion(this);
  for (int i=0;i<10;i++){
    bullet[i] = new PVector(0,0,0);
    bullet_dir[i] = new PVector(0,0,0);
  }
}
void draw() {
  background(255);
  for (Hand hand : leap.getHands ()) {
    Finger finger_index = hand.getIndexFinger();
    finger_index.draw();
    pos = finger_index.getPosition();
    dir = finger_index.getDirection();
    println(pos);
    println(dir);
  }
  lights();
  fill(#F70202);
  translate(width/2, height/2);
  pushMatrix();
  for (int i=0;i<10;i++){
    if (dir!=null){
      translate(dir.x*10*i,dir.y*10*i,dir.z*10*i);
      sphere(40);
    }
  }
  popMatrix();
  pushMatrix();
    fill(#020CF7);
    for (int i=0;i<10;i++)
    {
      pushMatrix();
        translate(bullet[i].x,bullet[i].y,bullet[i].z);
        sphere(50);
        bullet[i].x+=bullet_dir[i].x;
        bullet[i].y+=bullet_dir[i].y;
        bullet[i].z+=bullet_dir[i].z;
      popMatrix();
    }
  popMatrix();
}
void keyPressed(){
  bullet[bulletNow].x=0;
  bullet[bulletNow].y=0;
  bullet[bulletNow].z=0;
  bullet_dir[bulletNow].x=dir.x*5;
  bullet_dir[bulletNow].y=dir.y*5;
  bullet_dir[bulletNow].z=dir.z*5;
  bulletNow++;
  if(bulletNow>=10)
    bulletNow=0;
}




將兩物體作碰撞偵測,當碰到時會閃紅色


import de.voidplus.leapmotion.*;
LeapMotion leap;
PVector pos=null;
PVector dir= null;
PVector ball=null;

void setup()
{
  size(800,600,P3D);
  leap = new LeapMotion(this);
  pos = new PVector(300,200,0);
  ball = new PVector(0,0,0);
}

void draw()
{
  background(255);
  ball.x+=2;
  ball.y+=2;
for(Hand hand : leap.getHands())
{
  pos=hand.getPosition();
}
 fill(255,255,0);
 pushMatrix();
 translate(pos.x,pos.y,pos.z);
 box(30,30,30);
 popMatrix();
 pushMatrix();
 translate(ball.x,ball.y);
 sphere(30);
 if(dist(ball.x,ball.y,pos.x,pos.y)<30)background(255,0,0);
 popMatrix();
}

沒有留言:

張貼留言