private void RefreshBodyObject(Kinect.Body body, GameObject bodyObject) { for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++) { Kinect.Joint sourceJoint = body.Joints[jt]; Kinect.Joint?targetJoint = null; if (_BoneMap.ContainsKey(jt)) { targetJoint = body.Joints[_BoneMap[jt]]; } Transform jointObj = bodyObject.transform.Find(jt.ToString()); jointObj.localPosition = GetVector3FromJoint(sourceJoint); LineRenderer lr = jointObj.GetComponent <LineRenderer>(); if (targetJoint.HasValue) { lr.SetPosition(0, jointObj.localPosition); lr.SetPosition(1, GetVector3FromJoint(targetJoint.Value)); lr.SetColors(GetColorForState(sourceJoint.TrackingState), GetColorForState(targetJoint.Value.TrackingState)); } else { lr.enabled = false; } } }
private void RefreshBodyObject(Kinect.Body body, GameObject bodyObject) { outputList.Add(Time.frameCount.ToString()); for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++) { Kinect.Joint sourceJoint = body.Joints[jt]; Kinect.Joint?targetJoint = null; if (_BoneMap.ContainsKey(jt)) { targetJoint = body.Joints[_BoneMap[jt]]; } Transform jointObj = bodyObject.transform.Find(jt.ToString()); //Transform jointObjDancer = DancerBody.transform.Find(jt.ToString()); jointObj.localPosition = GetVector3FromJoint(sourceJoint); //jointObjDancer.localPosition = GetVector3FromJoint(sourceJoint); // write the coordinates to a file // get coordinates float x = jointObj.localPosition.x; float y = jointObj.localPosition.y; float z = jointObj.localPosition.z; // text to be printed string outputline = sourceJoint.JointType.ToString() + ": " + x.ToString() + "," + y.ToString() + "," + z.ToString(); outputList.Add(outputline); // lines between the joints LineRenderer lr = jointObj.GetComponent <LineRenderer>(); //LineRenderer lr2 = jointObjDancer.GetComponent<LineRenderer>(); if (targetJoint.HasValue) { lr.SetPosition(0, jointObj.localPosition); lr.SetPosition(1, GetVector3FromJoint(targetJoint.Value)); lr.SetColors(GetColorForState(sourceJoint.TrackingState), GetColorForState(targetJoint.Value.TrackingState)); } else { lr.enabled = false; } } // check if current body position matches anything moveMatch(body, bodyObject); }
private void UpdateBodyObect(Kinect.Body body, GameObject bodyObject) { // update joint foreach (Kinect.JointType _joint in _joints) { // Get new target position Kinect.Joint sourceJoint = body.Joints[_joint]; Vector3 targetPosition = GetVector3FromJoint(sourceJoint); targetPosition.z = 0; // Get joint, set new position Transform jointObject = bodyObject.transform.Find(_joint.ToString()); jointObject.position = targetPosition; } }
private void RefreshBodyObjectDancer(Kinect.Body body, GameObject bodyObject) { for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++) { Kinect.Joint sourceJoint = body.Joints[jt]; Kinect.Joint? targetJoint = null; Kinect.JointType?targetJointType = null; if (_BoneMap.ContainsKey(jt)) { targetJoint = body.Joints[_BoneMap[jt]]; targetJointType = _BoneMap[jt]; } Transform jointObjDancer = DancerBody.transform.Find(jt.ToString()); jointObjDancer.localPosition = GetVector3FromFile(jt.ToString()); //Debug.Log(jointObjDancer.localPosition); LineRenderer lr2 = jointObjDancer.GetComponent <LineRenderer>(); if (targetJoint.HasValue) { lr2.SetPosition(0, jointObjDancer.localPosition); lr2.SetPosition(1, GetVector3FromFile(targetJointType.ToString())); lr2.SetColors(GetColorForStateDancer(sourceJoint.TrackingState), GetColorForStateDancer(targetJoint.Value.TrackingState)); } else { lr2.enabled = false; } } movearrayint++; }
private void RefreshBodyObject(Kinect.Body body, GameObject bodyObject) { for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++) { Kinect.Joint sourceJoint = body.Joints[jt]; Kinect.Joint?targetJoint = null; if (_BoneMap.ContainsKey(jt)) { targetJoint = body.Joints[_BoneMap[jt]]; } Transform jointObj = bodyObject.transform.Find(jt.ToString()); jointObj.localPosition = GetVector3FromJoint(sourceJoint); //Debug.Log("body outside " + body.TrackingId); if (jt == Kinect.JointType.FootLeft && jointObj.localPosition.x >= detectionThreshold) { //Debug.Log("body inside " + body.TrackingId); if (!setupDone && doSetup) { SetupPedal(jointObj.localPosition); } manageCyclingTimes(jointObj.localPosition); //-4.2 (Down) -2.1 (Up) -> set the threshold at 3 } LineRenderer lr = jointObj.GetComponent <LineRenderer>(); if (targetJoint.HasValue) { lr.SetPosition(0, jointObj.localPosition); lr.SetPosition(1, GetVector3FromJoint(targetJoint.Value)); lr.SetColors(GetColorForState(sourceJoint.TrackingState), GetColorForState(targetJoint.Value.TrackingState)); } else { lr.enabled = false; } } }
private static Vector3 GetVector3FromJoint(Kinect.Joint joint) { return(new Vector3(joint.Position.X * 10, joint.Position.Y * 10, 1.0f)); }
private void UpdateBodyObject(Kinect.Body body, GameObject bodyObject) { if (!sitTest) { for (Kinect.JointType jt = Kinect.JointType.HipLeft; jt <= Kinect.JointType.ThumbRight; jt++) { Kinect.Joint sourceJoint = body.Joints[jt]; Kinect.Joint?targetJoint = null; //IF JOINT IS IN BONEMAP ADD IT TO TARGET JOINT if (_BoneMap.ContainsKey(jt)) { targetJoint = body.Joints[_BoneMap[jt]]; } Transform jointObj = bodyObject.transform.Find(jt.ToString()); jointObj.localPosition = GetVector3FromJoint(sourceJoint); LineRenderer lr = jointObj.GetComponent <LineRenderer>(); if (targetJoint.HasValue) { lr.SetPosition(0, jointObj.localPosition); lr.SetPosition(1, GetVector3FromJoint(targetJoint.Value)); lr.startColor = Color.white; //(Color.grey,Color.grey); lr.endColor = Color.grey; float legAngle = FindHipAngle(GetVector3FromJoint(sourceJoint), GetVector3FromJoint(targetJoint.Value)); //Debug.Log(legAngle); //-5 <= x <= 5 -> tollerence TOTEST if (legAngle >= -5 && legAngle <= 5) { sitTest = true; //ghetto solution -> couldnt get the face to be not visible at start --> set face after sit } } else { lr.enabled = false; } } } if (sitTest) { if (!skelTest) { //iterate over all the joints that arent hands and remover them for (Kinect.JointType jt = Kinect.JointType.HipLeft; jt <= Kinect.JointType.ThumbRight; jt++) { if (jt != Kinect.JointType.HandRight || jt != Kinect.JointType.HandLeft) { GameObject.Find(jt.ToString()).SetActive(false); } } skelTest = true; } //for face and hands (single joints) foreach (Kinect.JointType _joint in _joints) { //get new target position Joint sourceJoint = body.Joints[_joint]; Vector3 targetPosition = GetVector3FromJoint(sourceJoint); //all play happens on same plane targetPosition.z = 0; //get joint, set new postion Transform jointObject = bodyObject.transform.Find(_joint.ToString()); jointObject.position = targetPosition; Joint selectedJoint = body.Joints[_joint]; if (_joint.ToString() != "Head") { if (_joint.ToString() == "HandLeft") { leftHandPos = GetVector3FromJoint(selectedJoint); } else { rightHandPos = GetVector3FromJoint(selectedJoint); } } //0.5 is radius if (leftHandPos.x <= -4.5 && leftHandPos.x >= -5.5) { //Debug.Log(rightHandPos.y); } } } }
private static Vector3 GetVector3FromJoint(Kinect.Joint joint) { // Kinect was giving flipped X axis, might need change return(new Vector3(-joint.Position.X * 10, joint.Position.Y * 10, joint.Position.Z * 10)); }
public static Vector3 GetVector3FromJoint(Kinect.Joint joint) { return(new Vector3(joint.Position.X * 10, joint.Position.Y * 10, joint.Position.Z * 10)); }
private void moveMatch(Kinect.Body body, GameObject bodyObject) { if (whichMove == 0 && moveCompleted == false) { Debug.Log("got here?"); Transform jointObj = bodyObject.transform.Find("ShoulderRight"); Kinect.Joint sourceJoint = body.Joints[Kinect.JointType.ShoulderRight]; jointObj.localPosition = GetVector3FromJoint(sourceJoint); Transform jointObjCompare = bodyObject.transform.Find("HandRight"); Kinect.Joint sourceJoint2 = body.Joints[Kinect.JointType.HandRight]; jointObjCompare.localPosition = GetVector3FromJoint(sourceJoint2); float y1 = jointObj.localPosition.y; float y2 = jointObjCompare.localPosition.y; if (y2 > y1) { didMove = true; tempDanceScore++; moveCompleted = true; } } if (whichMove == 1 && moveCompleted == false) { Transform jointObj = bodyObject.transform.Find("ShoulderRight"); Kinect.Joint sourceJoint = body.Joints[Kinect.JointType.ShoulderRight]; jointObj.localPosition = GetVector3FromJoint(sourceJoint); Transform jointObjCompare = bodyObject.transform.Find("HandRight"); Kinect.Joint sourceJoint2 = body.Joints[Kinect.JointType.HandRight]; jointObjCompare.localPosition = GetVector3FromJoint(sourceJoint2); float y1 = jointObj.localPosition.y; float y2 = jointObjCompare.localPosition.y; if (y2 > y1) { didMove = true; tempDanceScore++; moveCompleted = true; } } if (whichMove == 2 && moveCompleted == false) { Transform jointObj = bodyObject.transform.Find("HandLeft"); Kinect.Joint sourceJoint = body.Joints[Kinect.JointType.HandLeft]; jointObj.localPosition = GetVector3FromJoint(sourceJoint); Transform jointObjCompare = bodyObject.transform.Find("HandRight"); Kinect.Joint sourceJoint2 = body.Joints[Kinect.JointType.HandRight]; jointObjCompare.localPosition = GetVector3FromJoint(sourceJoint2); float y1 = jointObj.localPosition.y; float y2 = jointObjCompare.localPosition.y; if (y2 > y1) { didMove = true; tempDanceScore++; moveCompleted = true; } } if (whichMove == 3 && moveCompleted == false) { Transform jointObj3 = bodyObject.transform.Find("HipLeft"); Kinect.Joint sourceJoint3 = body.Joints[Kinect.JointType.HipLeft]; jointObj3.localPosition = GetVector3FromJoint(sourceJoint3); Transform jointObj = bodyObject.transform.Find("HandLeft"); Kinect.Joint sourceJoint = body.Joints[Kinect.JointType.HandLeft]; jointObj.localPosition = GetVector3FromJoint(sourceJoint); Transform jointObjCompare = bodyObject.transform.Find("HandRight"); Kinect.Joint sourceJoint2 = body.Joints[Kinect.JointType.HandRight]; jointObjCompare.localPosition = GetVector3FromJoint(sourceJoint2); float y1 = jointObj.localPosition.y; float y2 = jointObjCompare.localPosition.y; float x1 = jointObj.localPosition.x; // Handleft float x2 = jointObj3.localPosition.x; // shoulder float x3 = jointObjCompare.localPosition.x; //HandRight if (y2 - y1 < 0.10 && x1 > x2 && x3 > x2) //Rough estimate for now { didMove = true; tempDanceScore++; moveCompleted = true; } } }
private void moveMatch(Kinect.Body body, GameObject bodyObject) { // First Move if (whichMove == 0 && moveCompleted == false) { Transform jointObj = bodyObject.transform.Find("HipRight"); Kinect.Joint sourceJoint = body.Joints[Kinect.JointType.HipRight]; jointObj.localPosition = GetVector3FromJoint(sourceJoint); Transform jointObjCompare = bodyObject.transform.Find("HandRight"); Kinect.Joint sourceJoint2 = body.Joints[Kinect.JointType.HandRight]; jointObjCompare.localPosition = GetVector3FromJoint(sourceJoint2); Transform jointObjLeft = bodyObject.transform.Find("HipLeft"); Kinect.Joint sourceJointLeft = body.Joints[Kinect.JointType.HipLeft]; jointObjLeft.localPosition = GetVector3FromJoint(sourceJointLeft); Transform jointObjCompareLeft = bodyObject.transform.Find("HandLeft"); Kinect.Joint sourceJoint2Left = body.Joints[Kinect.JointType.HandLeft]; jointObjCompareLeft.localPosition = GetVector3FromJoint(sourceJoint2Left); float y1 = jointObj.localPosition.y; float y2 = jointObjCompare.localPosition.y; float y1left = jointObjLeft.localPosition.y; float y2left = jointObjCompareLeft.localPosition.y; if (y2 > y1 & y2left > y1left) { didMove = true; tempDanceScore++; danceScore++; moveCompleted = true; } } // Elbow and swirl if (whichMove == 1 && moveCompleted == false) { Transform jointObj = bodyObject.transform.Find("HandLeft"); Kinect.Joint sourceJoint = body.Joints[Kinect.JointType.HandLeft]; jointObj.localPosition = GetVector3FromJoint(sourceJoint); Transform jointObjCompare = bodyObject.transform.Find("HandRight"); Kinect.Joint sourceJoint2 = body.Joints[Kinect.JointType.HandRight]; jointObjCompare.localPosition = GetVector3FromJoint(sourceJoint2); Transform leftElbowJoint = bodyObject.transform.Find("ElbowLeft"); Kinect.Joint elbowSourceJoint = body.Joints[Kinect.JointType.ElbowLeft]; leftElbowJoint.localPosition = GetVector3FromJoint(elbowSourceJoint); Transform rightElbowJoint = bodyObject.transform.Find("ElbowRight"); Kinect.Joint elbowSourceJoint2 = body.Joints[Kinect.JointType.ElbowRight]; rightElbowJoint.localPosition = GetVector3FromJoint(elbowSourceJoint2); float y1 = jointObj.localPosition.y; float y2 = jointObjCompare.localPosition.y; float elbowRy = rightElbowJoint.localPosition.y; float elbowLy = leftElbowJoint.localPosition.y; if (y2 > y1 & y1 - y2 < 0.20) { didMove = true; tempDanceScore++; danceScore++; moveCompleted = true; } } // Lean Move if (whichMove == 2 && moveCompleted == false) { Transform jointObj = bodyObject.transform.Find("Head"); Kinect.Joint sourceJoint = body.Joints[Kinect.JointType.Head]; jointObj.localPosition = GetVector3FromJoint(sourceJoint); Transform jointObjCompare = bodyObject.transform.Find("HipLeft"); Kinect.Joint sourceJoint2 = body.Joints[Kinect.JointType.HipLeft]; jointObjCompare.localPosition = GetVector3FromJoint(sourceJoint2); Transform lefthandJoint = bodyObject.transform.Find("HandLeft"); Kinect.Joint handSourceJoint = body.Joints[Kinect.JointType.HandLeft]; lefthandJoint.localPosition = GetVector3FromJoint(handSourceJoint); Transform righthandJoint = bodyObject.transform.Find("HandRight"); Kinect.Joint handSourceJoint2 = body.Joints[Kinect.JointType.HandRight]; righthandJoint.localPosition = GetVector3FromJoint(handSourceJoint2); float x1 = jointObj.localPosition.x; float x2 = jointObjCompare.localPosition.x; // Hip float y1 = jointObj.localPosition.y; float y2 = jointObjCompare.localPosition.y; float handRy = righthandJoint.localPosition.y; float handLy = lefthandJoint.localPosition.y; if (x2 > x1 & handLy > y2 & handRy > y2) { didMove = true; tempDanceScore++; danceScore++; moveCompleted = true; } } if (whichMove == 3 && moveCompleted == false) { Transform jointObj3 = bodyObject.transform.Find("HipLeft"); Kinect.Joint sourceJoint3 = body.Joints[Kinect.JointType.HipLeft]; jointObj3.localPosition = GetVector3FromJoint(sourceJoint3); Transform jointObj = bodyObject.transform.Find("HandLeft"); Kinect.Joint sourceJoint = body.Joints[Kinect.JointType.HandLeft]; jointObj.localPosition = GetVector3FromJoint(sourceJoint); Transform jointObjCompare = bodyObject.transform.Find("HandRight"); Kinect.Joint sourceJoint2 = body.Joints[Kinect.JointType.HandRight]; jointObjCompare.localPosition = GetVector3FromJoint(sourceJoint2); float y1 = jointObj.localPosition.y; float y2 = jointObjCompare.localPosition.y; float x1 = jointObj.localPosition.x; // Handleft float x2 = jointObj3.localPosition.x; // Hip float x3 = jointObjCompare.localPosition.x; //HandRight // hand are even if (y2 - y1 < 0.10 & x1 - x2 < 0.20) //Rough estimate for now { didMove = true; tempDanceScore++; danceScore++; moveCompleted = true; } } }