- move r_utility globals into r_viewpoint and r_viewwindow
- change r_utility functions to only work on FRenderViewpoint and FViewWindow
This commit is contained in:
parent
28aba3469d
commit
0c9014b984
75 changed files with 817 additions and 839 deletions
|
|
@ -135,13 +135,13 @@ TriMatrix TriMatrix::frustum(float left, float right, float bottom, float top, f
|
|||
TriMatrix TriMatrix::worldToView()
|
||||
{
|
||||
TriMatrix m = null();
|
||||
m.matrix[0 + 0 * 4] = (float)ViewSin;
|
||||
m.matrix[0 + 1 * 4] = (float)-ViewCos;
|
||||
m.matrix[0 + 0 * 4] = (float)r_viewpoint.Sin;
|
||||
m.matrix[0 + 1 * 4] = (float)-r_viewpoint.Cos;
|
||||
m.matrix[1 + 2 * 4] = 1.0f;
|
||||
m.matrix[2 + 0 * 4] = (float)-ViewCos;
|
||||
m.matrix[2 + 1 * 4] = (float)-ViewSin;
|
||||
m.matrix[2 + 0 * 4] = (float)-r_viewpoint.Cos;
|
||||
m.matrix[2 + 1 * 4] = (float)-r_viewpoint.Sin;
|
||||
m.matrix[3 + 3 * 4] = 1.0f;
|
||||
return m * translate((float)-ViewPos.X, (float)-ViewPos.Y, (float)-ViewPos.Z);
|
||||
return m * translate((float)-r_viewpoint.Pos.X, (float)-r_viewpoint.Pos.Y, (float)-r_viewpoint.Pos.Z);
|
||||
}
|
||||
|
||||
TriMatrix TriMatrix::viewToClip()
|
||||
|
|
@ -149,7 +149,7 @@ TriMatrix TriMatrix::viewToClip()
|
|||
auto viewport = swrenderer::RenderViewport::Instance();
|
||||
float near = 5.0f;
|
||||
float far = 65536.0f;
|
||||
float width = (float)(FocalTangent * near);
|
||||
float width = (float)(r_viewwindow.FocalTangent * near);
|
||||
float top = (float)(viewport->CenterY / viewport->InvZtoScale * near);
|
||||
float bottom = (float)(top - viewheight / viewport->InvZtoScale * near);
|
||||
return frustum(-width, width, bottom, top, near, far);
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@
|
|||
EXTERN_CVAR(Bool, r_shadercolormaps)
|
||||
EXTERN_CVAR(Int, screenblocks)
|
||||
void InitGLRMapinfoData();
|
||||
extern bool r_showviewer;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
|
@ -89,8 +88,8 @@ void PolyRenderer::RenderViewToCanvas(AActor *actor, DCanvas *canvas, int x, int
|
|||
|
||||
viewwidth = width;
|
||||
viewport->RenderTarget = canvas;
|
||||
R_SetWindow(12, width, height, height, true);
|
||||
viewport->SetViewport(width, height, WidescreenRatio);
|
||||
R_SetWindow(r_viewpoint, r_viewwindow, 12, width, height, height, true);
|
||||
viewport->SetViewport(width, height, r_viewwindow.WidescreenRatio);
|
||||
viewwindowx = x;
|
||||
viewwindowy = y;
|
||||
viewactive = true;
|
||||
|
|
@ -103,10 +102,10 @@ void PolyRenderer::RenderViewToCanvas(AActor *actor, DCanvas *canvas, int x, int
|
|||
canvas->Unlock();
|
||||
|
||||
viewport->RenderTarget = screen;
|
||||
R_ExecuteSetViewSize();
|
||||
R_ExecuteSetViewSize(r_viewpoint, r_viewwindow);
|
||||
float trueratio;
|
||||
ActiveRatio(width, height, &trueratio);
|
||||
viewport->SetViewport(width, height, WidescreenRatio);
|
||||
viewport->SetViewport(width, height, r_viewwindow.WidescreenRatio);
|
||||
viewactive = savedviewactive;
|
||||
}
|
||||
|
||||
|
|
@ -118,14 +117,14 @@ void PolyRenderer::RenderActorView(AActor *actor, bool dontmaplines)
|
|||
|
||||
P_FindParticleSubsectors();
|
||||
PO_LinkToSubsectors();
|
||||
R_SetupFrame(actor);
|
||||
R_SetupFrame(r_viewpoint, r_viewwindow, actor);
|
||||
swrenderer::CameraLight::Instance()->SetCamera(actor);
|
||||
swrenderer::RenderViewport::Instance()->SetupFreelook();
|
||||
|
||||
ActorRenderFlags savedflags = camera->renderflags;
|
||||
ActorRenderFlags savedflags = r_viewpoint.camera->renderflags;
|
||||
// Never draw the player unless in chasecam mode
|
||||
if (!r_showviewer)
|
||||
camera->renderflags |= RF_INVISIBLE;
|
||||
if (!r_viewpoint.showviewer)
|
||||
r_viewpoint.camera->renderflags |= RF_INVISIBLE;
|
||||
|
||||
ClearBuffers();
|
||||
SetSceneViewport();
|
||||
|
|
@ -136,7 +135,7 @@ void PolyRenderer::RenderActorView(AActor *actor, bool dontmaplines)
|
|||
MainPortal.RenderTranslucent(0);
|
||||
PlayerSprites.Render();
|
||||
|
||||
camera->renderflags = savedflags;
|
||||
r_viewpoint.camera->renderflags = savedflags;
|
||||
interpolator.RestoreInterpolations ();
|
||||
|
||||
NetUpdate();
|
||||
|
|
@ -193,23 +192,23 @@ void PolyRenderer::SetupPerspectiveMatrix()
|
|||
|
||||
// Code provided courtesy of Graf Zahl. Now we just have to plug it into the viewmatrix code...
|
||||
// We have to scale the pitch to account for the pixel stretching, because the playsim doesn't know about this and treats it as 1:1.
|
||||
double radPitch = ViewPitch.Normalized180().Radians();
|
||||
double radPitch = r_viewpoint.Angles.Pitch.Normalized180().Radians();
|
||||
double angx = cos(radPitch);
|
||||
double angy = sin(radPitch) * glset.pixelstretch;
|
||||
double alen = sqrt(angx*angx + angy*angy);
|
||||
float adjustedPitch = (float)asin(angy / alen);
|
||||
float adjustedViewAngle = (float)(ViewAngle - 90).Radians();
|
||||
float adjustedViewAngle = (float)(r_viewpoint.Angles.Yaw - 90).Radians();
|
||||
|
||||
float ratio = WidescreenRatio;
|
||||
float fovratio = (WidescreenRatio >= 1.3f) ? 1.333333f : ratio;
|
||||
float fovy = (float)(2 * DAngle::ToDegrees(atan(tan(FieldOfView.Radians() / 2) / fovratio)).Degrees);
|
||||
float ratio = r_viewwindow.WidescreenRatio;
|
||||
float fovratio = (r_viewwindow.WidescreenRatio >= 1.3f) ? 1.333333f : ratio;
|
||||
float fovy = (float)(2 * DAngle::ToDegrees(atan(tan(r_viewpoint.FieldOfView.Radians() / 2) / fovratio)).Degrees);
|
||||
|
||||
TriMatrix worldToView =
|
||||
TriMatrix::rotate(adjustedPitch, 1.0f, 0.0f, 0.0f) *
|
||||
TriMatrix::rotate(adjustedViewAngle, 0.0f, -1.0f, 0.0f) *
|
||||
TriMatrix::scale(1.0f, glset.pixelstretch, 1.0f) *
|
||||
TriMatrix::swapYZ() *
|
||||
TriMatrix::translate((float)-ViewPos.X, (float)-ViewPos.Y, (float)-ViewPos.Z);
|
||||
TriMatrix::translate((float)-r_viewpoint.Pos.X, (float)-r_viewpoint.Pos.Y, (float)-r_viewpoint.Pos.Z);
|
||||
|
||||
WorldToClip = TriMatrix::perspective(fovy, ratio, 5.0f, 65535.0f) * worldToView;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ void PolyCull::CullNode(void *node)
|
|||
node_t *bsp = (node_t *)node;
|
||||
|
||||
// Decide which side the view point is on.
|
||||
int side = PointOnSide(ViewPos, bsp);
|
||||
int side = PointOnSide(r_viewpoint.Pos, bsp);
|
||||
|
||||
// Recursively divide front space (toward the viewer).
|
||||
CullNode(bsp->children[side]);
|
||||
|
|
@ -84,8 +84,8 @@ void PolyCull::CullSubsector(subsector_t *sub)
|
|||
if ((line->sidedef == nullptr || !(line->sidedef->Flags & WALLF_POLYOBJ)) && line->backsector == nullptr)
|
||||
{
|
||||
// Skip lines not facing viewer
|
||||
DVector2 pt1 = line->v1->fPos() - ViewPos;
|
||||
DVector2 pt2 = line->v2->fPos() - ViewPos;
|
||||
DVector2 pt1 = line->v1->fPos() - r_viewpoint.Pos;
|
||||
DVector2 pt2 = line->v2->fPos() - r_viewpoint.Pos;
|
||||
if (pt1.Y * (pt1.X - pt2.X) + pt1.X * (pt2.Y - pt1.Y) >= 0)
|
||||
continue;
|
||||
|
||||
|
|
@ -179,7 +179,7 @@ bool PolyCull::CheckBBox(float *bspcoord)
|
|||
{
|
||||
// Start using a quick frustum AABB test:
|
||||
|
||||
AxisAlignedBoundingBox aabb(Vec3f(bspcoord[BOXLEFT], bspcoord[BOXBOTTOM], (float)ViewPos.Z - 1000.0f), Vec3f(bspcoord[BOXRIGHT], bspcoord[BOXTOP], (float)ViewPos.Z + 1000.0f));
|
||||
AxisAlignedBoundingBox aabb(Vec3f(bspcoord[BOXLEFT], bspcoord[BOXBOTTOM], (float)r_viewpoint.Pos.Z - 1000.0f), Vec3f(bspcoord[BOXRIGHT], bspcoord[BOXTOP], (float)r_viewpoint.Pos.Z + 1000.0f));
|
||||
auto result = IntersectionTest::frustum_aabb(frustumPlanes, aabb);
|
||||
if (result == IntersectionTest::outside)
|
||||
return false;
|
||||
|
|
@ -266,14 +266,14 @@ LineSegmentRange PolyCull::GetSegmentRangeForLine(double x1, double y1, double x
|
|||
}
|
||||
|
||||
// Transform to 2D view space:
|
||||
x1 = x1 - ViewPos.X;
|
||||
y1 = y1 - ViewPos.Y;
|
||||
x2 = x2 - ViewPos.X;
|
||||
y2 = y2 - ViewPos.Y;
|
||||
double rx1 = x1 * ViewSin - y1 * ViewCos;
|
||||
double rx2 = x2 * ViewSin - y2 * ViewCos;
|
||||
double ry1 = x1 * ViewCos + y1 * ViewSin;
|
||||
double ry2 = x2 * ViewCos + y2 * ViewSin;
|
||||
x1 = x1 - r_viewpoint.Pos.X;
|
||||
y1 = y1 - r_viewpoint.Pos.Y;
|
||||
x2 = x2 - r_viewpoint.Pos.X;
|
||||
y2 = y2 - r_viewpoint.Pos.Y;
|
||||
double rx1 = x1 * r_viewpoint.Sin - y1 * r_viewpoint.Cos;
|
||||
double rx2 = x2 * r_viewpoint.Sin - y2 * r_viewpoint.Cos;
|
||||
double ry1 = x1 * r_viewpoint.Cos + y1 * r_viewpoint.Sin;
|
||||
double ry2 = x2 * r_viewpoint.Cos + y2 * r_viewpoint.Sin;
|
||||
|
||||
// Is it potentially visible when looking straight up or down?
|
||||
if (!(ry1 < updownnear && ry2 < updownnear) && !(ry1 > znear && ry2 > znear) &&
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ void RenderPolyDecal::Render(const TriMatrix &worldToClip, const Vec4f &clipPlan
|
|||
return;
|
||||
|
||||
bool foggy = false;
|
||||
int actualextralight = foggy ? 0 : extralight << 4;
|
||||
int actualextralight = foggy ? 0 : r_viewpoint.extralight << 4;
|
||||
|
||||
std::pair<float, float> offsets[4] =
|
||||
{
|
||||
|
|
|
|||
|
|
@ -37,8 +37,8 @@ void RenderPolyParticle::Render(const TriMatrix &worldToClip, const Vec4f &clipP
|
|||
|
||||
DVector2 points[2] =
|
||||
{
|
||||
{ pos.X - ViewSin * psize, pos.Y + ViewCos * psize },
|
||||
{ pos.X + ViewSin * psize, pos.Y - ViewCos * psize }
|
||||
{ pos.X - r_viewpoint.Sin * psize, pos.Y + r_viewpoint.Cos * psize },
|
||||
{ pos.X + r_viewpoint.Sin * psize, pos.Y - r_viewpoint.Cos * psize }
|
||||
};
|
||||
|
||||
TriVertex *vertices = PolyVertexBuffer::GetVertices(4);
|
||||
|
|
@ -46,7 +46,7 @@ void RenderPolyParticle::Render(const TriMatrix &worldToClip, const Vec4f &clipP
|
|||
return;
|
||||
|
||||
bool foggy = false;
|
||||
int actualextralight = foggy ? 0 : extralight << 4;
|
||||
int actualextralight = foggy ? 0 : r_viewpoint.extralight << 4;
|
||||
|
||||
std::pair<float, float> offsets[4] =
|
||||
{
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ void RenderPolyPlane::RenderPlanes(const TriMatrix &worldToClip, const Vec4f &cl
|
|||
//fakeFloor->alpha
|
||||
|
||||
double fakeHeight = fakeFloor->top.plane->ZatPoint(frontsector->centerspot);
|
||||
if (fakeHeight < ViewPos.Z && fakeHeight > frontsector->floorplane.ZatPoint(frontsector->centerspot))
|
||||
if (fakeHeight < r_viewpoint.Pos.Z && fakeHeight > frontsector->floorplane.ZatPoint(frontsector->centerspot))
|
||||
{
|
||||
plane.Render3DFloor(worldToClip, clipPlane, sub, subsectorDepth, stencilValue, false, fakeFloor);
|
||||
}
|
||||
|
|
@ -78,7 +78,7 @@ void RenderPolyPlane::RenderPlanes(const TriMatrix &worldToClip, const Vec4f &cl
|
|||
//fakeFloor->alpha
|
||||
|
||||
double fakeHeight = fakeFloor->bottom.plane->ZatPoint(frontsector->centerspot);
|
||||
if (fakeHeight > ViewPos.Z && fakeHeight < frontsector->ceilingplane.ZatPoint(frontsector->centerspot))
|
||||
if (fakeHeight > r_viewpoint.Pos.Z && fakeHeight < frontsector->ceilingplane.ZatPoint(frontsector->centerspot))
|
||||
{
|
||||
plane.Render3DFloor(worldToClip, clipPlane, sub, subsectorDepth, stencilValue, true, fakeFloor);
|
||||
}
|
||||
|
|
@ -187,8 +187,8 @@ void RenderPolyPlane::Render(const TriMatrix &worldToClip, const Vec4f &clipPlan
|
|||
{
|
||||
seg_t *line = &sub->firstline[i];
|
||||
|
||||
DVector2 pt1 = line->v1->fPos() - ViewPos;
|
||||
DVector2 pt2 = line->v2->fPos() - ViewPos;
|
||||
DVector2 pt1 = line->v1->fPos() - r_viewpoint.Pos;
|
||||
DVector2 pt2 = line->v2->fPos() - r_viewpoint.Pos;
|
||||
if (pt1.Y * (pt1.X - pt2.X) + pt1.X * (pt2.Y - pt1.Y) >= 0)
|
||||
inside = false;
|
||||
|
||||
|
|
@ -218,7 +218,7 @@ void RenderPolyPlane::Render(const TriMatrix &worldToClip, const Vec4f &clipPlan
|
|||
else if(polyportal->PortalPlane == Vec4f(0.0f) || Vec4f::dot(polyportal->PortalPlane, Vec4f((float)v.X, (float)v.Y, 0.0f, 1.0f)) > 0.0f)
|
||||
{
|
||||
DVector2 planePos = v;
|
||||
DVector2 planeNormal = v - ViewPos;
|
||||
DVector2 planeNormal = v - r_viewpoint.Pos;
|
||||
planeNormal.MakeUnit();
|
||||
double planeD = -(planeNormal | (planePos + planeNormal * 0.001));
|
||||
polyportal->PortalPlane = Vec4f((float)planeNormal.X, (float)planeNormal.Y, 0.0f, (float)planeD);
|
||||
|
|
@ -238,7 +238,7 @@ void RenderPolyPlane::Render(const TriMatrix &worldToClip, const Vec4f &clipPlan
|
|||
{
|
||||
// Floor and ceiling texture needs to be swapped sometimes? Why?? :(
|
||||
|
||||
if (ViewPos.Z < fakesector->floorplane.Zat0()) // In water
|
||||
if (r_viewpoint.Pos.Z < fakesector->floorplane.Zat0()) // In water
|
||||
{
|
||||
if (ceiling)
|
||||
{
|
||||
|
|
@ -254,7 +254,7 @@ void RenderPolyPlane::Render(const TriMatrix &worldToClip, const Vec4f &clipPlan
|
|||
ccw = true;
|
||||
}
|
||||
}
|
||||
else if (ViewPos.Z >= fakesector->ceilingplane.Zat0() && !fakeflooronly) // In ceiling water
|
||||
else if (r_viewpoint.Pos.Z >= fakesector->ceilingplane.Zat0() && !fakeflooronly) // In ceiling water
|
||||
{
|
||||
if (ceiling)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -43,18 +43,18 @@ void RenderPolyPlayerSprites::Render()
|
|||
// draws the canvas textures between this call and the final call to RenderRemainingSprites..
|
||||
|
||||
if (!r_drawplayersprites ||
|
||||
!camera ||
|
||||
!camera->player ||
|
||||
!r_viewpoint.camera ||
|
||||
!r_viewpoint.camera->player ||
|
||||
(players[consoleplayer].cheats & CF_CHASECAM) ||
|
||||
(r_deathcamera && camera->health <= 0))
|
||||
(r_deathcamera && r_viewpoint.camera->health <= 0))
|
||||
return;
|
||||
|
||||
float bobx, boby;
|
||||
P_BobWeapon(camera->player, &bobx, &boby, r_TicFracF);
|
||||
P_BobWeapon(r_viewpoint.camera->player, &bobx, &boby, r_viewpoint.TicFrac);
|
||||
|
||||
// Interpolate the main weapon layer once so as to be able to add it to other layers.
|
||||
double wx, wy;
|
||||
DPSprite *weapon = camera->player->FindPSprite(PSP_WEAPON);
|
||||
DPSprite *weapon = r_viewpoint.camera->player->FindPSprite(PSP_WEAPON);
|
||||
if (weapon)
|
||||
{
|
||||
if (weapon->firstTic)
|
||||
|
|
@ -64,8 +64,8 @@ void RenderPolyPlayerSprites::Render()
|
|||
}
|
||||
else
|
||||
{
|
||||
wx = weapon->oldx + (weapon->x - weapon->oldx) * r_TicFracF;
|
||||
wy = weapon->oldy + (weapon->y - weapon->oldy) * r_TicFracF;
|
||||
wx = weapon->oldx + (weapon->x - weapon->oldx) * r_viewpoint.TicFrac;
|
||||
wy = weapon->oldy + (weapon->y - weapon->oldy) * r_viewpoint.TicFrac;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -74,7 +74,7 @@ void RenderPolyPlayerSprites::Render()
|
|||
wy = 0;
|
||||
}
|
||||
|
||||
for (DPSprite *sprite = camera->player->psprites; sprite != nullptr; sprite = sprite->GetNext())
|
||||
for (DPSprite *sprite = r_viewpoint.camera->player->psprites; sprite != nullptr; sprite = sprite->GetNext())
|
||||
{
|
||||
// [RH] Don't draw the targeter's crosshair if the player already has a crosshair set.
|
||||
// It's possible this psprite's caller is now null but the layer itself hasn't been destroyed
|
||||
|
|
@ -82,7 +82,7 @@ void RenderPolyPlayerSprites::Render()
|
|||
// In this case let's simply not draw it to avoid crashing.
|
||||
if ((sprite->GetID() != PSP_TARGETCENTER || CrosshairImage == nullptr) && sprite->GetCaller() != nullptr)
|
||||
{
|
||||
RenderSprite(sprite, camera, bobx, boby, wx, wy, r_TicFracF);
|
||||
RenderSprite(sprite, r_viewpoint.camera, bobx, boby, wx, wy, r_viewpoint.TicFrac);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -143,7 +143,7 @@ void RenderPolyPlayerSprites::RenderSprite(DPSprite *sprite, AActor *owner, floa
|
|||
|
||||
auto viewport = swrenderer::RenderViewport::Instance();
|
||||
|
||||
double pspritexscale = centerxwide / 160.0;
|
||||
double pspritexscale = r_viewwindow.centerxwide / 160.0;
|
||||
double pspriteyscale = pspritexscale * viewport->YaspectMul;
|
||||
double pspritexiscale = 1 / pspritexscale;
|
||||
|
||||
|
|
@ -167,7 +167,7 @@ void RenderPolyPlayerSprites::RenderSprite(DPSprite *sprite, AActor *owner, floa
|
|||
double texturemid = (BaseYCenter - sy) * tex->Scale.Y + tex->TopOffset;
|
||||
|
||||
// Adjust PSprite for fullscreen views
|
||||
if (camera->player && (viewport->RenderTarget != screen || viewheight == viewport->RenderTarget->GetHeight() || (viewport->RenderTarget->GetWidth() > (BaseXCenter * 2) && !st_scale)))
|
||||
if (r_viewpoint.camera->player && (viewport->RenderTarget != screen || viewheight == viewport->RenderTarget->GetHeight() || (viewport->RenderTarget->GetWidth() > (BaseXCenter * 2) && !st_scale)))
|
||||
{
|
||||
AWeapon *weapon = dyn_cast<AWeapon>(sprite->GetCaller());
|
||||
if (weapon != nullptr && weapon->YAdjust != 0)
|
||||
|
|
@ -186,7 +186,7 @@ void RenderPolyPlayerSprites::RenderSprite(DPSprite *sprite, AActor *owner, floa
|
|||
// Move the weapon down for 1280x1024.
|
||||
if (sprite->GetID() < PSP_TARGETCENTER)
|
||||
{
|
||||
texturemid -= AspectPspriteOffset(WidescreenRatio);
|
||||
texturemid -= AspectPspriteOffset(r_viewwindow.WidescreenRatio);
|
||||
}
|
||||
|
||||
int clipped_x1 = MAX(x1, 0);
|
||||
|
|
@ -212,7 +212,7 @@ void RenderPolyPlayerSprites::RenderSprite(DPSprite *sprite, AActor *owner, floa
|
|||
|
||||
bool noaccel = false;
|
||||
|
||||
FDynamicColormap *basecolormap = viewsector->ColorMap;
|
||||
FDynamicColormap *basecolormap = r_viewpoint.sector->ColorMap;
|
||||
FDynamicColormap *colormap_to_use = basecolormap;
|
||||
|
||||
int ColormapNum = 0;
|
||||
|
|
@ -222,7 +222,7 @@ void RenderPolyPlayerSprites::RenderSprite(DPSprite *sprite, AActor *owner, floa
|
|||
RenderStyle = STYLE_Normal;
|
||||
|
||||
bool foggy = false;
|
||||
int actualextralight = foggy ? 0 : extralight << 4;
|
||||
int actualextralight = foggy ? 0 : r_viewpoint.extralight << 4;
|
||||
int spriteshade = swrenderer::LightVisibility::LightLevelToShade(owner->Sector->lightlevel + actualextralight, foggy);
|
||||
double minz = double((2048 * 4) / double(1 << 20));
|
||||
ColormapNum = GETPALOOKUP(swrenderer::LightVisibility::Instance()->SpriteGlobVis(foggy) / minz, spriteshade);
|
||||
|
|
@ -287,14 +287,14 @@ void RenderPolyPlayerSprites::RenderSprite(DPSprite *sprite, AActor *owner, floa
|
|||
}
|
||||
*/
|
||||
|
||||
if (camera->Inventory != nullptr)
|
||||
if (r_viewpoint.camera->Inventory != nullptr)
|
||||
{
|
||||
visstyle_t visstyle;
|
||||
visstyle.Alpha = Alpha;
|
||||
visstyle.RenderStyle = STYLE_Count;
|
||||
visstyle.Invert = false;
|
||||
|
||||
camera->Inventory->AlterWeaponSprite(&visstyle);
|
||||
r_viewpoint.camera->Inventory->AlterWeaponSprite(&visstyle);
|
||||
|
||||
Alpha = visstyle.Alpha;
|
||||
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@
|
|||
#include "swrenderer/scene/r_light.h"
|
||||
#include "gl/data/gl_data.h"
|
||||
|
||||
extern bool r_showviewer;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
PolyDrawSectorPortal::PolyDrawSectorPortal(FSectorPortal *portal, bool ceiling) : Portal(portal), Ceiling(ceiling)
|
||||
|
|
@ -49,21 +47,21 @@ void PolyDrawSectorPortal::Render(int portalDepth)
|
|||
SaveGlobals();
|
||||
|
||||
// To do: get this information from PolyRenderer instead of duplicating the code..
|
||||
double radPitch = ViewPitch.Normalized180().Radians();
|
||||
double radPitch = r_viewpoint.Angles.Pitch.Normalized180().Radians();
|
||||
double angx = cos(radPitch);
|
||||
double angy = sin(radPitch) * glset.pixelstretch;
|
||||
double alen = sqrt(angx*angx + angy*angy);
|
||||
float adjustedPitch = (float)asin(angy / alen);
|
||||
float adjustedViewAngle = (float)(ViewAngle - 90).Radians();
|
||||
float ratio = WidescreenRatio;
|
||||
float fovratio = (WidescreenRatio >= 1.3f) ? 1.333333f : ratio;
|
||||
float fovy = (float)(2 * DAngle::ToDegrees(atan(tan(FieldOfView.Radians() / 2) / fovratio)).Degrees);
|
||||
float adjustedViewAngle = (float)(r_viewpoint.Angles.Yaw - 90).Radians();
|
||||
float ratio = r_viewwindow.WidescreenRatio;
|
||||
float fovratio = (r_viewwindow.WidescreenRatio >= 1.3f) ? 1.333333f : ratio;
|
||||
float fovy = (float)(2 * DAngle::ToDegrees(atan(tan(r_viewpoint.FieldOfView.Radians() / 2) / fovratio)).Degrees);
|
||||
TriMatrix worldToView =
|
||||
TriMatrix::rotate(adjustedPitch, 1.0f, 0.0f, 0.0f) *
|
||||
TriMatrix::rotate(adjustedViewAngle, 0.0f, -1.0f, 0.0f) *
|
||||
TriMatrix::scale(1.0f, glset.pixelstretch, 1.0f) *
|
||||
TriMatrix::swapYZ() *
|
||||
TriMatrix::translate((float)-ViewPos.X, (float)-ViewPos.Y, (float)-ViewPos.Z);
|
||||
TriMatrix::translate((float)-r_viewpoint.Pos.X, (float)-r_viewpoint.Pos.Y, (float)-r_viewpoint.Pos.Z);
|
||||
TriMatrix worldToClip = TriMatrix::perspective(fovy, ratio, 5.0f, 65535.0f) * worldToView;
|
||||
|
||||
RenderPortal.SetViewpoint(worldToClip, PortalPlane, StencilValue);
|
||||
|
|
@ -87,33 +85,33 @@ void PolyDrawSectorPortal::RenderTranslucent(int portalDepth)
|
|||
|
||||
void PolyDrawSectorPortal::SaveGlobals()
|
||||
{
|
||||
savedextralight = extralight;
|
||||
savedpos = ViewPos;
|
||||
savedangle = ViewAngle;
|
||||
savedextralight = r_viewpoint.extralight;
|
||||
savedpos = r_viewpoint.Pos;
|
||||
savedangles = r_viewpoint.Angles;
|
||||
savedvisibility = swrenderer::LightVisibility::Instance()->GetVisibility();
|
||||
savedcamera = camera;
|
||||
savedsector = viewsector;
|
||||
savedcamera = r_viewpoint.camera;
|
||||
savedsector = r_viewpoint.sector;
|
||||
|
||||
if (Portal->mType == PORTS_SKYVIEWPOINT)
|
||||
{
|
||||
// Don't let gun flashes brighten the sky box
|
||||
AActor *sky = Portal->mSkybox;
|
||||
extralight = 0;
|
||||
r_viewpoint.extralight = 0;
|
||||
swrenderer::LightVisibility::Instance()->SetVisibility(sky->args[0] * 0.25f);
|
||||
ViewPos = sky->InterpolatedPosition(r_TicFracF);
|
||||
ViewAngle = savedangle + (sky->PrevAngles.Yaw + deltaangle(sky->PrevAngles.Yaw, sky->Angles.Yaw) * r_TicFracF);
|
||||
r_viewpoint.Pos = sky->InterpolatedPosition(r_viewpoint.TicFrac);
|
||||
r_viewpoint.Angles.Yaw = savedangles.Yaw + (sky->PrevAngles.Yaw + deltaangle(sky->PrevAngles.Yaw, sky->Angles.Yaw) * r_viewpoint.TicFrac);
|
||||
}
|
||||
else //if (Portal->mType == PORTS_STACKEDSECTORTHING || Portal->mType == PORTS_PORTAL || Portal->mType == PORTS_LINKEDPORTAL)
|
||||
{
|
||||
//extralight = pl->extralight;
|
||||
//swrenderer::R_SetVisibility(pl->visibility);
|
||||
ViewPos.X += Portal->mDisplacement.X;
|
||||
ViewPos.Y += Portal->mDisplacement.Y;
|
||||
r_viewpoint.Pos.X += Portal->mDisplacement.X;
|
||||
r_viewpoint.Pos.Y += Portal->mDisplacement.Y;
|
||||
}
|
||||
|
||||
camera = nullptr;
|
||||
viewsector = Portal->mDestination;
|
||||
R_SetViewAngle();
|
||||
r_viewpoint.camera = nullptr;
|
||||
r_viewpoint.sector = Portal->mDestination;
|
||||
R_SetViewAngle(r_viewpoint, r_viewwindow);
|
||||
|
||||
Portal->mFlags |= PORTSF_INSKYBOX;
|
||||
if (Portal->mPartner > 0) level.sectorPortals[Portal->mPartner].mFlags |= PORTSF_INSKYBOX;
|
||||
|
|
@ -124,13 +122,13 @@ void PolyDrawSectorPortal::RestoreGlobals()
|
|||
Portal->mFlags &= ~PORTSF_INSKYBOX;
|
||||
if (Portal->mPartner > 0) level.sectorPortals[Portal->mPartner].mFlags &= ~PORTSF_INSKYBOX;
|
||||
|
||||
camera = savedcamera;
|
||||
viewsector = savedsector;
|
||||
ViewPos = savedpos;
|
||||
r_viewpoint.camera = savedcamera;
|
||||
r_viewpoint.sector = savedsector;
|
||||
r_viewpoint.Pos = savedpos;
|
||||
swrenderer::LightVisibility::Instance()->SetVisibility(savedvisibility);
|
||||
extralight = savedextralight;
|
||||
ViewAngle = savedangle;
|
||||
R_SetViewAngle();
|
||||
r_viewpoint.extralight = savedextralight;
|
||||
r_viewpoint.Angles = savedangles;
|
||||
R_SetViewAngle(r_viewpoint, r_viewwindow);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -150,21 +148,21 @@ void PolyDrawLinePortal::Render(int portalDepth)
|
|||
SaveGlobals();
|
||||
|
||||
// To do: get this information from PolyRenderer instead of duplicating the code..
|
||||
double radPitch = ViewPitch.Normalized180().Radians();
|
||||
double radPitch = r_viewpoint.Angles.Pitch.Normalized180().Radians();
|
||||
double angx = cos(radPitch);
|
||||
double angy = sin(radPitch) * glset.pixelstretch;
|
||||
double alen = sqrt(angx*angx + angy*angy);
|
||||
float adjustedPitch = (float)asin(angy / alen);
|
||||
float adjustedViewAngle = (float)(ViewAngle - 90).Radians();
|
||||
float ratio = WidescreenRatio;
|
||||
float fovratio = (WidescreenRatio >= 1.3f) ? 1.333333f : ratio;
|
||||
float fovy = (float)(2 * DAngle::ToDegrees(atan(tan(FieldOfView.Radians() / 2) / fovratio)).Degrees);
|
||||
float adjustedViewAngle = (float)(r_viewpoint.Angles.Yaw - 90).Radians();
|
||||
float ratio = r_viewwindow.WidescreenRatio;
|
||||
float fovratio = (r_viewwindow.WidescreenRatio >= 1.3f) ? 1.333333f : ratio;
|
||||
float fovy = (float)(2 * DAngle::ToDegrees(atan(tan(r_viewpoint.FieldOfView.Radians() / 2) / fovratio)).Degrees);
|
||||
TriMatrix worldToView =
|
||||
TriMatrix::rotate(adjustedPitch, 1.0f, 0.0f, 0.0f) *
|
||||
TriMatrix::rotate(adjustedViewAngle, 0.0f, -1.0f, 0.0f) *
|
||||
TriMatrix::scale(1.0f, glset.pixelstretch, 1.0f) *
|
||||
TriMatrix::swapYZ() *
|
||||
TriMatrix::translate((float)-ViewPos.X, (float)-ViewPos.Y, (float)-ViewPos.Z);
|
||||
TriMatrix::translate((float)-r_viewpoint.Pos.X, (float)-r_viewpoint.Pos.Y, (float)-r_viewpoint.Pos.Z);
|
||||
if (Mirror)
|
||||
worldToView = TriMatrix::scale(-1.0f, 1.0f, 1.0f) * worldToView;
|
||||
TriMatrix worldToClip = TriMatrix::perspective(fovy, ratio, 5.0f, 65535.0f) * worldToView;
|
||||
|
|
@ -193,30 +191,30 @@ void PolyDrawLinePortal::RenderTranslucent(int portalDepth)
|
|||
|
||||
void PolyDrawLinePortal::SaveGlobals()
|
||||
{
|
||||
savedextralight = extralight;
|
||||
savedpos = ViewPos;
|
||||
savedangle = ViewAngle;
|
||||
savedcamera = camera;
|
||||
savedsector = viewsector;
|
||||
savedinvisibility = camera ? (camera->renderflags & RF_INVISIBLE) == RF_INVISIBLE : false;
|
||||
savedViewPath[0] = ViewPath[0];
|
||||
savedViewPath[1] = ViewPath[1];
|
||||
savedextralight = r_viewpoint.extralight;
|
||||
savedpos = r_viewpoint.Pos;
|
||||
savedangles = r_viewpoint.Angles;
|
||||
savedcamera = r_viewpoint.camera;
|
||||
savedsector = r_viewpoint.sector;
|
||||
savedinvisibility = r_viewpoint.camera ? (r_viewpoint.camera->renderflags & RF_INVISIBLE) == RF_INVISIBLE : false;
|
||||
savedViewPath[0] = r_viewpoint.Path[0];
|
||||
savedViewPath[1] = r_viewpoint.Path[1];
|
||||
|
||||
if (Mirror)
|
||||
{
|
||||
DAngle startang = ViewAngle;
|
||||
DVector3 startpos = ViewPos;
|
||||
DAngle startang = r_viewpoint.Angles.Yaw;
|
||||
DVector3 startpos = r_viewpoint.Pos;
|
||||
|
||||
vertex_t *v1 = Mirror->v1;
|
||||
|
||||
// Reflect the current view behind the mirror.
|
||||
if (Mirror->Delta().X == 0)
|
||||
{ // vertical mirror
|
||||
ViewPos.X = v1->fX() - startpos.X + v1->fX();
|
||||
r_viewpoint.Pos.X = v1->fX() - startpos.X + v1->fX();
|
||||
}
|
||||
else if (Mirror->Delta().Y == 0)
|
||||
{ // horizontal mirror
|
||||
ViewPos.Y = v1->fY() - startpos.Y + v1->fY();
|
||||
r_viewpoint.Pos.Y = v1->fY() - startpos.Y + v1->fY();
|
||||
}
|
||||
else
|
||||
{ // any mirror
|
||||
|
|
@ -232,36 +230,36 @@ void PolyDrawLinePortal::SaveGlobals()
|
|||
// the above two cases catch len == 0
|
||||
double r = ((x - x1)*dx + (y - y1)*dy) / (dx*dx + dy*dy);
|
||||
|
||||
ViewPos.X = (x1 + r * dx) * 2 - x;
|
||||
ViewPos.Y = (y1 + r * dy) * 2 - y;
|
||||
r_viewpoint.Pos.X = (x1 + r * dx) * 2 - x;
|
||||
r_viewpoint.Pos.Y = (y1 + r * dy) * 2 - y;
|
||||
}
|
||||
ViewAngle = Mirror->Delta().Angle() * 2 - startang;
|
||||
r_viewpoint.Angles.Yaw = Mirror->Delta().Angle() * 2 - startang;
|
||||
|
||||
if (camera)
|
||||
camera->renderflags &= ~RF_INVISIBLE;
|
||||
if (r_viewpoint.camera)
|
||||
r_viewpoint.camera->renderflags &= ~RF_INVISIBLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
auto src = Portal->mOrigin;
|
||||
auto dst = Portal->mDestination;
|
||||
|
||||
P_TranslatePortalXY(src, ViewPos.X, ViewPos.Y);
|
||||
P_TranslatePortalZ(src, ViewPos.Z);
|
||||
P_TranslatePortalAngle(src, ViewAngle);
|
||||
P_TranslatePortalXY(src, ViewPath[0].X, ViewPath[0].Y);
|
||||
P_TranslatePortalXY(src, ViewPath[1].X, ViewPath[1].Y);
|
||||
P_TranslatePortalXY(src, r_viewpoint.Pos.X, r_viewpoint.Pos.Y);
|
||||
P_TranslatePortalZ(src, r_viewpoint.Pos.Z);
|
||||
P_TranslatePortalAngle(src, r_viewpoint.Angles.Yaw);
|
||||
P_TranslatePortalXY(src, r_viewpoint.Path[0].X, r_viewpoint.Path[0].Y);
|
||||
P_TranslatePortalXY(src, r_viewpoint.Path[1].X, r_viewpoint.Path[1].Y);
|
||||
|
||||
if (!r_showviewer && camera && P_PointOnLineSidePrecise(ViewPath[0], dst) != P_PointOnLineSidePrecise(ViewPath[1], dst))
|
||||
if (!r_viewpoint.showviewer && r_viewpoint.camera && P_PointOnLineSidePrecise(r_viewpoint.Path[0], dst) != P_PointOnLineSidePrecise(r_viewpoint.Path[1], dst))
|
||||
{
|
||||
double distp = (ViewPath[0] - ViewPath[1]).Length();
|
||||
double distp = (r_viewpoint.Path[0] - r_viewpoint.Path[1]).Length();
|
||||
if (distp > EQUAL_EPSILON)
|
||||
{
|
||||
double dist1 = (ViewPos - ViewPath[0]).Length();
|
||||
double dist2 = (ViewPos - ViewPath[1]).Length();
|
||||
double dist1 = (r_viewpoint.Pos - r_viewpoint.Path[0]).Length();
|
||||
double dist2 = (r_viewpoint.Pos - r_viewpoint.Path[1]).Length();
|
||||
|
||||
if (dist1 + dist2 < distp + 1)
|
||||
{
|
||||
camera->renderflags |= RF_INVISIBLE;
|
||||
r_viewpoint.camera->renderflags |= RF_INVISIBLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -269,7 +267,7 @@ void PolyDrawLinePortal::SaveGlobals()
|
|||
|
||||
//camera = nullptr;
|
||||
//viewsector = R_PointInSubsector(ViewPos)->sector;
|
||||
R_SetViewAngle();
|
||||
R_SetViewAngle(r_viewpoint, r_viewwindow);
|
||||
|
||||
if (Mirror)
|
||||
PolyTriangleDrawer::toggle_mirror();
|
||||
|
|
@ -277,21 +275,21 @@ void PolyDrawLinePortal::SaveGlobals()
|
|||
|
||||
void PolyDrawLinePortal::RestoreGlobals()
|
||||
{
|
||||
if (camera)
|
||||
if (r_viewpoint.camera)
|
||||
{
|
||||
if (savedinvisibility)
|
||||
camera->renderflags |= RF_INVISIBLE;
|
||||
r_viewpoint.camera->renderflags |= RF_INVISIBLE;
|
||||
else
|
||||
camera->renderflags &= ~RF_INVISIBLE;
|
||||
r_viewpoint.camera->renderflags &= ~RF_INVISIBLE;
|
||||
}
|
||||
camera = savedcamera;
|
||||
viewsector = savedsector;
|
||||
ViewPos = savedpos;
|
||||
extralight = savedextralight;
|
||||
ViewAngle = savedangle;
|
||||
ViewPath[0] = savedViewPath[0];
|
||||
ViewPath[1] = savedViewPath[1];
|
||||
R_SetViewAngle();
|
||||
r_viewpoint.camera = savedcamera;
|
||||
r_viewpoint.sector = savedsector;
|
||||
r_viewpoint.Pos = savedpos;
|
||||
r_viewpoint.extralight = savedextralight;
|
||||
r_viewpoint.Angles = savedangles;
|
||||
r_viewpoint.Path[0] = savedViewPath[0];
|
||||
r_viewpoint.Path[1] = savedViewPath[1];
|
||||
R_SetViewAngle(r_viewpoint, r_viewwindow);
|
||||
|
||||
if (Mirror)
|
||||
PolyTriangleDrawer::toggle_mirror();
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ private:
|
|||
|
||||
int savedextralight;
|
||||
DVector3 savedpos;
|
||||
DAngle savedangle;
|
||||
DRotator savedangles;
|
||||
double savedvisibility;
|
||||
AActor *savedcamera;
|
||||
sector_t *savedsector;
|
||||
|
|
@ -92,7 +92,7 @@ private:
|
|||
|
||||
int savedextralight;
|
||||
DVector3 savedpos;
|
||||
DAngle savedangle;
|
||||
DRotator savedangles;
|
||||
AActor *savedcamera;
|
||||
sector_t *savedsector;
|
||||
bool savedinvisibility;
|
||||
|
|
|
|||
|
|
@ -187,8 +187,8 @@ void RenderPolyScene::RenderSprite(AActor *thing, double sortDistance, DVector2
|
|||
void RenderPolyScene::RenderLine(subsector_t *sub, seg_t *line, sector_t *frontsector, uint32_t subsectorDepth)
|
||||
{
|
||||
// Reject lines not facing viewer
|
||||
DVector2 pt1 = line->v1->fPos() - ViewPos;
|
||||
DVector2 pt2 = line->v2->fPos() - ViewPos;
|
||||
DVector2 pt1 = line->v1->fPos() - r_viewpoint.Pos;
|
||||
DVector2 pt2 = line->v2->fPos() - r_viewpoint.Pos;
|
||||
if (pt1.Y * (pt1.X - pt2.X) + pt1.X * (pt2.Y - pt1.Y) >= 0)
|
||||
return;
|
||||
|
||||
|
|
@ -335,7 +335,7 @@ void RenderPolyScene::RenderTranslucent(int portalDepth)
|
|||
DVector2 left, right;
|
||||
if (!RenderPolySprite::GetLine(thing, left, right))
|
||||
continue;
|
||||
double distanceSquared = (thing->Pos() - ViewPos).LengthSquared();
|
||||
double distanceSquared = (thing->Pos() - r_viewpoint.Pos).LengthSquared();
|
||||
RenderSprite(thing, distanceSquared, left, right);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ void PolySkyDome::Render(const TriMatrix &worldToClip)
|
|||
if (level.flags & LEVEL_DOUBLESKY)
|
||||
backskytex = TexMan(sky2tex, true);
|
||||
|
||||
TriMatrix objectToWorld = TriMatrix::translate((float)ViewPos.X, (float)ViewPos.Y, (float)ViewPos.Z);
|
||||
TriMatrix objectToWorld = TriMatrix::translate((float)r_viewpoint.Pos.X, (float)r_viewpoint.Pos.Y, (float)r_viewpoint.Pos.Z);
|
||||
objectToClip = worldToClip * objectToWorld;
|
||||
|
||||
int rc = mRows + 1;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ bool RenderPolySprite::GetLine(AActor *thing, DVector2 &left, DVector2 &right)
|
|||
if (IsThingCulled(thing))
|
||||
return false;
|
||||
|
||||
DVector3 pos = thing->InterpolatedPosition(r_TicFracF);
|
||||
DVector3 pos = thing->InterpolatedPosition(r_viewpoint.TicFrac);
|
||||
|
||||
bool flipTextureX = false;
|
||||
FTexture *tex = GetSpriteTexture(thing, flipTextureX);
|
||||
|
|
@ -59,8 +59,8 @@ bool RenderPolySprite::GetLine(AActor *thing, DVector2 &left, DVector2 &right)
|
|||
|
||||
pos.X += spriteHalfWidth;
|
||||
|
||||
left = DVector2(pos.X - ViewSin * spriteHalfWidth, pos.Y + ViewCos * spriteHalfWidth);
|
||||
right = DVector2(pos.X + ViewSin * spriteHalfWidth, pos.Y - ViewCos * spriteHalfWidth);
|
||||
left = DVector2(pos.X - r_viewpoint.Sin * spriteHalfWidth, pos.Y + r_viewpoint.Cos * spriteHalfWidth);
|
||||
right = DVector2(pos.X + r_viewpoint.Sin * spriteHalfWidth, pos.Y - r_viewpoint.Cos * spriteHalfWidth);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -70,8 +70,8 @@ void RenderPolySprite::Render(const TriMatrix &worldToClip, const Vec4f &clipPla
|
|||
if (!GetLine(thing, line[0], line[1]))
|
||||
return;
|
||||
|
||||
DVector3 pos = thing->InterpolatedPosition(r_TicFracF);
|
||||
pos.Z += thing->GetBobOffset(r_TicFracF);
|
||||
DVector3 pos = thing->InterpolatedPosition(r_viewpoint.TicFrac);
|
||||
pos.Z += thing->GetBobOffset(r_viewpoint.TicFrac);
|
||||
|
||||
bool flipTextureX = false;
|
||||
FTexture *tex = GetSpriteTexture(thing, flipTextureX);
|
||||
|
|
@ -105,7 +105,7 @@ void RenderPolySprite::Render(const TriMatrix &worldToClip, const Vec4f &clipPla
|
|||
return;
|
||||
|
||||
bool foggy = false;
|
||||
int actualextralight = foggy ? 0 : extralight << 4;
|
||||
int actualextralight = foggy ? 0 : r_viewpoint.extralight << 4;
|
||||
|
||||
std::pair<float, float> offsets[4] =
|
||||
{
|
||||
|
|
@ -273,7 +273,7 @@ bool RenderPolySprite::IsThingCulled(AActor *thing)
|
|||
FIntCVar *cvar = thing->GetClass()->distancecheck;
|
||||
if (cvar != nullptr && *cvar >= 0)
|
||||
{
|
||||
double dist = (thing->Pos() - ViewPos).LengthSquared();
|
||||
double dist = (thing->Pos() - r_viewpoint.Pos).LengthSquared();
|
||||
double check = (double)**cvar;
|
||||
if (dist >= check * check)
|
||||
return true;
|
||||
|
|
@ -385,9 +385,9 @@ FTexture *RenderPolySprite::GetSpriteTexture(AActor *thing, /*out*/ bool &flipX)
|
|||
{
|
||||
// choose a different rotation based on player view
|
||||
spriteframe_t *sprframe = &SpriteFrames[tex->Rotations];
|
||||
DVector3 pos = thing->InterpolatedPosition(r_TicFracF);
|
||||
pos.Z += thing->GetBobOffset(r_TicFracF);
|
||||
DAngle ang = (pos - ViewPos).Angle();
|
||||
DVector3 pos = thing->InterpolatedPosition(r_viewpoint.TicFrac);
|
||||
pos.Z += thing->GetBobOffset(r_viewpoint.TicFrac);
|
||||
DAngle ang = (pos - r_viewpoint.Pos).Angle();
|
||||
angle_t rot;
|
||||
if (sprframe->Texture[0] == sprframe->Texture[1])
|
||||
{
|
||||
|
|
@ -420,9 +420,9 @@ FTexture *RenderPolySprite::GetSpriteTexture(AActor *thing, /*out*/ bool &flipX)
|
|||
//picnum = SpriteFrames[sprdef->spriteframes + thing->frame].Texture[0];
|
||||
// choose a different rotation based on player view
|
||||
spriteframe_t *sprframe = &SpriteFrames[sprdef->spriteframes + thing->frame];
|
||||
DVector3 pos = thing->InterpolatedPosition(r_TicFracF);
|
||||
pos.Z += thing->GetBobOffset(r_TicFracF);
|
||||
DAngle ang = (pos - ViewPos).Angle();
|
||||
DVector3 pos = thing->InterpolatedPosition(r_viewpoint.TicFrac);
|
||||
pos.Z += thing->GetBobOffset(r_viewpoint.TicFrac);
|
||||
DAngle ang = (pos - r_viewpoint.Pos).Angle();
|
||||
angle_t rot;
|
||||
if (sprframe->Texture[0] == sprframe->Texture[1])
|
||||
{
|
||||
|
|
|
|||
|
|
@ -362,7 +362,7 @@ int RenderPolyWall::GetLightLevel()
|
|||
else
|
||||
{
|
||||
bool foggy = false;
|
||||
int actualextralight = foggy ? 0 : extralight << 4;
|
||||
int actualextralight = foggy ? 0 : r_viewpoint.extralight << 4;
|
||||
return clamp(Side->GetLightLevel(foggy, LineSeg->frontsector->lightlevel) + actualextralight, 0, 255);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@ void RenderPolyWallSprite::Render(const TriMatrix &worldToClip, const Vec4f &cli
|
|||
if (RenderPolySprite::IsThingCulled(thing))
|
||||
return;
|
||||
|
||||
DVector3 pos = thing->InterpolatedPosition(r_TicFracF);
|
||||
pos.Z += thing->GetBobOffset(r_TicFracF);
|
||||
DVector3 pos = thing->InterpolatedPosition(r_viewpoint.TicFrac);
|
||||
pos.Z += thing->GetBobOffset(r_viewpoint.TicFrac);
|
||||
|
||||
bool flipTextureX = false;
|
||||
FTexture *tex = RenderPolySprite::GetSpriteTexture(thing, flipTextureX);
|
||||
|
|
@ -73,7 +73,7 @@ void RenderPolyWallSprite::Render(const TriMatrix &worldToClip, const Vec4f &cli
|
|||
return;
|
||||
|
||||
bool foggy = false;
|
||||
int actualextralight = foggy ? 0 : extralight << 4;
|
||||
int actualextralight = foggy ? 0 : r_viewpoint.extralight << 4;
|
||||
|
||||
std::pair<float, float> offsets[4] =
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue