diff --git a/doomsday/client/include/render/rend_main.h b/doomsday/client/include/render/rend_main.h index b9c4174e7f..eaea634866 100644 --- a/doomsday/client/include/render/rend_main.h +++ b/doomsday/client/include/render/rend_main.h @@ -42,7 +42,7 @@ class Map; #define SHADOW_SURFACE_LUMINOSITY_ATTRIBUTION_MIN (.05f) DENG_EXTERN_C coord_t vOrigin[3]; -DENG_EXTERN_C float vang, vpitch, fieldOfView, yfov; +DENG_EXTERN_C float vang, vpitch, yfov; DENG_EXTERN_C float viewsidex, viewsidey; DENG_EXTERN_C float fogColor[4]; @@ -91,6 +91,8 @@ void Rend_Shutdown(); void Rend_Reset(); void Rend_RenderMap(de::Map &map); +float Rend_FieldOfView(); + /** * @param useAngles @c true= Apply viewer angle rotation. */ diff --git a/doomsday/client/src/gl/gl_main.cpp b/doomsday/client/src/gl/gl_main.cpp index 756b5d619b..0f65e7d831 100644 --- a/doomsday/client/src/gl/gl_main.cpp +++ b/doomsday/client/src/gl/gl_main.cpp @@ -588,7 +588,7 @@ void GL_ProjectionMatrix() glMatrixMode(GL_PROJECTION); glLoadIdentity(); - gluPerspective(yfov = fieldOfView / aspect, aspect, glNearClip, glFarClip); + gluPerspective(yfov = Rend_FieldOfView() / aspect, aspect, glNearClip, glFarClip); // We'd like to have a left-handed coordinate system. glScalef(1, 1, -1); diff --git a/doomsday/client/src/network/net_demo.cpp b/doomsday/client/src/network/net_demo.cpp index 601f7ae903..09215f3cfa 100644 --- a/doomsday/client/src/network/net_demo.cpp +++ b/doomsday/client/src/network/net_demo.cpp @@ -349,7 +349,7 @@ boolean Demo_BeginPlayback(const char* fileName) lookdirDelta = 0; demoFrameZ = 1; demoZ = 0; - startFOV = fieldOfView; + startFOV = 95; //Rend_FieldOfView(); demoStartTic = DEMOTIC; memset(posDelta, 0, sizeof(posDelta)); // Start counting frames from here. @@ -375,7 +375,7 @@ void Demo_StopPlayback(void) playback = false; lzClose(playdemo); playdemo = 0; - fieldOfView = startFOV; + //fieldOfView = startFOV; Net_StopGame(); /* @@ -455,7 +455,7 @@ void Demo_WriteLocalCamera(int plrNum) mobj_t* mo = ddpl->mo; fixed_t x, y, z; byte flags; - boolean incfov = (writeInfo[plrNum].fov != fieldOfView); + boolean incfov = false; //(writeInfo[plrNum].fov != fieldOfView); const viewdata_t* viewData = R_ViewData(plrNum); if(!mo) @@ -487,11 +487,11 @@ void Demo_WriteLocalCamera(int plrNum) Writer_WriteInt16(msgWriter, mo->angle /*ddpl->clAngle*/ >> 16); /* $unifiedangles */ Writer_WriteInt16(msgWriter, ddpl->lookDir / 110 * DDMAXSHORT /* $unifiedangles */); // Field of view is optional. - if(incfov) + /*if(incfov) { Writer_WriteInt16(msgWriter, fieldOfView / 180 * DDMAXSHORT); writeInfo[plrNum].fov = fieldOfView; - } + }*/ Msg_End(); Net_SendBuffer(plrNum, SPF_DONT_SEND); } @@ -544,8 +544,10 @@ void Demo_ReadLocalCamera(void) dlook = Reader_ReadInt16(msgReader) * 110.0f / DDMAXSHORT; // FOV included? + /* if(flags & LCAMF_FOV) fieldOfView = Reader_ReadInt16(msgReader) * 180.0f / DDMAXSHORT; + */ if(intertics == 1 || demoFrameZ == 1) { diff --git a/doomsday/client/src/render/r_main.cpp b/doomsday/client/src/render/r_main.cpp index 91db73be25..fa72a3db14 100644 --- a/doomsday/client/src/render/r_main.cpp +++ b/doomsday/client/src/render/r_main.cpp @@ -1024,8 +1024,8 @@ void R_SetupPlayerSprites() spr->data.model.pitchAngleOffset = (32 - psp->pos[VY]) * weaponOffsetScale * weaponOffsetScaleY / 1000.0f; // Is the FOV shift in effect? - if(weaponFOVShift > 0 && fieldOfView > 90) - spr->data.model.pitchAngleOffset -= weaponFOVShift * (fieldOfView - 90) / 90; + if(weaponFOVShift > 0 && Rend_FieldOfView() > 90) + spr->data.model.pitchAngleOffset -= weaponFOVShift * (Rend_FieldOfView() - 90) / 90; // Real rotation angles. spr->data.model.yaw = viewData->current.angle / (float) ANGLE_MAX *-360 + spr->data.model.yawAngleOffset + 90; @@ -1130,7 +1130,7 @@ DENG_EXTERN_C void R_RenderPlayerView(int num) GL_DrawFilter(); } - Vignette_Render(&vd->window, fieldOfView); + Vignette_Render(&vd->window, Rend_FieldOfView()); // Now we can show the viewPlayer's mobj again. if(!(player->shared.flags & DDPF_CHASECAM)) diff --git a/doomsday/client/src/render/rend_main.cpp b/doomsday/client/src/render/rend_main.cpp index d4b0e961d2..52666c97ca 100644 --- a/doomsday/client/src/render/rend_main.cpp +++ b/doomsday/client/src/render/rend_main.cpp @@ -323,6 +323,12 @@ void Rend_Reset() } } +float Rend_FieldOfView() +{ + float const widescreenCorrection = float(viewpw)/float(viewph) / (4.f / 3.f); + return widescreenCorrection * fieldOfView; +} + void Rend_ModelViewMatrix(bool useAngles) { viewdata_t const *viewData = R_ViewData(viewPlayer - ddPlayers); @@ -2559,7 +2565,7 @@ void Rend_RenderMap(Map &map) if(vpitch <= 90 - yfov / 2 && vpitch >= -90 + yfov / 2) { float a = de::abs(vpitch) / (90 - yfov / 2); - binangle_t startAngle = binangle_t(BANG_45 * fieldOfView / 90) * (1 + a); + binangle_t startAngle = binangle_t(BANG_45 * Rend_FieldOfView() / 90) * (1 + a); binangle_t angLen = BANG_180 - startAngle; binangle_t viewside = (viewData->current.angle >> (32 - BAMS_BITS)) + startAngle; diff --git a/doomsday/client/src/render/rend_model.cpp b/doomsday/client/src/render/rend_model.cpp index fe371f952d..ca9baf6981 100644 --- a/doomsday/client/src/render/rend_model.cpp +++ b/doomsday/client/src/render/rend_model.cpp @@ -1009,7 +1009,7 @@ static void Mod_RenderSubModel(uint number, rendmodelparams_t const *parm) // Determine the suitable LOD. if(mdl->info.numLODs > 1 && rend_model_lod != 0) { - float lodFactor = rend_model_lod * DENG_WINDOW->width() / 640.0f / (fieldOfView / 90.0f); + float lodFactor = rend_model_lod * DENG_WINDOW->width() / 640.0f / (Rend_FieldOfView() / 90.0f); if(!FEQUAL(lodFactor, 0)) lodFactor = 1 / lodFactor;