Пример #1
0
void UMyGameViewportClient::UpdateSceneView(FSceneView* const View)
{
    if (View == nullptr)
        return;

    View->ProjectionMatrixUnadjustedForRHI.M[0][0] *= 1.04;

    View->ViewMatrices.PreViewTranslation = -View->ViewMatrices.ViewOrigin;
    View->ViewMatrices.ProjMatrix = _AdjustProjectionMatrixForRHI(View->ProjectionMatrixUnadjustedForRHI);
    View->ViewProjectionMatrix = View->ViewMatrices.GetViewProjMatrix();
    View->InvViewProjectionMatrix = View->ViewMatrices.GetInvProjMatrix() * View->InvViewMatrix;
    FMatrix TranslatedViewMatrix = FTranslationMatrix(-View->ViewMatrices.PreViewTranslation) * View->ViewMatrices.ViewMatrix;
    View->ViewMatrices.TranslatedViewProjectionMatrix = TranslatedViewMatrix * View->ViewMatrices.ProjMatrix;
    View->ViewMatrices.InvTranslatedViewProjectionMatrix = View->ViewMatrices.TranslatedViewProjectionMatrix.Inverse();
    View->ShadowViewMatrices = View->ViewMatrices;

    //View->InvDeviceZToWorldZTransform = CreateInvDeviceZToWorldZTransform(View->ProjectionMatrixUnadjustedForRHI);

    GetViewFrustumBounds(View->ViewFrustum, View->ViewProjectionMatrix, false);
}
static void UpdateProjectionMatrix(FSceneView* View, FMatrix OffAxisMatrix)
{
	View->ProjectionMatrixUnadjustedForRHI = OffAxisMatrix;

	FVector viewOrigin(0.0f, 0.0f, View->ProjectionMatrixUnadjustedForRHI.M[3][3]);

	View->ViewMatrices.ViewMatrix.SetOrigin(View->ViewMatrices.ViewMatrix.GetOrigin() - viewOrigin);

	View->InvViewMatrix = View->ViewMatrices.ViewMatrix.Inverse();
	View->ViewMatrices.ViewOrigin += View->InvViewMatrix.TransformPosition(-viewOrigin);
	View->ViewMatrices.PreViewTranslation = -View->ViewMatrices.ViewOrigin;
	View->ViewMatrices.ProjMatrix = _AdjustProjectionMatrixForRHI(View->ProjectionMatrixUnadjustedForRHI);
	View->ViewProjectionMatrix = View->ViewMatrices.GetViewProjMatrix();
	View->InvViewProjectionMatrix = View->ViewMatrices.GetInvProjMatrix() * View->InvViewMatrix;
	FMatrix TranslatedViewMatrix = FTranslationMatrix(-View->ViewMatrices.PreViewTranslation) * View->ViewMatrices.ViewMatrix;
	View->ViewMatrices.TranslatedViewProjectionMatrix = TranslatedViewMatrix * View->ViewMatrices.ProjMatrix;
	View->ViewMatrices.InvTranslatedViewProjectionMatrix = View->ViewMatrices.TranslatedViewProjectionMatrix.Inverse();
	View->ShadowViewMatrices = View->ViewMatrices;

	//View->InvDeviceZToWorldZTransform = CreateInvDeviceZToWorldZTransform(View->ProjectionMatrixUnadjustedForRHI);

	GetViewFrustumBounds(View->ViewFrustum, View->ViewProjectionMatrix, false);
}