Example #1
0
        public static void MapAdvancedData(TobiiXR_AdvancedEyeTrackingData to,
                                           ref tobii_wearable_advanced_data_t data, bool convergenceDistanceSupported, Vector3 headToCenterEyeTranslation)
        {
            to.SystemTimestamp = data.timestamp_system_us;
            to.DeviceTimestamp = data.timestamp_tracker_us;

            FillGazeRayFrom(ref to.Left.GazeRay, data.left.gaze_origin_validity, data.left.gaze_origin_mm_xyz, data.left.gaze_direction_validity, data.left.gaze_direction_normalized_xyz, headToCenterEyeTranslation);
            FillGazeRayFrom(ref to.Right.GazeRay, data.right.gaze_origin_validity, data.right.gaze_origin_mm_xyz, data.right.gaze_direction_validity, data.right.gaze_direction_normalized_xyz, headToCenterEyeTranslation);
            FillGazeRayFrom(ref to.GazeRay, data.gaze_origin_combined_validity, data.gaze_origin_combined_mm_xyz, data.gaze_direction_combined_validity, data.gaze_direction_combined_normalized_xyz, headToCenterEyeTranslation);

            if (convergenceDistanceSupported)
            {
                to.ConvergenceDistance        = data.convergence_distance_mm / 1000f;
                to.ConvergenceDistanceIsValid = BoolFromValidity(data.convergence_distance_validity);
            }

            to.Left.IsBlinking = data.left.blink == tobii_state_bool_t.TOBII_STATE_BOOL_TRUE ||
                                 !BoolFromValidity(data.left.blink_validity);
            to.Right.IsBlinking = data.right.blink == tobii_state_bool_t.TOBII_STATE_BOOL_TRUE ||
                                  !BoolFromValidity(data.right.blink_validity);

            to.Left.PupilDiameterValid  = BoolFromValidity(data.left.pupil_diameter_validity);
            to.Left.PupilDiameter       = data.left.pupil_diameter_mm;
            to.Right.PupilDiameterValid = BoolFromValidity(data.right.pupil_diameter_validity);
            to.Right.PupilDiameter      = data.right.pupil_diameter_mm;

            to.Left.PositionGuideValid  = BoolFromValidity(data.left.position_guide_validity);
            to.Left.PositionGuide.x     = data.left.position_guide_xy.x;
            to.Left.PositionGuide.y     = data.left.position_guide_xy.y;
            to.Right.PositionGuideValid = BoolFromValidity(data.right.position_guide_validity);
            to.Right.PositionGuide.y    = data.right.position_guide_xy.y;
            to.Right.PositionGuide.x    = data.right.position_guide_xy.x;
        }
Example #2
0
        private static void OnAdvancedWearableData(ref tobii_wearable_advanced_data_t data, IntPtr userData)
        {
            var gch = GCHandle.FromIntPtr(userData);
            var t   = (WearableAdvancedDataCallback)gch.Target;

            t.Invoke(ref data);
        }
        private void OnAdvancedWearableData(ref tobii_wearable_advanced_data_t data)
        {
            lock (_lockAdvancedData)
            {
                var advancedData = _advancedInternalQueue.Count >= AdvancedDataQueueSize
                    ? _advancedInternalQueue.Dequeue()
                    : new TobiiXR_AdvancedEyeTrackingData();

                StreamEngineDataMapper.MapAdvancedData(advancedData, ref data,
                                                       _streamEngineTracker.ConvergenceDistanceSupported, _headToCenterEyeTranslation);
                _advancedInternalQueue.Enqueue(advancedData);
            }

            // Also fill in consumer api
            lock (_lockEyeTrackingDataLocal)
            {
                StreamEngineDataMapper.FromAdvancedData(_eyeTrackingDataLocalInternal, ref data,
                                                        _streamEngineTracker.ConvergenceDistanceSupported, _headToCenterEyeTranslation);
            }

            lock (_lockPositionGuideData)
            {
                StreamEngineDataMapper.FillPositionGuideData(ref _positionGuideData, ref data);
            }
        }
Example #4
0
        public static void FromAdvancedData(TobiiXR_EyeTrackingData to,
                                            ref tobii_wearable_advanced_data_t data, bool convergenceDistanceSupported, Vector3 headToCenterEyeTranslation)
        {
            FillGazeRayFrom(ref to.GazeRay, data.gaze_origin_combined_validity, data.gaze_origin_combined_mm_xyz, data.gaze_direction_combined_validity, data.gaze_direction_combined_normalized_xyz, headToCenterEyeTranslation);

            if (convergenceDistanceSupported)
            {
                to.ConvergenceDistance        = data.convergence_distance_mm / 1000f;
                to.ConvergenceDistanceIsValid = BoolFromValidity(data.convergence_distance_validity);
            }

            to.IsLeftEyeBlinking = data.left.blink == tobii_state_bool_t.TOBII_STATE_BOOL_TRUE ||
                                   !BoolFromValidity(data.left.blink_validity);
            to.IsRightEyeBlinking = data.right.blink == tobii_state_bool_t.TOBII_STATE_BOOL_TRUE ||
                                    !BoolFromValidity(data.right.blink_validity);
        }
Example #5
0
        private void OnAdvancedWearableData(ref tobii_wearable_advanced_data_t data)
        {
            var advancedData = _advancedData.Count >= AdvancedDataQueueSize
                ? _advancedData.Dequeue()
                : new TobiiXR_AdvancedEyeTrackingData();

            StreamEngineDataMapper.MapAdvancedData(advancedData, ref data,
                                                   _streamEngineTracker.ConvergenceDistanceSupported, CoordinatesHelper.GetHeadToCenterEyeTranslation());
            _advancedData.Enqueue(advancedData);

            // Keep a copy of latest received value
            EyeTrackingDataHelper.Copy(advancedData, _advancedEyeTrackingData);

            // Also fill in consumer api
            StreamEngineDataMapper.FromAdvancedData(_eyeTrackingDataLocal, ref data,
                                                    _streamEngineTracker.ConvergenceDistanceSupported, CoordinatesHelper.GetHeadToCenterEyeTranslation());
            _eyeTrackingDataLocal.Timestamp = Time.unscaledTime;
        }
 public static void FillPositionGuideData(ref PositionGuideData to,
                                          ref tobii_wearable_advanced_data_t data)
 {
     FillPositionGuideData(ref to, data.left.position_guide_xy, data.left.position_guide_validity,
                           data.right.position_guide_xy, data.right.position_guide_validity);
 }