/// <summary> /// Get the intrinsic calibration parameters for a given camera, this also aligns the camera intrinsics based /// on device orientation. /// /// For example, if the device orientation is portrait and camera intrinsics is in /// landscape. This function will inverse the intrinsic x and y, and report intrinsics in portrait mode. /// /// The intrinsics are as specified by the TangoCameraIntrinsics struct and are accessed via the API. /// </summary> /// <param name="cameraId">The camera ID to retrieve the calibration intrinsics for.</param> /// <param name="alignedIntrinsics"> /// A TangoCameraIntrinsics filled with calibration intrinsics for the camera, this intrinsics is also /// aligned with device orientation. /// </param> public static void GetDeviceOrientationAlignedIntrinsics(TangoEnums.TangoCameraId cameraId, TangoCameraIntrinsics alignedIntrinsics) { TangoCameraIntrinsics intrinsics = new TangoCameraIntrinsics(); GetIntrinsics(TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR, intrinsics); float intrinsicsRatio = (float)intrinsics.width / (float)intrinsics.height; Tango.OrientationManager.Rotation rotation = TangoSupport.RotateFromAToB( AndroidHelper.GetDisplayRotation(), AndroidHelper.GetColorCameraRotation()); switch (rotation) { case Tango.OrientationManager.Rotation.ROTATION_90: alignedIntrinsics.cx = intrinsics.cy; alignedIntrinsics.cy = intrinsics.width - intrinsics.cx; alignedIntrinsics.fx = intrinsics.fy; alignedIntrinsics.fy = intrinsics.fx; alignedIntrinsics.width = intrinsics.height; alignedIntrinsics.height = intrinsics.width; break; case Tango.OrientationManager.Rotation.ROTATION_180: alignedIntrinsics.cx = intrinsics.width - intrinsics.cx; alignedIntrinsics.cy = intrinsics.height - intrinsics.cy; alignedIntrinsics.fx = intrinsics.fx; alignedIntrinsics.fy = intrinsics.fy; alignedIntrinsics.width = intrinsics.width; alignedIntrinsics.height = intrinsics.height; break; case Tango.OrientationManager.Rotation.ROTATION_270: alignedIntrinsics.cx = intrinsics.height - intrinsics.cy; alignedIntrinsics.cy = intrinsics.cx; alignedIntrinsics.fx = intrinsics.fy; alignedIntrinsics.fy = intrinsics.fx; alignedIntrinsics.width = intrinsics.height; alignedIntrinsics.height = intrinsics.width; break; default: alignedIntrinsics.cx = intrinsics.cx; alignedIntrinsics.cy = intrinsics.cy; alignedIntrinsics.fx = intrinsics.fx; alignedIntrinsics.fy = intrinsics.fy; alignedIntrinsics.width = intrinsics.width; alignedIntrinsics.height = intrinsics.height; break; } alignedIntrinsics.distortion0 = intrinsics.distortion0; alignedIntrinsics.distortion1 = intrinsics.distortion1; alignedIntrinsics.distortion2 = intrinsics.distortion2; alignedIntrinsics.distortion3 = intrinsics.distortion3; alignedIntrinsics.distortion4 = intrinsics.distortion4; alignedIntrinsics.camera_id = intrinsics.camera_id; alignedIntrinsics.calibration_type = intrinsics.calibration_type; }
/// <summary> /// This is called when successfully connected to the Tango service. /// </summary> public void OnTangoServiceConnected() { // Disable if (!m_tangoApplication.EnableVideoOverlay) { IsRendering = false; return; } CommandBuffer buf = VideoOverlayProvider.CreateARScreenCommandBuffer(); m_camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, buf); m_camera.AddCommandBuffer(CameraEvent.BeforeGBuffer, buf); _SetRenderAndCamera(AndroidHelper.GetDisplayRotation(), AndroidHelper.GetColorCameraRotation()); IsRendering = true; }
/// <summary> /// This is called when successfully connected to the Tango service. /// </summary> public void OnTangoServiceConnected() { _SetRenderAndCamera(AndroidHelper.GetDisplayRotation(), AndroidHelper.GetColorCameraRotation()); }
public Tango.OrientationManager.Rotation GetColorCameraRotation() { return(AndroidHelper.GetColorCameraRotation()); }