Beispiel #1
0
 void Start()
 {
     Hand            = Manager.instance.HandOnSpace;
     currentHand     = new ARHand();
     currentHandRect = new HandRect();
     oldHandRect     = new HandRect();
 }
Beispiel #2
0
 void Start()
 {
     LandmarkObj     = Manager.instance.LandmarkObj;
     currentHand     = new ARHand();
     currentHandRect = new HandRect();
     oldHandRect     = new HandRect();
 }
 void Start()
 {
     Hand            = HTManager.instance.HandOnSpace;
     TriHand         = HTManager.instance.TriHand;
     Triangle        = HTManager.instance.Triangle;
     controller      = Triangle.transform.Find("Controller").GetComponent <VRHandController>();
     geo             = HTManager.instance.Geometry;
     currentHand     = new ARHand();
     currentHandRect = new HandRect();
     oldHandRect     = new HandRect();
 }
Beispiel #4
0
    /// <summary>
    /// This function is called every fixed framerate frame, if the MonoBehaviour is enabled.
    /// </summary>
    void FixedUpdate()
    {
        if (GetComponent <ARFrameProcessor>().HandProcessor == null)
        {
            return;
        }
        float[] handRectData      = GetComponent <ARFrameProcessor>().HandProcessor.getHandRectData();
        float[] handLandmarksData = GetComponent <ARFrameProcessor>().HandProcessor.getHandLandmarksData();

        if (null != handRectData)
        {
            currentHandRect = HandRect.ParseFrom(handRectData);
            if (!isHandStay())
            {
                oldHandRect      = currentHandRect;
                isHandRectChange = true;
            }
            else
            {
                isHandRectChange = false;
            }
            text.text = "Hand detected";
        }
        else
        {
            text.text = "No Hand detected";
        }

        if (null != handLandmarksData && !float.IsNegativeInfinity(GetComponent <ARFrameProcessor>().ImageRatio))
        {
            currentHand.ParseFrom(handLandmarksData, GetComponent <ARFrameProcessor>().ImageRatio);
        }

        if (!Hand.activeInHierarchy)
        {
            return;
        }
        for (int i = 0; i < Hand.transform.childCount; i++)
        {
            Hand.transform.GetChild(i).transform.position = currentHand.GetLandmark(i);
        }
    }
