2016年6月2日 星期四

Week15 金博鈞


import SimpleOpenNI.*;

SimpleOpenNI  openni;
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)
};
PVector com = new PVector();                                
PVector com2d = new PVector();
PVector rpos = new PVector(0, 0, 0);
PVector lpos = new PVector(0, 0, 0);
PVector hpos = new PVector(0, 0, 0);

void setup()
{
  size(640, 480);

  openni = new SimpleOpenNI(this);
  if (openni.isInit() == false)
  {
    println("Can't init SimpleOpenNI, maybe the camera is not connected!");
    exit();
    return;
  }
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
  stroke(0, 0, 255);
  strokeWeight(3);
  smooth();
}

void draw()
{
  openni.update();
  background(255);
  image(openni.userImage(), 0, 0);
  int[] userList = openni.getUsers();
  for (int userID : userList) {
    openni.getJointPositionSkeleton(userID, SimpleOpenNI.SKEL_RIGHT_HAND, rpos);
    openni.getJointPositionSkeleton(userID, SimpleOpenNI.SKEL_HEAD, hpos);
  }
  for (int i=0; i<userList.length; i++)
  {
    if (openni.isTrackingSkeleton(userList[i]))
    {
      stroke(userClr[ (userList[i] - 1) % userClr.length ] );
      drawSkeleton(userList[i]);
    }    

    if (openni.getCoM(userList[i], com))
    {
      openni.convertRealWorldToProjective(com, com2d);
      stroke(100, 255, 0);
      strokeWeight(1);
      beginShape(LINES);
      vertex(com2d.x, com2d.y - 5);
      vertex(com2d.x, com2d.y + 5);

      vertex(com2d.x - 5, com2d.y);
      vertex(com2d.x + 5, com2d.y);
      endShape();

      fill(0, 255, 100);
      text(Integer.toString(userList[i]), com2d.x, com2d.y);
    }
  }
  Swipe();
  Raise();
}

void drawSkeleton(int userId)
{
  openni.drawLimb(userId, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_NECK);

  openni.drawLimb(userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_LEFT_SHOULDER);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_LEFT_ELBOW);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_ELBOW, SimpleOpenNI.SKEL_LEFT_HAND);

  openni.drawLimb(userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND);

  openni.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO);

  openni.drawLimb(userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT);

  openni.drawLimb(userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE);
  openni.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT);
}
void onNewUser(SimpleOpenNI curContext, int userId)
{
  println("onNewUser - userId: " + userId);
  println("\tstart tracking skeleton");

  curContext.startTrackingSkeleton(userId);
}

private float ScaleVector(int length, float position)
{
  float value = (((((float)length) / 1f) / 2f) * position) + (length / 2);
  if (value > length)
  {
    return (float)length;
  }
  if (value < 0f)
  {
    return 0f;
  }
  return value;
}

void Swipe()
{
  int[] userList = openni.getUsers();
  for (int userID : userList) {
    openni.getJointPositionSkeleton(userID, SimpleOpenNI.SKEL_RIGHT_HAND, rpos);
    openni.getJointPositionSkeleton(userID, SimpleOpenNI.SKEL_HEAD, hpos);
  }
  if (rpos.x > hpos.x + 100)
  {
    println("Wave!");
  }
}

void Raise()
{
  int[] userList = openni.getUsers();
  for (int userID : userList)
  {
    openni.getJointPositionSkeleton(userID, SimpleOpenNI.SKEL_LEFT_HAND, lpos);
    openni.getJointPositionSkeleton(userID, SimpleOpenNI.SKEL_HEAD, hpos);
  }
  if (lpos.y>hpos.y)
  {
    println("Raise!");
  }
}

沒有留言:

張貼留言