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; } }
private void OnWearableData(ref tobii_wearable_data_t data) { CopyEyeTrackingData(LocalLatestData, ref data); ReceivedDataThisFrame = true; }
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); }
protected virtual void WearableCallback(ref tobii_wearable_data_t data) { }