キネクトを使って人間の周りには青い円が表示されるようなプログラムを考えています。そこにもう一人入ってきて円が重なると赤の円になるようなプログラムをしたいです。表示が一人だけのときは青でしたが、画面に2人入ると、その瞬間赤になってしまいます。どのように改善すればよいかご教授ください。プログラムは以下のようになっています。
import KinectPV2.KJoint;
import KinectPV2.*;
KinectPV2 kinect;
float zVal = 300;
float dist, J1X, J1Z, J2X, J2Z ;
void setup() {
size(1980, 1080, P3D);
kinect = new KinectPV2(this);
kinect.enableColorImg(true);
kinect.enableSkeleton3DMap(true);
kinect.init();
}
void draw() {
background(0);
image(kinect.getDepthImage(), 0, 0, width, height);
texture(kinect.getDepthImage());
beginShape(); noStroke(); vertex(0, 0, 0, 0, 0);//Left-Upper vertex(x,y,z,tex_x,tex_y) vertex(width, 0, 0, kinect.getDepthImage().width, 0);;//Right-Upper vertex(x,y,z,tex_x,tex_y) vertex(width, height, 0,kinect.getDepthImage().width, kinect.getDepthImage().height);//Right-lower vertex(x,y,z,tex_x,tex_y) vertex(0, height, 0, 0, kinect.getDepthImage().height);//Left-lower vertex(x,y,z,tex_x,tex_y) endShape();
background(255);
translate(width/2, height/2, 0);
scale(zVal);
rotate(PI);
ArrayList<KSkeleton> skeletonArray = kinect.getSkeleton3d();
for (int i = 0; i < skeletonArray.size(); i++) {
KSkeleton skeleton = (KSkeleton) skeletonArray.get(i);
if (skeleton.isTracked()) {
KJoint[] joints = skeleton.getJoints();
KJoint head = joints[KinectPV2.JointType_Head];
KJoint other_head = skeleton.getJoints()[KinectPV2.JointType_Head];
boolean isHit = false; for (int j = 0; j < skeletonArray.size(); j++) { if (j == i) continue; if (false == skeleton.isTracked()) continue; dist (head.getX(),head.getZ(),other_head.getX(),other_head.getZ()); if (dist<=100) { isHit = true; } } float x = head.getX() * 2.5; float z = head.getZ() * 2-3 ; float xx = other_head.getX() * 2.5; float zz = other_head.getZ() * 2-3 ; float r = 1.0f * 1; if (isHit) {fill(255,0,0);ellipse(x, z, r, r);ellipse(xx, zz, r, r);} else {fill(0,0,255);ellipse(x, z, r, r);ellipse(xx, zz, r, r);} }
}
}
あなたの回答
tips
プレビュー