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); }