/// <summary> /// get the position of the eye gaze in normalized viewport space /// </summary> public Vector3 GetViewportGazePoint() { Vector2 screenGazePoint = Vector2.one * 0.5f; #if CVR_FOVE //screenpoint //var normalizedPoint = FoveInterface.GetNormalizedViewportPosition(ray.GetPoint(1000), Fove.EFVR_Eye.Left); //Unity Plugin Version 1.3.1 var normalizedPoint = cam.WorldToViewportPoint(ray.GetPoint(1000)); //Vector2 gazePoint = hmd.GetGazePoint(); if (float.IsNaN(normalizedPoint.x)) { return(screenGazePoint); } screenGazePoint = new Vector2(normalizedPoint.x, normalizedPoint.y); #elif CVR_PUPIL//screenpoint screenGazePoint = PupilData._2D.GetEyeGaze("0"); #elif CVR_TOBIIVR screenGazePoint = cam.WorldToViewportPoint(_eyeTracker.LatestProcessedGazeData.CombinedGazeRayWorld.GetPoint(1000)); #elif CVR_NEURABLE screenGazePoint = NeurableUnity.NeurableUser.Instance.NeurableCam.NormalizedFocalPoint; #elif CVR_AH Vector3 x = ah_calibrator.GetGazeOrigin(); Vector3 r = ah_calibrator.GetGazeVector(); screenGazePoint = cam.WorldToViewportPoint(x + 10 * r); #endif return(screenGazePoint); }
public bool CombinedWorldGazeRay(out Ray ray) { Vector3 r = ah_calibrator.GetGazeVector(filterType: AdhawkApi.Numerics.Filters.FilterType.ExponentialMovingAverage); Vector3 x = ah_calibrator.GetGazeOrigin(); ray = new Ray(x, r); return(true); }
/// <summary> /// get the position of the eye gaze in normalized viewport space /// </summary> public Vector3 GetViewportGazePoint() { Vector2 screenGazePoint = Vector2.one * 0.5f; #if CVR_FOVE //screenpoint //var normalizedPoint = FoveInterface.GetNormalizedViewportPosition(ray.GetPoint(1000), Fove.EFVR_Eye.Left); //Unity Plugin Version 1.3.1 var normalizedPoint = GameplayReferences.HMDCameraComponent.WorldToViewportPoint(GameplayReferences.FoveInstance.GetGazeRays().left.GetPoint(1000)); //Vector2 gazePoint = hmd.GetGazePoint(); if (float.IsNaN(normalizedPoint.x)) { return(screenGazePoint); } screenGazePoint = new Vector2(normalizedPoint.x, normalizedPoint.y); #elif CVR_PUPIL//screenpoint screenGazePoint = pupilViewportPosition; #elif CVR_TOBIIVR if (Tobii.XR.TobiiXR.Internal.Provider.EyeTrackingDataLocal.GazeRay.IsValid) { var gazeray = Tobii.XR.TobiiXR.Internal.Provider.EyeTrackingDataLocal.GazeRay; screenGazePoint = GameplayReferences.HMDCameraComponent.WorldToViewportPoint(gazeray.Origin + GameplayReferences.HMD.TransformDirection(gazeray.Direction) * 1000); } #elif CVR_VIVEPROEYE var leftv2 = Vector2.zero; var rightv2 = Vector2.zero; bool leftSet = ViveSR.anipal.Eye.SRanipal_Eye.GetPupilPosition(ViveSR.anipal.Eye.EyeIndex.LEFT, out leftv2); bool rightSet = ViveSR.anipal.Eye.SRanipal_Eye.GetPupilPosition(ViveSR.anipal.Eye.EyeIndex.RIGHT, out rightv2); if (leftSet && !rightSet) { screenGazePoint = leftv2; } else if (!leftSet && rightSet) { screenGazePoint = rightv2; } else if (leftSet && rightSet) { screenGazePoint = (leftv2 + rightv2) / 2; } #elif CVR_NEURABLE screenGazePoint = Neurable.Core.NeurableUser.Instance.NeurableCam.NormalizedFocalPoint; #elif CVR_AH Vector3 x = ah_calibrator.GetGazeOrigin(); Vector3 r = ah_calibrator.GetGazeVector(); screenGazePoint = GameplayReferences.HMDCameraComponent.WorldToViewportPoint(x + 10 * r); #elif CVR_SNAPDRAGON var worldgazeDirection = SvrManager.Instance.leftCamera.transform.TransformDirection(SvrManager.Instance.EyeDirection); screenGazePoint = GameplayReferences.HMDCameraComponent.WorldToScreenPoint(GameplayReferences.HMD.position + 10 * worldgazeDirection); #endif return(screenGazePoint); }
/// <summary> /// get the position of the eye gaze in normalized viewport space /// </summary> public Vector3 GetViewportGazePoint() { Vector2 screenGazePoint = Vector2.one * 0.5f; #if CVR_FOVE //screenpoint //var normalizedPoint = FoveInterface.GetNormalizedViewportPosition(ray.GetPoint(1000), Fove.EFVR_Eye.Left); //Unity Plugin Version 1.3.1 var normalizedPoint = GameplayReferences.HMDCameraComponent.WorldToViewportPoint(GameplayReferences.FoveInstance.GetGazeRays().left.GetPoint(1000)); //Vector2 gazePoint = hmd.GetGazePoint(); if (float.IsNaN(normalizedPoint.x)) { return(screenGazePoint); } screenGazePoint = new Vector2(normalizedPoint.x, normalizedPoint.y); #elif CVR_PUPIL//screenpoint screenGazePoint = pupilViewportPosition; #elif CVR_TOBIIVR if (Tobii.XR.TobiiXR.Internal.Provider.EyeTrackingDataLocal.GazeRay.IsValid) { var gazeray = Tobii.XR.TobiiXR.Internal.Provider.EyeTrackingDataLocal.GazeRay; screenGazePoint = GameplayReferences.HMDCameraComponent.WorldToViewportPoint(gazeray.Origin + GameplayReferences.HMD.TransformDirection(gazeray.Direction) * 1000); } #elif CVR_VIVEPROEYE var leftv2 = Vector2.zero; var rightv2 = Vector2.zero; bool leftSet = ViveSR.anipal.Eye.SRanipal_Eye.GetPupilPosition(ViveSR.anipal.Eye.EyeIndex.LEFT, out leftv2); bool rightSet = ViveSR.anipal.Eye.SRanipal_Eye.GetPupilPosition(ViveSR.anipal.Eye.EyeIndex.RIGHT, out rightv2); if (leftSet && !rightSet) { screenGazePoint = leftv2; } else if (!leftSet && rightSet) { screenGazePoint = rightv2; } else if (leftSet && rightSet) { screenGazePoint = (leftv2 + rightv2) / 2; } #elif CVR_NEURABLE screenGazePoint = Neurable.Core.NeurableUser.Instance.NeurableCam.NormalizedFocalPoint; #elif CVR_AH Vector3 x = ah_calibrator.GetGazeOrigin(); Vector3 r = ah_calibrator.GetGazeVector(); screenGazePoint = GameplayReferences.HMDCameraComponent.WorldToViewportPoint(x + 10 * r); #elif CVR_SNAPDRAGON var worldgazeDirection = SvrManager.Instance.leftCamera.transform.TransformDirection(SvrManager.Instance.EyeDirection); screenGazePoint = GameplayReferences.HMDCameraComponent.WorldToScreenPoint(GameplayReferences.HMD.position + 10 * worldgazeDirection); #elif CVR_XR UnityEngine.XR.Eyes eyes; if (UnityEngine.XR.InputDevices.GetDeviceAtXRNode(UnityEngine.XR.XRNode.CenterEye).TryGetFeatureValue(UnityEngine.XR.CommonUsages.eyesData, out eyes)) { //first arg probably to mark which feature the value should return. type alone isn't enough to indicate the property Vector3 convergancePoint; if (eyes.TryGetFixationPoint(out convergancePoint)) { Vector3 leftPos = Vector3.zero; eyes.TryGetLeftEyePosition(out leftPos); Vector3 rightPos = Vector3.zero; eyes.TryGetRightEyePosition(out rightPos); Vector3 centerPos = (rightPos + leftPos) / 2f; var worldGazeDirection = (convergancePoint - centerPos).normalized; screenGazePoint = GameplayReferences.HMDCameraComponent.WorldToScreenPoint(GameplayReferences.HMD.position + 10 * worldGazeDirection); } } #endif return(screenGazePoint); }