internal static void ApplyObliqueNearClipPlane( ref ProbeSettings settings, // In Parameter ref ProbeCapturePositionSettings probePosition, // In parameter ref CameraSettings cameraSettings, // InOut parameter ref CameraPositionSettings cameraPosition // InOut parameter ) { var proxyMatrix = Matrix4x4.TRS(probePosition.proxyPosition, probePosition.proxyRotation, Vector3.one); var mirrorPosition = proxyMatrix.MultiplyPoint(settings.proxySettings.mirrorPositionProxySpace); var mirrorForward = proxyMatrix.MultiplyVector(settings.proxySettings.mirrorRotationProxySpace * Vector3.forward); var clipPlaneCameraSpace = GeometryUtils.CameraSpacePlane( cameraPosition.worldToCameraMatrix, mirrorPosition, mirrorForward ); var sourceProjection = Matrix4x4.Perspective( HDUtils.ClampFOV(cameraSettings.frustum.fieldOfView), cameraSettings.frustum.aspect, cameraSettings.frustum.nearClipPlane, cameraSettings.frustum.farClipPlane ); var obliqueProjection = GeometryUtils.CalculateObliqueMatrix( sourceProjection, clipPlaneCameraSpace ); cameraSettings.frustum.mode = CameraSettings.Frustum.Mode.UseProjectionMatrixField; cameraSettings.frustum.projectionMatrix = obliqueProjection; }
/// <summary>Compute the projection matrix based on the mode and settings provided.</summary> /// <returns>The projection matrix.</returns> public Matrix4x4 ComputeProjectionMatrix() { return(Matrix4x4.Perspective(HDUtils.ClampFOV(fieldOfView), aspect, nearClipPlane, farClipPlane)); }