public IEnumerator Calibrate(IEyeTracker eyeTracker)
    {
        // Create a calibration object.
        HMDBasedCalibration calibration = new HMDBasedCalibration(eyeTracker);

        // Enter calibration mode.
        calibration.EnterCalibrationMode();
        // Define the points in the HMD space we should calibrate at.
        Point3D[] pointsToCalibrate = new Point3D[] {
            new Point3D(9f, 9f, 20f),
            new Point3D(-9f, 9f, 20f),
            new Point3D(-9f, -9f, 20f),
            new Point3D(9f, -9f, 20f),
            new Point3D(0f, 0f, 20f),
        };
        // Collect data.
        foreach (Point3D point in pointsToCalibrate)
        {
            // Show an image on screen where you want to calibrate.
            Debug.Log("Show point in HMD space at ( " + point.X + " , " + point.Y + " , " + point.Z + " )");
            VRHeadsetDebugDisplay.Instance.SetText("Show point in HMD space at ( " + point.X + " , " + point.Y + " , " + point.Z + " )");
            DisplayImgAtPoint(new Vector3(point.X, point.Y, point.Z));
            // Wait a little for user to focus.
            yield return(new WaitForSeconds(5));

            // Collect data.
            CalibrationStatus status = calibration.CollectData(point);
            if (status != CalibrationStatus.Success)
            {
                // Try again if it didn't go well the first time.
                // Not all eye tracker models will fail at this point, but instead fail on ComputeAndApply.
                calibration.CollectData(point);
                Debug.Log("Calibration point status : " + status);
            }
            VRHeadsetDebugDisplay.Instance.SetText("Ok, next!");
        }
        // Compute and apply the calibration.
        HMDCalibrationResult calibrationResult = calibration.ComputeAndApply();

        Debug.Log("Compute and apply returned : " + calibrationResult.Status);
        // See that you're happy with the result.
        // The calibration is done. Leave calibration mode.


        calibration.LeaveCalibrationMode();
        VRHeadsetDebugDisplay.Instance.SetText("All finished!");
    }
Exemple #2
0
        // <BeginExample>
        private IEnumerator Calibrate(Point3D[] calibrationPoints, GameObject target)
        {
            if (_eyeTracker == null)
            {
                yield break;
            }

            _eyeTracker.CalibrationModeEntered += EyeTracker_CalibrationModeEntered;
            _eyeTracker.CalibrationModeLeft    += EyeTracker_CalibrationModeLeft;

            // Create a calibration object.
            var calibration = new HMDBasedCalibration(_eyeTracker);

            // Enter calibration mode.
            calibration.EnterCalibrationMode();

            // Get and set the lens cup separation
            float hmdIpdInMeter;

            if (TobiiPro_Util.TryGetHmdLensCupSeparationInMeter(out hmdIpdInMeter) == false)
            {
                Debug.LogWarning("TobiiPro: Failed to get lens cup separation from HMD. Setting default lens cup separation.");
                hmdIpdInMeter = 0.0635f;
            }

            TobiiPro_Util.SetLensCupSeparation(hmdIpdInMeter);
            // Collect data.
            var index           = 0;
            var remainingPoints = true;

            while (remainingPoints)
            {
                // Play intro animation for the point
                _hasAnimated = false;
                WaitingOnIntroAnimation.Invoke(this, new IntroAnimationArgs(index));

                yield return(StartCoroutine(WaitingForAnimation()));

                var point = calibrationPoints[index];

                point = new Point3D(-point.X, point.Y, point.Z);

                // Show an image on screen where you want to calibrate.
                // target.transform.localPosition = new Vector3(-point.X, point.Y, point.Z) / 1000f;

                // Wait a little for user to focus.
                yield return(new WaitForSeconds(1.5f));


                // Collect data.
                CalibrationStatus status = calibration.CollectData(point);
                if (status != CalibrationStatus.Success)
                {
                    // Try again if it didn't go well the first time.
                    // Not all eye tracker models will fail at this point, but instead fail on ComputeAndApply.
                    Debug.Log("TobiiPro: Calibration for this point wasn't success, try again.");
                    calibration.CollectData(point);
                }

                index++;

                // Outro animation for the point
                _hasAnimated = false;
                WaitingOnOutroAnimation.Invoke(this, null);
                yield return(StartCoroutine(WaitingForAnimation()));

                // Check if there are more points remaining
                if (index > calibrationPoints.Length - 1)
                {
                    remainingPoints = false;
                }
            }
            // Compute and apply the calibration.
            HMDCalibrationResult calibrationResult = calibration.ComputeAndApply();

            Debug.Log(string.Format("Compute and apply returned {0}.", calibrationResult.Status));
            // See that you're happy with the result.
            // The calibration is done. Leave calibration mode.

            OnCalibrationCompleted.Invoke(this, new CalibrationCompletedArgs(calibrationResult.Status));

            if (target != null)
            {
                Destroy(target);
            }

            _eyeTracker.CalibrationModeEntered -= EyeTracker_CalibrationModeEntered;
            calibration.LeaveCalibrationMode();

            _eyeTracker.CalibrationModeLeft -= EyeTracker_CalibrationModeLeft;
        }