예제 #1
0
    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;
            }
        }
    }
예제 #2
0
    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);
    }
예제 #3
0
    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;
        }
    }
예제 #4
0
    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++;
    }
예제 #5
0
    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;
            }
        }
    }
예제 #6
0
 private static Vector3 GetVector3FromJoint(Kinect.Joint joint)
 {
     return(new Vector3(joint.Position.X * 10, joint.Position.Y * 10, 1.0f));
 }
예제 #7
0
    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);
                }
            }
        }
    }
예제 #8
0
 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));
 }
예제 #9
0
 public static Vector3 GetVector3FromJoint(Kinect.Joint joint)
 {
     return(new Vector3(joint.Position.X * 10, joint.Position.Y * 10, joint.Position.Z * 10));
 }
예제 #10
0
    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;
            }
        }
    }
예제 #11
0
    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;
            }
        }
    }