Beispiel #5
0
    /// <summary>
    /// This function is called every fixed framerate frame, if the MonoBehaviour is enabled.
    /// </summary>
    void FixedUpdate()
    {
        if (GetComponent <ARFrameProcessor>().HandProcessor == null)
        {
            return;
        }
        float[] handRectData      = GetComponent <ARFrameProcessor>().HandProcessor.getHandRectData();
        float[] handLandmarksData = GetComponent <ARFrameProcessor>().HandProcessor.getHandLandmarksData();

        if (null != handRectData)
        {
            currentHandRect = HandRect.ParseFrom(handRectData);
            // Console.log("Width: " + currentHandRect.Width + "\nHeight: " + currentHandRect.Height + "\nXCenter: " + currentHandRect.XCenter + "\nYCenter: " + currentHandRect.YCenter + "\nRotation: " + currentHandRect.Rotation);
            if (!isHandStay())
            {
                oldHandRect      = currentHandRect;
                isHandRectChange = true;
            }
            else
            {
                isHandRectChange = false;
            }
        }

        if (null != handLandmarksData && !float.IsNegativeInfinity(GetComponent <ARFrameProcessor>().ImageRatio))
        {
            currentHand.ParseFrom(handLandmarksData, GetComponent <ARFrameProcessor>().ImageRatio);
        }
        long time = new DateTimeOffset(DateTime.Now).ToUnixTimeMilliseconds();

        Debug.Log("Rendered at: " + time.ToString());

        if (!LandmarkObj.activeInHierarchy)
        {
            return;
        }
        LandmarkObj.transform.position = currentHand.GetLandmark(0);
        LandmarkObj.transform.LookAt(Camera.main.transform);
        LandmarkObj.transform.Rotate(0, 180, 0);
    }
    /// <summary>
    /// This function is called every fixed framerate frame, if the MonoBehaviour is enabled.
    /// </summary>
    void FixedUpdate()
    {
        //Debug.Log("Chiar ruleaza");
        if (GetComponent <ARFrameProcessor>().HandProcessor == null)
        {
            //Debug.Log("I'm outta here");
            //var x = (0, 0.1);
            if (TriHand.activeInHierarchy)
            {
                //Debug.Log("Am intrat in if");

                Vector3 r1 = TriHand.transform.GetChild(1).position - TriHand.transform.GetChild(0).position;
                Vector3 r2 = TriHand.transform.GetChild(2).position - TriHand.transform.GetChild(0).position;

                //geo.PlaceObject(Triangle, realPoints[0]);
                Triangle.transform.position = TriHand.transform.GetChild(0).position;
                if (Vector3.Magnitude(r1) > 0)
                {
                    geo.RotateObjectToMatch(Triangle, r1, r2);
                }
            }
            return;
        }
        float[] handRectData      = GetComponent <ARFrameProcessor>().HandProcessor.getHandRectData();
        float[] handLandmarksData = GetComponent <ARFrameProcessor>().HandProcessor.getHandLandmarksData();

        if (null != handRectData)
        {
            currentHandRect = HandRect.ParseFrom(handRectData);
            if (!isHandStay())
            {
                oldHandRect      = currentHandRect;
                isHandRectChange = true;
            }
            else
            {
                isHandRectChange = false;
            }
        }

        //if (null != handLandmarksData && !float.IsNegativeInfinity(GetComponent<ARFrameProcessor>().ImageRatio))
        //{
        //    currentHand.ParseFrom(handLandmarksData, GetComponent<ARFrameProcessor>().ImageRatio);
        //}

        //if (!Hand.activeInHierarchy) return;
        //for (int i = 0; i < Hand.transform.childCount - 1; i++)
        //{
        //    Hand.transform.GetChild(i).transform.position = currentHand.GetLandmark(i);
        //    Hand.transform.GetChild(i).transform.localScale = new Vector3(0.005f, 0.005f, 0.005f);
        //}
        //Hand.transform.GetChild(Hand.transform.childCount - 1).transform.position = (currentHand.GetLandmark(0) + currentHand.GetLandmark(5) + currentHand.GetLandmark(17)) / 3.0f;
        //var dist = (currentHand.GetLandmark(0) - currentHand.GetLandmark(12)).magnitude;
        //Debug.Log("size = " + dist);

        Vector3[] bigFinger = new Vector3[5];
        for (int i = 1; i < 5; i++)
        {
            bigFinger[i].x = handLandmarksData[i * 3];
            bigFinger[i].y = handLandmarksData[i * 3 + 1];
            bigFinger[i].z = handLandmarksData[i * 3 + 2] / 80;
            Debug.Log($"FingerCoord{i} {bigFinger[i]}");
        }
        float fingerAngle = Vector3.Angle(bigFinger[1] - bigFinger[2], bigFinger[3] - bigFinger[4]);

        Debug.Log($"FingerAngle {fingerAngle}");
        angles.Enqueue(fingerAngle);
        if (angles.Count > 5)
        {
            angles.Dequeue();
            float mean = 0;
            foreach (var x in angles)
            {
                mean += x;
            }
            mean /= angles.Count;
            Debug.Log($"grabb mean {mean}");
            if (mean > grabTreshold ^ Grabbing)
            {
                Grabbing = mean > grabTreshold;
                if (Grabbing)
                {
                    Debug.Log("GRABB");
                    //grabber.OnGrabButtonPressed(new ControllerInteractionEventArgs());
                    if (action == ActionType.GRAB)
                    {
                        controller.GripPressed();
                    }
                    else
                    {
                        controller.TriggerPressed();
                    }
                }
                else
                {
                    Debug.Log("UNGRABB");
                    //grabber.OnGrabButtonReleased(new ControllerInteractionEventArgs());
                    if (action == ActionType.GRAB)
                    {
                        controller.GripReleased();
                    }
                    else
                    {
                        controller.TriggerReleased();
                    }
                }
            }
        }

        if (Hand.activeInHierarchy && display_points)
        {
            for (int i = 0; i < Hand.transform.childCount - 1; i++)
            {
                geo.PlaceObject(Hand.transform.GetChild(i).gameObject, new Vector2(2 * handLandmarksData[i * 3] - 1, -2 * handLandmarksData[i * 3 + 1] + 1));
                //Hand.transform.GetChild(i).transform.position = currentHand.GetLandmark(i);
                Hand.transform.GetChild(i).transform.localScale = new Vector3(0.005f, 0.005f, 0.005f);
            }
            Hand.transform.GetChild(Hand.transform.childCount - 1).transform.position = (Hand.transform.GetChild(0).transform.position + Hand.transform.GetChild(5).transform.position + Hand.transform.GetChild(17).transform.position) / 3.0f;
            //var dist = (currentHand.GetLandmark(0) - currentHand.GetLandmark(12)).magnitude;
            //Debug.Log("size = " + dist);

            Hand.transform.GetChild(0).GetComponent <MeshRenderer>().material.SetColor("_Color", Color.red);
        }

        if (TriHand.activeInHierarchy)
        {
            Debug.Log("Am intrat in if");
            float[] dims = TriHand.GetComponent <HandDims>().GetDims();
            int     i    = 0;
            Vector2 p1   = new Vector2(handLandmarksData[i * 3] - 0.5f, -handLandmarksData[i * 3 + 1] + 0.5f);
            i = 5;
            Vector2 p2 = new Vector2(handLandmarksData[i * 3] - 0.5f, -handLandmarksData[i * 3 + 1] + 0.5f);
            i = 17;
            Vector2 p3 = new Vector2(handLandmarksData[i * 3] - 0.5f, -handLandmarksData[i * 3 + 1] + 0.5f);

            Vector2[] imPoints = { p1, p2, p3 };

            var realPoints = geo.GetRealPoints(imPoints, dims);

            //var center = (realPoints[0] + realPoints[1] + realPoints[2])/3;

            for (i = 0; i < 3; i++)
            {
                //realPoints[i] += center*(z_factor-1);
                Debug.Log($"realpos{i}: {realPoints[i].x} {realPoints[i].y} {realPoints[i].z}");
                geo.PlaceObject(TriHand.transform.GetChild(i).gameObject, realPoints[i]);
            }

            Vector3 r1 = TriHand.transform.GetChild(1).position - TriHand.transform.GetChild(0).position;
            Vector3 r2 = TriHand.transform.GetChild(2).position - TriHand.transform.GetChild(0).position;

            var TriCenterPos = (TriHand.transform.GetChild(0).position + TriHand.transform.GetChild(1).position + TriHand.transform.GetChild(2).position) / 3;

            var displacement = (TriCenterPos - geo.origin) * (z_factor - 1);

            // displacement = Vector3.Project(displacement, geo.zaxis);

            for (i = 0; i < 3; i++)
            {
                TriHand.transform.GetChild(i).position += displacement;
            }

            //geo.PlaceObject(Triangle, realPoints[0]);
            //Vector3 r1 = TriHand.transform.GetChild(1).position - TriHand.transform.GetChild(0).position;
            //Vector3 r2 = TriHand.transform.GetChild(2).position - TriHand.transform.GetChild(0).position;

            //geo.PlaceObject(Triangle, realPoints[0]);
            Triangle.transform.position = TriHand.transform.GetChild(0).position;
            if (Vector3.Magnitude(r1) > 0)
            {
                geo.RotateObjectToMatch(Triangle, r1, r2);
            }
        }
    }