mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Interpolate camera roll, fix skybox in opengl
This commit is contained in:
parent
0c8a6ccf40
commit
7238a1be83
5 changed files with 38 additions and 46 deletions
|
|
@ -5803,8 +5803,7 @@ static void HWR_DrawSkyBackground(player_t *player)
|
|||
dometransform.scalez = 1;
|
||||
dometransform.fovxangle = fpov; // Tails
|
||||
dometransform.fovyangle = fpov; // Tails
|
||||
HWR_RollTransform(&dometransform,
|
||||
R_ViewRollAngle(player));
|
||||
HWR_RollTransform(&dometransform, viewroll);
|
||||
dometransform.splitscreen = r_splitscreen;
|
||||
|
||||
HWR_GetTexture(texturetranslation[skytexture]);
|
||||
|
|
@ -6096,7 +6095,7 @@ void HWR_RenderSkyboxView(player_t *player)
|
|||
|
||||
atransform.fovxangle = fpov; // Tails
|
||||
atransform.fovyangle = fpov; // Tails
|
||||
HWR_RollTransform(&atransform, R_ViewRollAngle(player));
|
||||
HWR_RollTransform(&atransform, viewroll);
|
||||
atransform.splitscreen = r_splitscreen;
|
||||
|
||||
gl_fovlud = (float)(1.0l/tan((double)(fpov*M_PIl/360l)));
|
||||
|
|
@ -6308,7 +6307,7 @@ void HWR_RenderPlayerView(void)
|
|||
|
||||
atransform.fovxangle = fpov; // Tails
|
||||
atransform.fovyangle = fpov; // Tails
|
||||
HWR_RollTransform(&atransform, R_ViewRollAngle(player));
|
||||
HWR_RollTransform(&atransform, viewroll);
|
||||
atransform.splitscreen = r_splitscreen;
|
||||
|
||||
gl_fovlud = (float)(1.0l/tan((double)(fpov*M_PIl/360l)));
|
||||
|
|
|
|||
26
src/r_fps.c
26
src/r_fps.c
|
|
@ -83,10 +83,7 @@ static void R_SetupFreelook(player_t *player, boolean skybox)
|
|||
|
||||
void R_InterpolateView(fixed_t frac)
|
||||
{
|
||||
boolean skybox = false;
|
||||
INT32 i;
|
||||
|
||||
if (FIXED_TO_FLOAT(frac) < 0)
|
||||
if (frac < 0)
|
||||
frac = 0;
|
||||
if (frac > FRACUNIT)
|
||||
frac = FRACUNIT;
|
||||
|
|
@ -97,31 +94,20 @@ void R_InterpolateView(fixed_t frac)
|
|||
|
||||
viewangle = oldview->angle + R_LerpAngle(oldview->angle, newview->angle, frac);
|
||||
aimingangle = oldview->aim + R_LerpAngle(oldview->aim, newview->aim, frac);
|
||||
viewroll = oldview->roll + R_LerpAngle(oldview->roll, newview->roll, frac);
|
||||
|
||||
viewsin = FINESINE(viewangle>>ANGLETOFINESHIFT);
|
||||
viewcos = FINECOSINE(viewangle>>ANGLETOFINESHIFT);
|
||||
|
||||
// this is gonna create some interesting visual errors for long distance teleports...
|
||||
// might want to recalculate the view sector every frame instead...
|
||||
viewplayer = newview->player;
|
||||
viewsector = R_PointInSubsector(viewx, viewy)->sector;
|
||||
|
||||
// well, this ain't pretty
|
||||
for (i = 0; i < MAXSPLITSCREENPLAYERS; i++)
|
||||
{
|
||||
if (newview == &skyview_new[i])
|
||||
{
|
||||
skybox = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
R_SetupFreelook(newview->player, skybox);
|
||||
R_SetupFreelook(newview->player, newview->sky);
|
||||
}
|
||||
|
||||
void R_UpdateViewInterpolation(void)
|
||||
{
|
||||
INT32 i;
|
||||
UINT8 i;
|
||||
|
||||
for (i = 0; i < MAXSPLITSCREENPLAYERS; i++)
|
||||
{
|
||||
|
|
@ -132,7 +118,7 @@ void R_UpdateViewInterpolation(void)
|
|||
|
||||
void R_SetViewContext(enum viewcontext_e _viewcontext)
|
||||
{
|
||||
INT32 i;
|
||||
UINT8 i = 0;
|
||||
|
||||
I_Assert(_viewcontext >= VIEWCONTEXT_PLAYER1
|
||||
&& _viewcontext <= VIEWCONTEXT_SKY4);
|
||||
|
|
@ -149,7 +135,7 @@ void R_SetViewContext(enum viewcontext_e _viewcontext)
|
|||
newview = &pview_new[i];
|
||||
break;
|
||||
case VIEWCONTEXT_SKY1:
|
||||
case VIEWCONTEXT_SKY2:
|
||||
case VIEWCONTEXT_SKY2:;
|
||||
case VIEWCONTEXT_SKY3:
|
||||
case VIEWCONTEXT_SKY4:
|
||||
i = viewcontext - VIEWCONTEXT_SKY1;
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ typedef struct {
|
|||
|
||||
angle_t angle;
|
||||
angle_t aim;
|
||||
angle_t roll;
|
||||
fixed_t cos;
|
||||
fixed_t sin;
|
||||
mobj_t *mobj;
|
||||
|
|
|
|||
48
src/r_main.c
48
src/r_main.c
|
|
@ -71,7 +71,7 @@ size_t framecount;
|
|||
size_t loopcount;
|
||||
|
||||
fixed_t viewx, viewy, viewz;
|
||||
angle_t viewangle, aimingangle;
|
||||
angle_t viewangle, aimingangle, viewroll;
|
||||
UINT8 viewssnum;
|
||||
fixed_t viewcos, viewsin;
|
||||
sector_t *viewsector;
|
||||
|
|
@ -656,7 +656,7 @@ void R_CheckViewMorph(int s)
|
|||
float fisheyemap[MAXVIDWIDTH/2 + 1];
|
||||
#endif
|
||||
|
||||
angle_t rollangle = R_ViewRollAngle(&players[displayplayers[s]]);
|
||||
angle_t rollangle = viewroll;
|
||||
#ifdef WOUGHMP_WOUGHMP
|
||||
fixed_t fisheye = cv_cam2_turnmultiplier.value; // temporary test value
|
||||
#endif
|
||||
|
|
@ -1206,8 +1206,8 @@ subsector_t *R_PointInSubsectorOrNull(fixed_t x, fixed_t y)
|
|||
void R_SetupFrame(player_t *player)
|
||||
{
|
||||
camera_t *thiscam = &camera[0];
|
||||
boolean chasecam = false;
|
||||
UINT8 i;
|
||||
boolean chasecam = (cv_chasecam[0].value != 0);
|
||||
UINT8 i = 0;
|
||||
|
||||
for (i = 0; i <= r_splitscreen; i++)
|
||||
{
|
||||
|
|
@ -1221,12 +1221,17 @@ void R_SetupFrame(player_t *player)
|
|||
}
|
||||
|
||||
if (i > r_splitscreen)
|
||||
return; // shouldn't be possible, but just in case
|
||||
{
|
||||
i = 0; // Shouldn't be possible, but just in case.
|
||||
thiscam = &camera[0];
|
||||
chasecam = (cv_chasecam[0].value != 0);
|
||||
R_SetViewContext(VIEWCONTEXT_PLAYER1);
|
||||
}
|
||||
|
||||
if (player->spectator) // no spectator chasecam
|
||||
chasecam = false; // force chasecam off
|
||||
|
||||
if (chasecam && !thiscam->chase)
|
||||
if (chasecam && (thiscam && !thiscam->chase))
|
||||
{
|
||||
P_ResetCamera(player, thiscam);
|
||||
thiscam->chase = true;
|
||||
|
|
@ -1270,6 +1275,7 @@ void R_SetupFrame(player_t *player)
|
|||
newview->aim = localaiming[i];
|
||||
}
|
||||
}
|
||||
newview->roll = R_ViewRollAngle(player);
|
||||
newview->z += quake.z;
|
||||
|
||||
newview->player = player;
|
||||
|
|
@ -1302,7 +1308,7 @@ void R_SetupFrame(player_t *player)
|
|||
// newview->sin = FINESINE(viewangle>>ANGLETOFINESHIFT);
|
||||
// newview->cos = FINECOSINE(viewangle>>ANGLETOFINESHIFT);
|
||||
|
||||
R_InterpolateView(cv_frameinterpolation.value == 1 ? rendertimefrac : FRACUNIT);
|
||||
R_InterpolateView(rendertimefrac);
|
||||
}
|
||||
|
||||
void R_SkyboxFrame(player_t *player)
|
||||
|
|
@ -1310,22 +1316,21 @@ void R_SkyboxFrame(player_t *player)
|
|||
camera_t *thiscam = &camera[0];
|
||||
UINT8 i = 0;
|
||||
|
||||
if (r_splitscreen)
|
||||
for (i = 0; i <= r_splitscreen; i++)
|
||||
{
|
||||
for (i = 1; i <= r_splitscreen; i++)
|
||||
if (player == &players[displayplayers[i]])
|
||||
{
|
||||
if (player == &players[displayplayers[i]])
|
||||
{
|
||||
thiscam = &camera[i];
|
||||
R_SetViewContext(VIEWCONTEXT_SKY1 + i);
|
||||
break;
|
||||
}
|
||||
thiscam = &camera[i];
|
||||
R_SetViewContext(VIEWCONTEXT_SKY1 + i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i > r_splitscreen)
|
||||
{
|
||||
i = 0;
|
||||
}
|
||||
if (i > r_splitscreen)
|
||||
{
|
||||
i = 0; // Shouldn't be possible, but just in case.
|
||||
thiscam = &camera[0];
|
||||
R_SetViewContext(VIEWCONTEXT_SKY1);
|
||||
}
|
||||
|
||||
// cut-away view stuff
|
||||
|
|
@ -1343,7 +1348,7 @@ void R_SkyboxFrame(player_t *player)
|
|||
newview->aim = player->awayviewaiming;
|
||||
newview->angle = player->awayviewmobj->angle;
|
||||
}
|
||||
else if (thiscam->chase)
|
||||
else if (thiscam && thiscam->chase)
|
||||
{
|
||||
newview->aim = thiscam->aiming;
|
||||
newview->angle = thiscam->angle;
|
||||
|
|
@ -1359,6 +1364,7 @@ void R_SkyboxFrame(player_t *player)
|
|||
}
|
||||
}
|
||||
newview->angle += r_viewmobj->angle;
|
||||
newview->roll = R_ViewRollAngle(player);
|
||||
|
||||
newview->player = player;
|
||||
|
||||
|
|
@ -1445,7 +1451,7 @@ void R_SkyboxFrame(player_t *player)
|
|||
// newview->sin = FINESINE(viewangle>>ANGLETOFINESHIFT);
|
||||
// newview->cos = FINECOSINE(viewangle>>ANGLETOFINESHIFT);
|
||||
|
||||
R_InterpolateView(cv_frameinterpolation.value == 1 ? rendertimefrac : FRACUNIT);
|
||||
R_InterpolateView(rendertimefrac);
|
||||
}
|
||||
|
||||
boolean R_ViewpointHasChasecam(player_t *player)
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ extern side_t *spawnsides;
|
|||
// POV data.
|
||||
//
|
||||
extern fixed_t viewx, viewy, viewz;
|
||||
extern angle_t viewangle, aimingangle;
|
||||
extern angle_t viewangle, aimingangle, viewroll;
|
||||
extern UINT8 viewssnum; // splitscreen view number
|
||||
extern boolean viewsky, skyVisible;
|
||||
extern boolean skyVisiblePerPlayer[MAXSPLITSCREENPLAYERS]; // saved values of skyVisible of each splitscreen player
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue