Hi everyone
I don't understand a part within my code. I want to make an if statement so that if the hand is in a different position of the screen, the color of the circle, which follows the hand, will change. Like this: http://simple-openni.googlecode.com/svn/site/screenshots/NiteSlider2d.jpg
But I really don't know which function I need to call upon. This is my code now:
import SimpleOpenNI.*;
//import processing.opengl.*;
SimpleOpenNI kinect; // het woord "kinect" refereert in het script naar SimpleopenNI
color[] userClr = new color[] { // kleur per ''tracked'' persoon
color(0, 255, 0),
color(255, 0, 0),
color(0, 0, 255),
color(255, 255, 0),
color(255, 0, 255),
color(0, 255, 255)
};
PVector com = new PVector();
PVector com2d = new PVector();
void setup()
{
size(1920, 1080, OPENGL); // kinect heeft een max output van 640x480, maar wordt nu geforceerd om 2x te vergroten met de scale in: void draw()
kinect = new SimpleOpenNI(this);
colorMode(HSB);
if (kinect.isInit() == false)
{
println("Can't init SimpleOpenNI, maybe the camera is not connected!");
exit();
return;
}
kinect.enableDepth(); // genereer een Depthmap
kinect.enableUser(); // genereer een skelet met alle joints
}
void draw()
{
scale(3,2.25); // om alsnog de grootte aan te passen wordt het beeld 2x vergroot
kinect.update(); // update de kinect camera per frame
image(kinect.userImage(), 0, 0); // laat beeld zien
strokeWeight(7); // lijndikte skelet
// -----------------------------------------------------------------
// trigger om het skelet te maken als een persoon in beeld is
int[] userList = kinect.getUsers();
for (int i=0; i<userList.length; i++)
{
if (kinect.isTrackingSkeleton(userList[0]))
{
stroke(userClr[ (userList[0] - 1) % userClr.length ] );
drawSkeleton(userList[0]);
}
}
showFramerate(); // laat de framerate zien
// -----------------------------------------------------------------
// hier link je objecten aan het skelet
int[] users=kinect.getUsers();
for (int i=0; i < users.length; i++) {
int userId=users[0];
PVector realData=new PVector();
PVector projData=new PVector();
stroke(255);
strokeWeight(2);
fill(255, 255, 255);
// // link object aan hoofd
// kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_HEAD, realData);
// kinect.convertRealWorldToProjective(realData, projData);
// ellipse(projData.x, projData.y, 30, 30);
// link object aan rechter hand
kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_RIGHT_HAND, realData);
kinect.convertRealWorldToProjective(realData, projData);
println("realData rechts", realData);
//SO THIS PART IS WRONG AND I DON'T KNOW HOW TO MAKE THIS IF STATEMENT
if(realData() == projData.x(width) >100 && projData.x(width) <200){
ellipse(projData.x, projData.y, 30, 30);
fill(10,200,100);
}
ellipse(projData.x, projData.y, 30, 30);
fill(150,10,60);
// link object aan linker hand
kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_LEFT_HAND, realData);
//convert de data van het skeleton left hand naar realData en projData
kinect.convertRealWorldToProjective(realData, projData);
//realData spuugt drie getallen uit,-183.6774, -145.80629, 546.2606 de x, y, en z waarden
println("realData links:", realData);
ellipse(projData.x, projData.y, 30, 30);
fill(10,150,60);
}
//fill(0); // fake widescreen
//rect(0, 0, 640, 80);
//rect(0, 400, 1280, 80);
}
// -----------------------------------------------------------------
// met deze "drawLimb" objects wordt het skelet opgebouwd
void drawSkeleton(int userId)
{
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_NECK);
//
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_LEFT_SHOULDER);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_LEFT_ELBOW);
kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_ELBOW, SimpleOpenNI.SKEL_LEFT_HAND);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW);
kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE);
// kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT);
}
// -----------------------------------------------------------------
// SimpleOpenNI events
void onNewUser(SimpleOpenNI curkinect, int userId)
{
println("onNewUser - userId: " + userId);
println("\tstart tracking skeleton");
curkinect.startTrackingSkeleton(userId);
}
void onLostUser(SimpleOpenNI curkinect, int userId)
{
println("onLostUser - userId: " + userId);
}
void onVisibleUser(SimpleOpenNI curkinect, int userId)
{
println("onVisibleUser - userId: " + userId);
}
// -----------------------------------------------------------------
// simpele void waarmee de framerate wordt getoond om de performance te meten
void showFramerate()
{
fill(255);
textSize(20);
text("fps" + frameRate, 10, 20);
}