ULocalPlayer::CalcSceneView() is virtual (at least in 4.16 engine), so now it may be narrowed to overloading this method:
static void UpdateProjectionMatrix(FSceneView* View, FMatrix PostProjectionMatrix)
{
View->ProjectionMatrixUnadjustedForRHI = View->ProjectionMatrixUnadjustedForRHI * PostProjectionMatrix;
FMatrix* pProjectionMatrix = (FMatrix*)(&View->ViewMatrices.GetProjectionMatrix());
*pProjectionMatrix = AdjustProjectionMatrixForRHI(View->ProjectionMatrixUnadjustedForRHI);
FMatrix* pViewProjectionMatrix = (FMatrix*)(&View->ViewMatrices.GetViewProjectionMatrix());
*pViewProjectionMatrix = View->ViewMatrices.GetViewMatrix() * View->ViewMatrices.GetProjectionMatrix();
FMatrix* pInvViewProjectionMatrix = (FMatrix*)&View->ViewMatrices.GetInvViewProjectionMatrix();
*pInvViewProjectionMatrix = View->ViewMatrices.GetViewProjectionMatrix().Inverse();
FMatrix TranslatedViewMatrix = FTranslationMatrix(-View->ViewMatrices.GetPreViewTranslation()) * View->ViewMatrices.GetViewMatrix();
FMatrix* pTranslatedViewProjectionMatrix = (FMatrix*)(&View->ViewMatrices.GetTranslatedViewProjectionMatrix());
*pTranslatedViewProjectionMatrix = TranslatedViewMatrix * View->ViewMatrices.GetProjectionMatrix();
FMatrix* pInvTranslatedViewProjectionMatrixx = (FMatrix*)(&View->ViewMatrices.GetInvTranslatedViewProjectionMatrix());
*pInvTranslatedViewProjectionMatrixx = View->ViewMatrices.GetTranslatedViewProjectionMatrix().Inverse();
View->ShadowViewMatrices = View->ViewMatrices;
GetViewFrustumBounds(View->ViewFrustum, View->ViewMatrices.GetViewProjectionMatrix(), false);
}
FSceneView* UMyLocalPlayer::CalcSceneView(class FSceneViewFamily* ViewFamily, FVector& OutViewLocation, FRotator& OutViewRotation, FViewport* Viewport, class FViewElementDrawer* ViewDrawer /*= NULL*/, EStereoscopicPass StereoPass /*= eSSP_FULL*/)
{
auto View = ULocalPlayer::CalcSceneView(ViewFamily, OutViewLocation, OutViewRotation, Viewport, ViewDrawer, StereoPass);
if (View)
{
FScaleMatrix scaleM(FVector(1.f, PixelAspect, 1.0f));
FTranslationMatrix shiftM(FVector(CCDOffset.X, CCDOffset.Y, 0.0f));
UpdateProjectionMatrix(View, scaleM * shiftM);
}
return View;
}