首先,我們先寫出只畫食指的程式碼,
先讀取食指:Finger finger_index = hand.getIndexFinger();
然後畫出食指:finger_index.draw();

完整程式碼:
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();
}
}
第二步,我們要以3D的方式呈現,
我們在程式碼加上P3D,就會以3D的方式畫圖,
然後再畫出一個會自轉的3D矩形。

完整程式碼:
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);
}
接下來我們要畫出一個類似棒球棍的3D棍棒並且是用我們的食指來控制

完整程式碼:
import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
size(600,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(255,0,0);
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();
}
畫出3D的棍棒後,我們要讓它可以射出球,
但是目前我們只能射出十顆球。

完整程式碼:
import de.voidplus.leapmotion.*;
PVector pos=null, dir=null;
PVector []bullet=new PVector[10];
PVector []bullet_dir=new PVector[10];
int bulletNow=0;
LeapMotion leap;
void setup(){
size(600,400,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();
dir = finger_index.getDirection();
}
lights();
fill(255,0,0);
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(0,0,255);
for(int i=0;i<10;i++){
pushMatrix();
translate(bullet[i].x, bullet[i].y, bullet[i].z);
sphere(41);
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_dir[bulletNow].x = dir.x*5;
bullet_dir[bulletNow].y = dir.y*5;
bullet_dir[bulletNow].z = dir.z*5;
bulletNow++;
}
我們要讓棍棒射出無線顆球。

完整程式碼:
import de.voidplus.leapmotion.*;
PVector pos=null, dir=null;
PVector []bullet=new PVector[10];
PVector []bullet_dir=new PVector[10];
int bulletNow=0;
LeapMotion leap;
void setup(){
size(600,400,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();
dir = finger_index.getDirection();
}
lights();
fill(255,0,0);
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(0,0,255);
for(int i=0;i<10;i++){
pushMatrix();
translate(bullet[i].x, bullet[i].y, bullet[i].z);
sphere(41);
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_dir[bulletNow].x=0; bullet_dir[bulletNow].y=0; bullet_dir[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, dir, ball;
void setup(){
size(600,400,P3D);
leap = new LeapMotion(this);
pos = new PVector(300,200,0); ball=new PVector(0,0,0);
}
void draw(){
ball.x +=2; ball.y += 2;
for(Hand hand : leap.getHands() ){
pos = hand.getPosition();
}
background(255);
fill(255,0,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();
}
沒有留言:
張貼留言