public bool IsHandVisible(HandednessEnum handedness, float minConfidence = 0.15f) { if (!IsHandVisible()) { return(false); } for (int i = 0; i < trackedHands.Count; i++) { if (trackedHands[i].Handedness == handedness && trackedHands[i].HandednessConfidence > minConfidence) { return(true); } } return(false); }
public static HandednessEnum GetHandedness(Vector3 forward, Vector3 handPos, Vector3 up) { // Get handedness based on position relative to camera Vector3 cross = Vector3.Cross(forward, handPos); float direction = Vector3.Dot(cross, up); HandednessEnum newHandedness = HandednessEnum.Neither; if (direction >= 0f) { // Favor right-handedness slightly newHandedness = HandednessEnum.Right; } else { newHandedness = HandednessEnum.Left; } return(newHandedness); }
private void TappedHandler(HandednessEnum pressedHand, float pressedTime) { // Debug.Log("diff of pressedTime: " + (pressedTime - previousPressedTime)); if (pressedTime - previousPressedTime > intervalTime) { if (pressedHand == HandednessEnum.Left) { TappedEvent(TapActionEnum.LeftTap); Debug.Log("LeftTappedEvent."); } else if (pressedHand == HandednessEnum.Right) { TappedEvent(TapActionEnum.RightTap); Debug.Log("RightTappedEvent."); } } else { if (previousPressedHand == HandednessEnum.Left && pressedHand == HandednessEnum.Left) { TappedEvent(TapActionEnum.LeftLeftTap); Debug.Log("LeftLeftTappedEvent."); } else if (previousPressedHand == HandednessEnum.Right && pressedHand == HandednessEnum.Right) { TappedEvent(TapActionEnum.RightRightTap); Debug.Log("RightRightTappedEvent."); } else if (previousPressedHand == HandednessEnum.Left && pressedHand == HandednessEnum.Right) { TappedEvent(TapActionEnum.LeftRightTap); Debug.Log("LeftRightTappedEvent."); } else if (previousPressedHand == HandednessEnum.Right && pressedHand == HandednessEnum.Left) { TappedEvent(TapActionEnum.RightLeftTap); Debug.Log("RightLeftTappedEvent."); } } }
/// <summary> /// Gets the handedness of a position with respect to a camera position /// </summary> /// <param name="forward"></param> /// <param name="handPos"></param> /// <param name="up"></param> /// <param name="confidence"></param> /// <param name="currentHandedness"></param> /// <returns></returns> public static HandednessEnum GetHandedness(Vector3 forward, Vector3 handPos, Vector3 up, ref float confidence, HandednessEnum currentHandedness = HandednessEnum.Neither) { // Get handedness based on position relative to camera Vector3 cross = Vector3.Cross(forward, handPos); float direction = Vector3.Dot(cross, up); float newConfidence = Mathf.Abs(direction); HandednessEnum newHandedness = HandednessEnum.Neither; if (direction >= 0f) { // Favor right-handedness slightly newHandedness = HandednessEnum.Right; } else { newHandedness = HandednessEnum.Left; } // If we've already got a handedness, and the new handedness is different // reset the confidence if (currentHandedness != HandednessEnum.Neither && currentHandedness != newHandedness) { confidence = newConfidence; } else { // Otherwise, allow the confidence to remain at the max observed so far confidence = Mathf.Max(confidence, newConfidence); } return(newHandedness); }