Esempio n. 1
0
 void Update()
 {
     // Retrieve new eye tracking data each frame and store it in the member variable.
     // It is recommended to place the eye tracker at the top of the update order.
     ViveSR.Error e = SREye.GetEyeData_v2(ref eyeData);
     if (e != 0)
     {
         string eName = Enum.GetName(typeof(ViveSR.Error), e);
         Debug.LogError("[EyeTracker] Error " + eName + " occurred while retrieving data.");
     }
 }
    // Update is called once per frame
    void Update()
    {
        var error   = SRanipal_Eye_API.GetEyeData(ref EyeData);
        var newData = SRanipal_Eye.GetVerboseData(out EyeData.verbose_data);

        //No new data received from camera sensor - skip step
        if (!newData)
        {
            return;
        }

        //Show error only once and not every frame
        if (error != ViveSR.Error.WORK && lastError != error)
        {
            Debug.LogError("An error happened: " + error.ToString());
        }
        lastError = error;

        var leftEye  = EyeData.verbose_data.left.gaze_direction_normalized;
        var rightEye = EyeData.verbose_data.right.gaze_direction_normalized;

        // if (leftEye != Vector3.zero && rightEye != Vector3.zero)
        // Debug.Log("Eyes: LEFT:=" + leftEye + ", RIGHT:=" + rightEye);


        if (leftEye != Vector3.zero)
        {
            this.validTracking = true;
            CalculateWorldSpace(leftEye);
        }
        else if (rightEye != Vector3.zero)
        {
            this.validTracking = true;
            CalculateWorldSpace(rightEye);
        }
        else
        {
            this.validTracking = false;
        }
    }
        IEnumerator Start()
        {
            if (RenderEyetracking == null)
            {
                Debug.LogError("ActiveSessionView missing FixationRenderCamera");
                WarningText.text = "ActiveSessionView missing FixationRenderCamera";
                yield break;
            }
            if (VRSceneCamera == null)
            {
                Debug.LogError("ActiveSessionView missing VRSceneCamera");
                WarningText.text = "ActiveSessionView missing VRSceneCamera";
                yield break;
            }

            RenderEyetracking.Initialize(VRSceneCamera);
            var copy = VRSceneCamera.gameObject.AddComponent <CopyVRViewToRenderTexture>();

            copy.Initialize(MainCameraRenderImage);

            WarningText.gameObject.SetActive(false);
#if CVR_AH
            if (AdhawkApi.Calibrator.Instance != null)
            {
                if (!AdhawkApi.Calibrator.Instance.Calibrated)
                {
                    WarningText.text = "Eye Tracking not Calibrated";
                }

                while (!AdhawkApi.Calibrator.Instance.Calibrated)
                {
                    yield return(new WaitForSeconds(1));

                    if (AdhawkApi.Calibrator.Instance == null)
                    {
                        break;
                    }
                }

                if (!AdhawkApi.Calibrator.Instance.Calibrated)
                {
                    WarningText.text = "Eye Tracking Calibrated";
                    yield return(new WaitForSeconds(2));

                    WarningText.enabled = false;
                }
            }
            else
            {
                WarningText.text = "Could not find Calibrator";
            }
#elif CVR_PUPIL
            if (calibrationController == null)
            {
                calibrationController = FindObjectOfType <PupilLabs.CalibrationController>();
            }
            if (calibrationController != null)
            {
                calibrationController.OnCalibrationSucceeded += PupilLabs_OnCalibrationSucceeded;
                calibrationController.OnCalibrationStarted   += PupilLabs_OnCalibrationStarted;
                calibrationController.OnCalibrationFailed    += PupilLabs_OnCalibrationFailed;
            }
            else
            {
                WarningText.text = "Could not find Calibration Controller";
            }
#elif CVR_TOBIIVR
            WarningText.enabled = false;
#elif CVR_FOVE
            if (!Fove.Unity.FoveManager.IsEyeTrackingCalibrated())
            {
                WarningText.text = "Eye Tracking not Calibrated";
            }

            while (Fove.Unity.FoveManager.IsEyeTrackingCalibrating() || !Fove.Unity.FoveManager.IsEyeTrackingCalibrated())
            {
                if (Fove.Unity.FoveManager.IsEyeTrackingCalibrating())
                {
                    WarningText.text = "Calibration In Progress";
                }
                yield return(new WaitForSeconds(1));
            }

            if (Fove.Unity.FoveManager.IsEyeTrackingCalibrated())
            {
                WarningText.text = "Eye Tracking Calibrated";
                yield return(new WaitForSeconds(2));

                WarningText.enabled = false;
            }
#elif CVR_VIVEPROEYE
            bool         needCalibration = false;
            int          output          = ViveSR.anipal.Eye.SRanipal_Eye_API.IsUserNeedCalibration(ref needCalibration);
            ViveSR.Error error           = (ViveSR.Error)output;

            if (output != 0)
            {
                WarningText.text = "Eye Tracking Calibration Error " + error.ToString();
            }
            else if (needCalibration)
            {
                WarningText.text = "Eye Tracking needs Calibration";
            }
            else
            {
                WarningText.text = "Eye Tracking Calibrated";
                yield return(new WaitForSeconds(2));

                WarningText.enabled = false;
            }
#elif CVR_VARJO
            if (Varjo.VarjoPlugin.GetGaze().status == Varjo.VarjoPlugin.GazeStatus.VALID)
            {
                WarningText.text = "Eye Tracking Calibrated";
                yield return(new WaitForSeconds(2));

                WarningText.enabled = false;
            }
            else
            {
                WarningText.text = "Eye Tracking not Calibrated";
            }
#else
            WarningText.text = "No Eye Tracking Found!";
#endif
        }