示例#1
0
 protected override void WearableCallback(ref tobii_wearable_data_t data)
 {
     if (data.gaze_direction_combined_validity == tobii_validity_t.TOBII_VALIDITY_VALID)
     {
         var gaze = data.gaze_direction_combined_normalized_xyz;
         X = gaze.x;
         Y = gaze.y;
         Z = gaze.z;
     }
 }
示例#2
0
 private void OnWearableData(ref tobii_wearable_data_t data)
 {
     CopyEyeTrackingData(LocalLatestData, ref data);
     ReceivedDataThisFrame = true;
 }
示例#3
0
        private static void CopyEyeTrackingData(TobiiXR_EyeTrackingData latestDataLocalSpace, ref tobii_wearable_data_t data)
        {
            latestDataLocalSpace.CombinedRay.IsValid     = data.gaze_direction_combined_validity == tobii_validity_t.TOBII_VALIDITY_VALID && data.gaze_origin_combined_validity == tobii_validity_t.TOBII_VALIDITY_VALID;
            latestDataLocalSpace.CombinedRay.Origin.x    = data.gaze_origin_combined_mm_xyz.x * -1 / 1000f;
            latestDataLocalSpace.CombinedRay.Origin.y    = data.gaze_origin_combined_mm_xyz.y / 1000f;
            latestDataLocalSpace.CombinedRay.Origin.z    = data.gaze_origin_combined_mm_xyz.z / 1000f;
            latestDataLocalSpace.CombinedRay.Direction.x = data.gaze_direction_combined_normalized_xyz.x * -1;
            latestDataLocalSpace.CombinedRay.Direction.y = data.gaze_direction_combined_normalized_xyz.y;
            latestDataLocalSpace.CombinedRay.Direction.z = data.gaze_direction_combined_normalized_xyz.z;

            CopyIndividualEyeData(ref latestDataLocalSpace.Left, ref data.left);
            CopyIndividualEyeData(ref latestDataLocalSpace.Right, ref data.right);
        }
        private static void CopyEyeTrackingData(TobiiXR_EyeTrackingData latestDataLocalSpace, ref tobii_wearable_data_t data)
        {
            latestDataLocalSpace.GazeRay.IsValid     = data.gaze_direction_combined_validity == tobii_validity_t.TOBII_VALIDITY_VALID && data.gaze_origin_combined_validity == tobii_validity_t.TOBII_VALIDITY_VALID;
            latestDataLocalSpace.GazeRay.Origin.x    = data.gaze_origin_combined_mm_xyz.x * -1 / 1000f;
            latestDataLocalSpace.GazeRay.Origin.y    = data.gaze_origin_combined_mm_xyz.y / 1000f;
            latestDataLocalSpace.GazeRay.Origin.z    = data.gaze_origin_combined_mm_xyz.z / 1000f;
            latestDataLocalSpace.GazeRay.Direction.x = data.gaze_direction_combined_normalized_xyz.x * -1;
            latestDataLocalSpace.GazeRay.Direction.y = data.gaze_direction_combined_normalized_xyz.y;
            latestDataLocalSpace.GazeRay.Direction.z = data.gaze_direction_combined_normalized_xyz.z;

            if (_convergenceDistanceSupported)
            {
                latestDataLocalSpace.ConvergenceDistance        = data.convergence_distance_mm / 1000f;
                latestDataLocalSpace.ConvergenceDistanceIsValid = data.convergence_distance_validity == tobii_validity_t.TOBII_VALIDITY_VALID;
            }
            else
            {
                if (data.left.gaze_direction_validity == tobii_validity_t.TOBII_VALIDITY_INVALID || data.right.gaze_direction_validity == tobii_validity_t.TOBII_VALIDITY_INVALID)
                {
                    latestDataLocalSpace.ConvergenceDistanceIsValid = false;
                }
                else
                {
                    var convergenceDistance_mm = Convergence.CalculateDistance(
                        data.left.gaze_origin_mm_xyz.ToVector3(),
                        data.left.gaze_direction_normalized_xyz.ToVector3(),
                        data.right.gaze_origin_mm_xyz.ToVector3(),
                        data.right.gaze_direction_normalized_xyz.ToVector3()
                        );
                    latestDataLocalSpace.ConvergenceDistance        = convergenceDistance_mm / 1000f;
                    latestDataLocalSpace.ConvergenceDistanceIsValid = true;
                }
            }

            latestDataLocalSpace.IsLeftEyeBlinking  = data.left.eye_openness_validity == tobii_validity_t.TOBII_VALIDITY_INVALID || Mathf.Approximately(data.left.eye_openness, 0f);
            latestDataLocalSpace.IsRightEyeBlinking = data.right.eye_openness_validity == tobii_validity_t.TOBII_VALIDITY_INVALID || Mathf.Approximately(data.right.eye_openness, 0f);
        }
示例#5
0
 protected virtual void WearableCallback(ref tobii_wearable_data_t data)
 {
 }