LET'S SHARE COLOR!
期末Demo影片
2015年6月29日 星期一
2015年6月15日 星期一
期末作業-進度
Let's share color!
構思
在Youtube找到影片:
2011大葉大學14屆視傳系形象長片-視界交互【點點人3主打】
https://www.youtube.com/watch?v=_8E6w0irTQE
https://www.youtube.com/watch?v=_8E6w0irTQE
看到這個影片產生了將它做成互動軟體的想法,偵測到人利用圓點印出,能多人一起使用,每個人都能有自己的顏色,並且能分享自己的顏色給對方
設計過程:
開始步驟:
- 如何印出點點人?
- 人如何有顏色?
- 如何互相變顏色?
步驟1.印出點點人
步驟2.人如何有顏色
先用矩陣宣告顏色
color[] userClr = new color[]{ color(255,0,0),
color(0,255,0),
color(0,0,255),
color(255,255,0),
color(255,0,255),
color(0,255,255)
};
將人物的點點填入顏色
blob_array[index] = 5; //矩陣裡六個顏色
//fill(GRAY); 這邊是原本還沒加入彩色時先令他為灰階
fill(userClr[ (userMap[index] - 1) % userClr.length ], 50); //填入顏色矩陣的色彩
預設第一人為紅色
偵測到第二個人
預設第二人為綠色
第三人為藍色,第四人為黃色,第五人為紫紅色,第六人為淡藍色。
步驟3.如何互相改變顏色?
Let's share color!
當紅色的人碰到綠色的人時,碰到的部分會變成紅色,慢慢地整個人會變成紅色。
當紅色的人不再接觸後,原本的綠色人會變成紅色,而原本紅色的人會變成下一個顏色。
這就是分享顏色!!!!!!!!
2015年5月25日 星期一
WEEK14
賽車遊戲
processing來轉動方塊
void setup(){
size(800, 600, P3D);
}
void draw(){
background(255);
pushMatrix();
translate(width/2, height/2);
rotateZ(angle/180.0);
rect(0, 0, 100, 100);
popMatrix();
}
void mouseMoved(){
int x= mouseX-pmouseX;
int y= mouseY-pmouseY;
if(x>0) angle+=1;
if(x<0) angle-=1;
}
void keyPressed(){
if(key=='l') angle++;
if(key=='r') angle--;
}
PImage imgCar;
float angle =0,dx=0,dy=0,vel=1;void setup(){
size(800,600,P3D);
imgCar = loadImage("player_car.png");
}
void draw(){
background(255);
for(int i =-1;i<=8;i++){
for(int j=-1;j<=6;j++){
rect(i*100+dx%100,j*100+dy%100,100,100);
}
}
pushMatrix();
translate(width/2, height/2);
rotateZ(angle);
image(imgCar, -100,-100,200,200);
popMatrix();
dx=-vel*cos(angle);
dy=-vel*sin(angle);
}
void mouseMoved(){
int x=mouseX-pmouseX;
int y=mouseY-pmouseY;
if(x>0) angle+=1/40.0;
if(x<0) angle-=1/40.0;
}
void keyPressed(){
if(key=='l')angle++;
if(key=='r')angle--;
if(keyCode==UP)vel*=1.1;
if(keyCode==DOWN)vel*=0.9;
}
2015年5月18日 星期一
WEEK13
下載
切水果
畫一直在拋的球
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
float X, Y, VX, VY;
Fruit(float x, float y, float vx, float vy){
X=x; Y=y; VX=vx; VY=vy;
}
void draw(){
ellipse(x, y, 50, 50);
}
void update(){
X+=VX;Y+=VY; VY+=1.98;
if(X<-100) || X>740 || Y<-100 || Y>580{
X=random(640); Y=random(240); VX=random(30)-15; VY=-random(30);
}
}
}
Fruit fruit[]= new Fruit[20];
void setup(){
size(640, 480);
openni= new SimpleOpenNI(this);
openni.enableDepth();
openni.enableUser();
for(int i=0; i<20; i++)
fruit[i]= new Fruit(random(640), random(240), random(30)-15, -random(30));
}
void draw(){
openni.update();
image(openni.userImage(), 0, 0);
for(int i=0; i<20; i++){
fruit[i].draw();
fruit[i].update();
}
}
滑鼠移動碰球會變紅色
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
float X, Y, VX, VY;
boolean dead= false;
Fruit(float x, float y, float vx, float vy){
X=x; Y=y; VX=vx; VY=vy; dead= false;
}
void draw(){
if(dead) fill(255, 0 , 0);
else fill(255);
ellipse(X, Y, 50, 50);
}
void update(){
X+=VX;Y+=VY; VY+=1.98;
if(X<-100 || X>740 || Y<-100 || Y>580){
X=random(640); Y=random(240); VX=random(30)-15; VY=-random(30); dead= false;
}
if(dist(X, Y, mouseX, mouseY)<50) dead= true;
}
}
void mouseMoved(){
strokeWeight(30); stroke(255, 0, 0); line(mouseX, mouseY, pmouseX, pmouseY);
strokeWeight(1); stroke(0);
}
Fruit fruit[]= new Fruit[20];
void setup(){
size(640, 480);
openni= new SimpleOpenNI(this);
openni.enableDepth();
openni.enableUser();
for(int i=0; i<20; i++)
fruit[i]= new Fruit(random(640), random(240), random(30)-15, -random(30));
}
void draw(){
openni.update();
image(openni.userImage(), 0, 0);
for(int i=0; i<20; i++){
fruit[i].draw();
fruit[i].update();
}
}
利用Kinect,人去碰球變紅色
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
float X, Y, VX, VY;
boolean dead= false;
Fruit(float x, float y, float vx, float vy){
X=x; Y=y; VX=vx; VY=vy; dead= false;
}
void draw(){
if(dead) fill(255, 0 , 0);
else fill(255);
ellipse(X, Y, 50, 50);
}
void update(){
X+=VX;Y+=VY; VY+=1.98;
if(X<-100 || X>740 || Y<-100 || Y>580){
X=random(640); Y=random(240); VX=random(30)-15; VY=-random(30); dead= false;
}
if(dist(X, Y, mouseX, mouseY)<50) dead= true;
if(X>0 && X<640 && Y>0 && Y<480 && openni.userImage().pixels[int(X)+int(Y)*640]==color(0, 0, 255)) dead=true;
}
}
void mouseMoved(){
strokeWeight(30); stroke(255, 0, 0); line(mouseX, mouseY, pmouseX, pmouseY);
strokeWeight(1); stroke(0);
}
Fruit fruit[]= new Fruit[20];
void setup(){
size(640, 480);
openni= new SimpleOpenNI(this);
openni.enableDepth();
openni.enableUser();
for(int i=0; i<20; i++)
fruit[i]= new Fruit(random(640), random(240), random(30)-15, -random(30));
}
void draw(){
openni.update();
image(openni.userImage(), 0, 0);
for(int i=0; i<20; i++){
fruit[i].draw();
fruit[i].update();
}
}
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
float X, Y, VX, VY;
boolean dead= false;
Fruit(float x, float y, float vx, float vy){
X=x; Y=y; VX=vx; VY=vy; dead= false;
}
void draw(){
if(dead) fill(255, 0 , 0);
else fill(255);
ellipse(X, Y, 50, 50);
}
void update(){
X+=VX;Y+=VY; VY+=1.98;
if(X<-100 || X>740 || Y<-100 || Y>580){
X=random(640); Y=random(240); VX=random(30)-15; VY=-random(30); dead= false;
}
if(dist(X, Y, mouseX, mouseY)<50) dead= true;
if(X>0 && X<640 && Y>0 && Y<480 && openni.userImage().pixels[int(X)+int(Y)*640]==color(0, 0, 255)) dead=true;
}
}
void mouseMoved(){
strokeWeight(30); stroke(255, 0, 0); line(mouseX, mouseY, pmouseX, pmouseY);
strokeWeight(1); stroke(0);
}
Fruit fruit[]= new Fruit[20];
void setup(){
size(640, 480);
openni= new SimpleOpenNI(this);
openni.enableDepth();
openni.enableUser();
for(int i=0; i<20; i++)
fruit[i]= new Fruit(random(640), random(240), random(30)-15, -random(30));
}
void draw(){
openni.update();
image(openni.userImage(), 0, 0);
for(int i=0; i<20; i++){
fruit[i].draw();
fruit[i].update();
}
}
完成切水果(劃開水果)
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
float X, Y, VX, VY, split=0, angle=0;
boolean dead= false;
Fruit(float x, float y, float vx, float vy){
X=x; Y=y; VX=vx; VY=vy; dead= false;
}
void draw(){
if(dead){
fill(255, 0, 0);
arc(X+split, Y, 50, 50, angle, angle+PI, CHORD);
arc(X-split, Y, 50, 50, angle+PI, angle+PI*2, CHORD);
}
else {
fill(255);
ellipse(X, Y, 50, 50);
}
}
void update(){
X+=VX; Y+=VY; VY+=0.68;
if(X<-100 || X>740 || Y<-100 || Y>580){
X=random(640); Y=random(240); VX=random(10)-15; VY=-random(10); dead= false; split=0;
}
if(dead==false && dist(X, Y, mouseX, mouseY)<50){
dead= true;
angle= atan2(mouseY-pmouseY, mouseX-pmouseX);
}
if(dead==false && X>0 && X<640 && Y>0 && Y<480 && openni.userImage().pixels[int(X)+int(Y)*640]==color(0, 0, 255)){
dead=true;
}
if(dead) split+=2;
}
}
void mouseMoved(){
strokeWeight(30); stroke(255, 0, 0); line(mouseX, mouseY, pmouseX, pmouseY);
strokeWeight(1); stroke(0);
}
Fruit fruit[]= new Fruit[20];
void setup(){
size(640, 480);
openni= new SimpleOpenNI(this);
openni.enableDepth();
openni.enableUser();
for(int i=0; i<20; i++)
fruit[i]= new Fruit(random(640), random(240), random(10)-15, -random(10));
}
void draw(){
openni.update();
image(openni.userImage(), 0, 0);
for(int i=0; i<20; i++){
fruit[i].draw();
fruit[i].update();
}
}
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
float X, Y, VX, VY, split=0, angle=0;
boolean dead= false;
Fruit(float x, float y, float vx, float vy){
X=x; Y=y; VX=vx; VY=vy; dead= false;
}
void draw(){
if(dead){
fill(255, 0, 0);
arc(X+split, Y, 50, 50, angle, angle+PI, CHORD);
arc(X-split, Y, 50, 50, angle+PI, angle+PI*2, CHORD);
}
else {
fill(255);
ellipse(X, Y, 50, 50);
}
}
void update(){
X+=VX; Y+=VY; VY+=0.68;
if(X<-100 || X>740 || Y<-100 || Y>580){
X=random(640); Y=random(240); VX=random(10)-15; VY=-random(10); dead= false; split=0;
}
if(dead==false && dist(X, Y, mouseX, mouseY)<50){
dead= true;
angle= atan2(mouseY-pmouseY, mouseX-pmouseX);
}
if(dead==false && X>0 && X<640 && Y>0 && Y<480 && openni.userImage().pixels[int(X)+int(Y)*640]==color(0, 0, 255)){
dead=true;
}
if(dead) split+=2;
}
}
void mouseMoved(){
strokeWeight(30); stroke(255, 0, 0); line(mouseX, mouseY, pmouseX, pmouseY);
strokeWeight(1); stroke(0);
}
Fruit fruit[]= new Fruit[20];
void setup(){
size(640, 480);
openni= new SimpleOpenNI(this);
openni.enableDepth();
openni.enableUser();
for(int i=0; i<20; i++)
fruit[i]= new Fruit(random(640), random(240), random(10)-15, -random(10));
}
void draw(){
openni.update();
image(openni.userImage(), 0, 0);
for(int i=0; i<20; i++){
fruit[i].draw();
fruit[i].update();
}
}
2015年5月11日 星期一
WEEK12
https://www.youtube.com/watch?v=06o7402ZScs
----------------------------------------------------------------------------------------------------------------------------------------------
0. 下載今天上課要用到的軟體
0.1. Kinect SDK 1.8
0.2. Processing 2.2.1 32bit
0.3. SimpleOpenNI
0.4. FAAST
0.5. 老師雲端硬碟的下載網址
https://drive.google.com/folderview?id=0ByYbu0zjxrp1flNibGlDMldkWlBqWWtGeGhlQVU4dzBORmNXblBJeWFjWXVWbVVFUTF0Nmc&usp=sharing
----------------------------------------------------------------------------------------------------------------------------------------------
}
----------------------------------------------------------------------------------------------------------------------------------------------
0. 下載今天上課要用到的軟體
0.1. Kinect SDK 1.8
0.2. Processing 2.2.1 32bit
0.3. SimpleOpenNI
0.4. FAAST
0.5. 老師雲端硬碟的下載網址
https://drive.google.com/folderview?id=0ByYbu0zjxrp1flNibGlDMldkWlBqWWtGeGhlQVU4dzBORmNXblBJeWFjWXVWbVVFUTF0Nmc&usp=sharing
----------------------------------------------------------------------------------------------------------------------------------------------
將 SimpleOpenNI 資料夾匯入 processing 的 library 裡
執行範例程式
範例user
----------------------------------------------------------------------------------------------------------------------------------------------
SimpleOpenNI openni;
void setup(){
size(640,480);
openni = new SimpleOpenNI(this);
openni.enableRGB();
openni.enableDepth();
openni.enableUser();
}
void draw(){
background(255);
openni.update();
image(openni.userImage(),0,0,640,480);
int[] userList = openni.getUsers();
for(int i=0;i<userList.length;i++)
{
if(openni.isTrackingSkeleton(userList[i])){
PVector pos = new PVector();
openni.getJointPositionSkeleton(userList[i], SimpleOpenNI.SKEL_HEAD, pos);
println(pos);
fill(255);
ellipse(320+pos.x/3, 240-pos.y/3, 50, 50);
}
}
}
void onNewUser(SimpleOpenNI curContext, int userId){
curContext.startTrackingSkeleton(userId);
}
----------------------------------------------------------------------------------------------------------------------------------------------
滑鼠擦玻璃:
PImage imgBG;
PGraphics imgMask;
void setup(){
size(900,506);
imgBG = loadImage("arafes.jpg");
imgBG.resize(900,506);
imgMask = createGraphics(900,506);
imgMask.beginDraw();
imgMask.background(0);
imgMask.endDraw();
}
void draw(){
imgBG.mask(imgMask);
image(imgBG, 0,0);
}
void mouseDragged(){
imgMask.beginDraw();
imgMask.fill(255);
imgMask.ellipse(mouseX, mouseY, 100, 100);
imgMask.endDraw();
}
手擦玻璃:
import SimpleOpenNI.*;
SimpleOpenNI openni;
PGraphics imgMask;
PImage imgBG;
void setup()
openni = new SimpleOpenNI(this);
{
size(900, 506);
openni.enableRGB();
imgBG=loadImage("arafes.jpg");
openni.enableDepth();
openni.enableUser();
imgMask.beginDraw();
imgBG.resize(900,506);
imgMask=createGraphics(900, 506);
/*for(int i=0;i<900*506;i++)
imgMask.background(0);
imgMask.endDraw();
{
//imgMask.loadPixels();
imgBG.mask(imgMask);
imgMask.pixels[i]=color(0,0,255,80);
}
imgMask.updatePixels();*/
}
int[] userList = openni.getUsers();
void draw()
{
image(imgBG,0,0);
println(frameCount);
image(openni.userImage(), 0, 0, 128,96);
openni.update();
if(openni.isTrackingSkeleton(userList[i])){
//image(imgMask,0,0);
imgMask.beginDraw();
imgMask.fill(255);
imgMask.noStroke();
imgMask.ellipse(320+pos.x/3, 240-pos.y/3, 200,200);
for(int i = 0;i<userList.length;i++)
{
PVector pos = new PVector();
openni.getJointPositionSkeleton(userList[i],SimpleOpenNI.SKEL_RIGHT_HAND, pos);
}
}
}
imgMask.endDraw();
void onNewUser(SimpleOpenNI curContext, int userId)
{
curContext.startTrackingSkeleton(userId);
訂閱:
文章 (Atom)






























