예제 #1
0
        //Constructors:
        public ManagedHandSkeleton(ManagedHand managedHand)
        {
            //refs:
            _mainCamera = Camera.main;

            //sets:
            _managedHand = managedHand;

            //establish rotation offsets:
            _rotationOffsets = new List <Vector3>();
            _rotationOffsets.Add(Vector3.zero);
            _rotationOffsets.Add(new Vector3(-0.3004f, -0.9466f, 0.1174f));
            _rotationOffsets.Add(new Vector3(-0.8816f, 0.3225f, 0.3447f));

            //keypoints:
            HandCenter  = new ManagedKeypoint();
            WristCenter = new ManagedKeypoint();

            //fingers:
            Thumb  = new ManagedFinger(_managedHand.Hand, _thumbMCP, _thumbPIP, _thumbTip);
            Index  = new ManagedFinger(_managedHand.Hand, _indexMCP, _indexPIP, _indexTip);
            Middle = new ManagedFinger(_managedHand.Hand, _middleMCP, _middlePIP, _middleTip);
            Ring   = new ManagedFinger(_managedHand.Hand, _ringMCP, _ringTip);
            Pinky  = new ManagedFinger(_managedHand.Hand, _pinkyMCP, _pinkyTip);
        }
예제 #2
0
 //Event Handlers:
 private void HandlePointVisibilityChanged()
 {
     for (int i = 0; i < points.Length; i++)
     {
         if (points[i].Visible && _lastReliableEnd != points[i])
         {
             _lastReliableEnd        = points[i];
             _endTransitionStartTime = Time.realtimeSinceStartup;
             _endIsTransitioning     = true;
         }
     }
 }
예제 #3
0
        private void DrawBone(string fingerName, Vector3 from, ManagedKeypoint to, Color colorA, Color colorB)
        {
            fingerName = Name(fingerName);
            Lines.DrawLine(fingerName, colorA, colorB, .0005f, from, to.positionFiltered);

            if (_managedHand.Visible && to.Visible)
            {
                Lines.SetVisibility(fingerName, true);
            }
            else
            {
                Lines.SetVisibility(fingerName, false);
            }
        }
예제 #4
0
        //Constructors:
        public ManagedFinger(MLHand hand, params ManagedKeypoint[] points)
        {
            //sets:
            _hand            = hand;
            this.points      = points;
            _lastReliableEnd = points[0];

            //hooks:
            foreach (var item in points)
            {
                item.OnFound += HandlePointVisibilityChanged;
                item.OnLost  += HandlePointVisibilityChanged;
            }

            //initial events:
            OnVisibilityChanged?.Invoke(false);
            HandlePointVisibilityChanged();
        }
        //Loops:
        private void Update()
        {
            if (!HandInput.Ready)
            {
                return;
            }

            //get:
            switch (keyPoint)
            {
            case KeyPoint.RightHandCenter:
                _status = HandInput.Right.Skeleton.HandCenter;
                break;

            case KeyPoint.RightWristCenter:
                _status = HandInput.Right.Skeleton.WristCenter;
                break;

            case KeyPoint.RightThumbKnuckle:
                _status = HandInput.Right.Skeleton.Thumb.Knuckle;
                break;

            case KeyPoint.RightThumbJoint:
                _status = HandInput.Right.Skeleton.Thumb.Joint;
                break;

            case KeyPoint.RightThumbTip:
                _status = HandInput.Right.Skeleton.Thumb.Tip;
                break;

            case KeyPoint.RightIndexKnuckle:
                _status = HandInput.Right.Skeleton.Index.Knuckle;
                break;

            case KeyPoint.RightIndexJoint:
                _status = HandInput.Right.Skeleton.Index.Joint;
                break;

            case KeyPoint.RightIndexTip:
                _status = HandInput.Right.Skeleton.Index.Tip;
                break;

            case KeyPoint.RightMiddleKnuckle:
                _status = HandInput.Right.Skeleton.Middle.Knuckle;
                break;

            case KeyPoint.RightMiddleJoint:
                _status = HandInput.Right.Skeleton.Middle.Joint;
                break;

            case KeyPoint.RightMiddleTip:
                _status = HandInput.Right.Skeleton.Middle.Tip;
                break;

            case KeyPoint.RightRingKnuckle:
                _status = HandInput.Right.Skeleton.Ring.Knuckle;
                break;

            case KeyPoint.RightRingTip:
                _status = HandInput.Right.Skeleton.Ring.Tip;
                break;

            case KeyPoint.RightPinkyKnuckle:
                _status = HandInput.Right.Skeleton.Pinky.Knuckle;
                break;

            case KeyPoint.RightPinkyTip:
                _status = HandInput.Right.Skeleton.Pinky.Tip;
                break;

            case KeyPoint.LeftHandCenter:
                _status = HandInput.Left.Skeleton.HandCenter;
                break;

            case KeyPoint.LeftWristCenter:
                _status = HandInput.Left.Skeleton.WristCenter;
                break;

            case KeyPoint.LeftThumbKnuckle:
                _status = HandInput.Left.Skeleton.Thumb.Knuckle;
                break;

            case KeyPoint.LeftThumbJoint:
                _status = HandInput.Left.Skeleton.Thumb.Joint;
                break;

            case KeyPoint.LeftThumbTip:
                _status = HandInput.Left.Skeleton.Thumb.Tip;
                break;

            case KeyPoint.LeftIndexKnuckle:
                _status = HandInput.Left.Skeleton.Index.Knuckle;
                break;

            case KeyPoint.LeftIndexJoint:
                _status = HandInput.Left.Skeleton.Index.Joint;
                break;

            case KeyPoint.LeftIndexTip:
                _status = HandInput.Left.Skeleton.Index.Tip;
                break;

            case KeyPoint.LeftMiddleKnuckle:
                _status = HandInput.Left.Skeleton.Middle.Knuckle;
                break;

            case KeyPoint.LeftMiddleJoint:
                _status = HandInput.Left.Skeleton.Middle.Joint;
                break;

            case KeyPoint.LeftMiddleTip:
                _status = HandInput.Left.Skeleton.Middle.Tip;
                break;

            case KeyPoint.LeftRingKnuckle:
                _status = HandInput.Left.Skeleton.Ring.Knuckle;
                break;

            case KeyPoint.LeftRingTip:
                _status = HandInput.Left.Skeleton.Ring.Tip;
                break;

            case KeyPoint.LeftPinkyKnuckle:
                _status = HandInput.Left.Skeleton.Pinky.Knuckle;
                break;

            case KeyPoint.LeftPinkyTip:
                _status = HandInput.Left.Skeleton.Pinky.Tip;
                break;
            }

            //status:
            if (_status != null)
            {
                //status:
                filtered.enabled     = _status.Visible;
                raw.enabled          = _status.Visible;
                filteredBlur.enabled = _status.Visible;

                //location:
                filtered.transform.position     = _status.positionFiltered;
                filteredBlur.transform.position = _status.positionFiltered;
                raw.transform.position          = _status.positionRaw;

                //color if inside clip plane:
                if (_status.Visible)
                {
                    if (_status.InsideClipPlane)
                    {
                        raw.enabled          = false;
                        filtered.enabled     = false;
                        filteredBlur.enabled = true;
                    }
                    else
                    {
                        raw.enabled          = true;
                        filtered.enabled     = true;
                        filteredBlur.enabled = false;
                    }
                }
            }
        }