protected void ComputeViewPortRect(int leftCameraViewPortHeight, int leftCameraViewPortWidth) { float num = CameraConfigurationUtility.ExtractVerticalCameraFoV(this.mPrimaryCamera.projectionMatrix.inverse) * 0.0174532924f; float num2 = (float)(Math.Tan((double)(CameraDevice.Instance.GetCameraFieldOfViewRads().y / 2f)) / Math.Tan((double)(num / 2f))); float num3 = (float)leftCameraViewPortHeight * num2; CameraDevice.VideoModeData videoMode = CameraDevice.Instance.GetVideoMode(this.mCameraDeviceMode); ScreenOrientation surfaceOrientation = SurfaceUtilities.GetSurfaceOrientation(); float num4; if (surfaceOrientation == ScreenOrientation.Landscape || surfaceOrientation == ScreenOrientation.LandscapeLeft || surfaceOrientation == ScreenOrientation.LandscapeRight) { num4 = num3 * (float)videoMode.width / (float)videoMode.height; } else { num4 = num3 * (float)videoMode.height / (float)videoMode.width; } int num5 = (leftCameraViewPortWidth - (int)num4) / 2; int num6 = (leftCameraViewPortHeight - (int)num3) / 2; this.mVideoBackgroundViewportRect = new Rect((float)num5, (float)num6, (float)((int)num4), (float)((int)num3)); if (base.IsVideoBackgroundEnabled()) { this.mVideoBackgroundBehaviours[this.mPrimaryCamera].ApplyStereoDepthToMatrices(); this.mVideoBackgroundBehaviours[this.mSecondaryCamera].ApplyStereoDepthToMatrices(); } }
public void ApplyCorrectedProjectionMatrix(Matrix4x4 projectionMatrix, bool primaryCamera) { Matrix4x4 inverse = projectionMatrix.inverse; if (primaryCamera) { this.mExternallySetLeftMatrix = projectionMatrix; CameraConfigurationUtility.ExtractCameraClippingPlanes(inverse, out this.mNewLeftNearClipPlane, out this.mNewLeftFarClipPlane); this.mNewLeftVerticalVirtualFoV = CameraConfigurationUtility.ExtractVerticalCameraFoV(inverse); this.mNewLeftHorizontalVirtualFoV = CameraConfigurationUtility.ExtractHorizontalCameraFoV(inverse); } else { this.mExternallySetRightMatrix = projectionMatrix; CameraConfigurationUtility.ExtractCameraClippingPlanes(inverse, out this.mNewRightNearClipPlane, out this.mNewRightFarClipPlane); this.mNewRightVerticalVirtualFoV = CameraConfigurationUtility.ExtractVerticalCameraFoV(inverse); this.mNewRightHorizontalVirtualFoV = CameraConfigurationUtility.ExtractHorizontalCameraFoV(inverse); } if (this.CameraParameterChanged()) { ScreenOrientation screenOrientation; this.CheckForSurfaceChanges(out screenOrientation); } this.mPrimaryCamera.projectionMatrix = this.mLastAppliedLeftProjection; this.mSecondaryCamera.projectionMatrix = this.mLastAppliedRightProjection; if (base.IsVideoBackgroundEnabled()) { this.mVideoBackgroundBehaviours[this.mPrimaryCamera].ApplyStereoDepthToMatrices(); this.mVideoBackgroundBehaviours[this.mSecondaryCamera].ApplyStereoDepthToMatrices(); } }
public static Matrix4x4 ScalePerspectiveProjectionMatrix(Matrix4x4 inputMatrix, float targetVerticalFoVDeg, float targetHorizontalFoVDeg) { Matrix4x4 result = inputMatrix; float num = targetVerticalFoVDeg * 0.0174532924f; float num2 = targetHorizontalFoVDeg * 0.0174532924f; double arg_3C_0 = (double)(CameraConfigurationUtility.ExtractVerticalCameraFoV(inputMatrix.inverse) * 0.0174532924f); float num3 = CameraConfigurationUtility.ExtractHorizontalCameraFoV(inputMatrix.inverse) * 0.0174532924f; float num4 = (float)(Math.Tan(arg_3C_0 / (double)2f) / Math.Tan((double)(num / 2f))); float num5 = (float)(Math.Tan((double)(num3 / 2f)) / Math.Tan((double)(num2 / 2f))); result[0] = result[0] * num5; result[8] = result[8] * num5; result[5] = result[5] * num4; result[9] = result[9] * num4; return(result); }