protected void ConvertMagicLeapKeyPoint(MLKeyPoint keyPoint, TrackedHandJoint joint) { if (keyPoint.IsSupported) { var position = keyPoint.Position; UpdateJointPose(joint, position, Quaternion.identity); } }
/// <summary> /// Create a GameObject for the desired KeyPoint. /// </summary> /// <param name="keyPoint"></param> /// <returns></returns> private GameObject CreateKeyPoint(MLKeyPoint keyPoint, Color color) { GameObject newObject; newObject = GameObject.CreatePrimitive(PrimitiveType.Sphere); newObject.transform.SetParent(transform); newObject.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f); newObject.name = keyPoint.ToString(); newObject.GetComponent <Renderer>().material.color = color; return(newObject); }
private Quaternion GetOrientation(MLKeyPoint wristCenter, params MLKeyPoint[] hand) { if (handShape.Length != hand.Length) { handShape = new Vector3[hand.Length]; } for (var i = 0; i < hand.Length; ++i) { handShape[i] = (hand[i].Position - wristCenter.Position).normalized; } var forward = Vector3.zero; var up = Vector3.zero; for (var i = 0; i < handShape.Length - 1; ++i) { var j = i + 1; var a = handShape[i]; var b = handShape[j]; forward += Vector3.Cross(a, b); up += a; } if (IsRightHand) { forward *= -1; } forward.Normalize(); up.Normalize(); var q = Quaternion.LookRotation(forward, up); var right = Vector3.Cross(forward, up); var twist = Quaternion.AngleAxis(twistHand, forward); var raise = Quaternion.AngleAxis(raiseHand, right); var rot = Quaternion.AngleAxis(rotateHand, up); return(raise * rot * twist * q); }