Reduce number of multiply ops per frame and increase x-axis clipper range for orthographic projection.

This commit is contained in:
Dileep V. Reddy 2024-10-26 08:22:43 -06:00 committed by Rachael Alexanderson
parent 8b73332366
commit 2ba57b5068
3 changed files with 7 additions and 2 deletions

View file

@ -476,8 +476,8 @@ angle_t Clipper::PointToPseudoOrthoAngle(double x, double y)
{
angle_t af = viewpoint->FrustAngle;
double xproj = disp.XY().Length() * deltaangle(disp.Angle(), viewpoint->Angles.Yaw).Sin();
xproj *= viewpoint->ScreenProj;
if (fabs(xproj) < r_viewwindow.WidescreenRatio*1.13) // 2.0)
xproj *= viewpoint->ScreenProjX;
if (fabs(xproj) < 1.13)
{
return AngleToPseudo( viewpoint->Angles.Yaw.BAMs() - xproj * 0.5 * af );
}

View file

@ -167,6 +167,7 @@ FRenderViewpoint::FRenderViewpoint()
sector = nullptr;
FieldOfView = DAngle::fromDeg(90.); // Angles in the SCREENWIDTH wide window
ScreenProj = 0.0;
ScreenProjX = 0.0;
TicFrac = 0.0;
FrameTime = 0;
extralight = 0;
@ -704,7 +705,10 @@ void FRenderViewpoint::SetViewAngle(const FViewWindow& viewWindow)
HWAngles.Yaw = FAngle::fromDeg(270.0 - Angles.Yaw.Degrees());
if (IsOrtho() && (camera->ViewPos->Offset.XY().Length() > 0.0))
{
ScreenProj = 1.34396 / camera->ViewPos->Offset.Length() / tan (FieldOfView.Radians()*0.5); // [DVR] Estimated. +/-1 should be top/bottom of screen.
ScreenProjX = ScreenProj * 0.5 / viewWindow.WidescreenRatio;
}
}

View file

@ -43,6 +43,7 @@ struct FRenderViewpoint
sector_t *sector; // [RH] keep track of sector viewing from
DAngle FieldOfView; // current field of view
double ScreenProj; // Screen projection factor for orthographic projection
double ScreenProjX; // Same for X-axis (screenspace)
double TicFrac; // fraction of tic for interpolation
uint32_t FrameTime; // current frame's time in tics.