void OnDisable() { ArMarkers.Remove(this); if (ArMarkerTracker.Instance) { ArMarkerTracker.Instance.NewPoseDetected -= OnArPose; } }
void OnEnable() { ArMarkers.Add(this); if (ArMarkerTracker.Instance) { ArMarkerTracker.Instance.NewPoseDetected += OnArPose; } else { Debug.LogWarning("No ArMarkerTracker found!"); } }
private void PerformCalibration() { var validMarkers = ArMarkers.GetAll().Where(m => IsArMarkerValid(m)); if (validMarkers.Count() > 0) { var camPositions = validMarkers.Select(m => m.DetectedCameraPosition); var avgCamPosition = MathUtility.Average(camPositions); //var optitrackPose = OptitrackListener.GetPose(Globals.OptitrackHmdName); //Debug.Assert(optitrackPose != null, "OptitrackPose shall not be null, since we checked for that in ShouldCalibrate??"); var hmdRotation = VRListener.CurrentRotation; var hmdPosition = VRListener.CurrentPosition; CalibrationParams.PositionOffset = Quaternion.Inverse(hmdRotation) * (avgCamPosition - hmdPosition); var camRotations = validMarkers.Select(m => m.DetectedCameraRotation); var avgCamRotation = MathUtility.Average(camRotations); CalibrationParams.RotationOffset = Quaternion.Inverse(hmdRotation) * avgCamRotation; } }