diff options
Diffstat (limited to 'src/render/Draw.cpp')
-rw-r--r-- | src/render/Draw.cpp | 65 |
1 files changed, 19 insertions, 46 deletions
diff --git a/src/render/Draw.cpp b/src/render/Draw.cpp index f1b2147f..90875299 100644 --- a/src/render/Draw.cpp +++ b/src/render/Draw.cpp @@ -16,70 +16,43 @@ uint8 &CDraw::FadeRed = *(uint8*)0x95CD90; uint8 &CDraw::FadeGreen = *(uint8*)0x95CD71; uint8 &CDraw::FadeBlue = *(uint8*)0x95CD53; -void CDraw::CalculateAspectRatio() +void +CDraw::CalculateAspectRatio() { SetScreenMult(DEFAULT_SCALE); -#ifndef HOR_PLUS - if (FrontEndMenuManager.m_PrefsUseWideScreen) - ms_fAspectRatio = 16.0f / 9.0f; + if(FrontEndMenuManager.m_PrefsUseWideScreen) + ms_fAspectRatio = 16.0f/9.0f; else - ms_fAspectRatio = 4.0f / 3.0f; -#else - switch (FrontEndMenuManager.m_PrefsUseWideScreen) { - case AR_AUTO: - ms_fAspectRatio = (float)SCREEN_WIDTH / (float)SCREEN_HEIGHT; - return; - case AR_3_2: - ms_fAspectRatio = 3.0f / 2.0f; - return; - case AR_4_3: - ms_fAspectRatio = 4.0f / 3.0f; - return; - case AR_5_3: - ms_fAspectRatio = 5.0f / 3.0f; - return; - case AR_5_4: - ms_fAspectRatio = 5.0f / 4.0f; - return; - case AR_15_9: - ms_fAspectRatio = 15.0f / 9.0f; - return; - case AR_16_9: - ms_fAspectRatio = 16.0f / 9.0f; - return; - case AR_16_10: - ms_fAspectRatio = 16.0f / 10.0f; - return; - case AR_64_27: - ms_fAspectRatio = 64.0f / 27.0f; - return; - }; - -#endif + ms_fAspectRatio = 4.0f/3.0f; } -float -HorToVert(float hfov) +static float hFov2vFov(float hfov) { - float vfov = atan(tan(DEGTORAD(hfov) / 2) / (4.0 / 3.0)) * 2; - return RADTODEG(hfov = atan(tan(vfov / 2) * CDraw::GetAspectRatio()) * 2); + float w = SCREENW; + float h = SCREENH; + + // => tan(hFOV/2) = tan(vFOV/2)*aspectRatio + // => tan(vFOV/2) = tan(hFOV/2)/aspectRatio + float ar1 = 4.0/3.0; + float ar2 = w/h; + hfov = DEGTORAD(hfov); + float vfov = atan(tan(hfov/2) / ar1) *2; + hfov = atan(tan(vfov/2) * ar2) *2; + return RADTODEG(hfov); } void CDraw::SetFOV(float fov) { -#ifndef HOR_PLUS +// TODO: fix FOV here or somewhere else? +// ms_fFOV = hFov2vFov(fov); ms_fFOV = fov; -#else - ms_fFOV = HorToVert(fov); -#endif } STARTPATCHES InjectHook(0x4FE7B0, CDraw::SetFOV, PATCH_JUMP); - // Some patches to fix aiming offset on "CCamera::Find3rdPersonCamTargetVector". Nop(0x46B618, 2); Patch<float>(0x5F0A64, 1.3333334f); ENDPATCHES |