diff --git a/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h b/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h index 086d49cf2..58668d563 100644 --- a/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h +++ b/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h @@ -40,6 +40,8 @@ struct HWViewpointUniforms int mLightTilesWidth = 0; + FVector3 mCameraNormal; + void CalcDependencies() { mNormalViewMatrix.computeNormalMatrix(mViewMatrix); diff --git a/src/common/utility/vectors.h b/src/common/utility/vectors.h index 47eb59793..e13fcea40 100644 --- a/src/common/utility/vectors.h +++ b/src/common/utility/vectors.h @@ -710,6 +710,13 @@ struct TVector3 *this = *this ^ other; return *this; } + + + // returns a version with swapped Z/Y + constexpr const TVector3 ToXZY() const + { + return {X, Z, Y}; + } }; template diff --git a/src/rendering/hwrenderer/scene/hw_drawinfo.cpp b/src/rendering/hwrenderer/scene/hw_drawinfo.cpp index c0e8016bf..cc2dd8207 100644 --- a/src/rendering/hwrenderer/scene/hw_drawinfo.cpp +++ b/src/rendering/hwrenderer/scene/hw_drawinfo.cpp @@ -356,6 +356,10 @@ void HWDrawInfo::SetViewMatrix(const FRotator &angles, float vx, float vy, float VPUniforms.mViewMatrix.rotate(angles.Yaw.Degrees(), 0.0f, mult, 0.0f); VPUniforms.mViewMatrix.translate(vx * mult, -vz * planemult, -vy); VPUniforms.mViewMatrix.scale(-mult, planemult, 1); + + FRotator unfuckedAngles(angles.Pitch, FAngle::fromDeg(90 - angles.Yaw.Degrees()), angles.Roll); + + VPUniforms.mCameraNormal = FVector3(unfuckedAngles).ToXZY(); } diff --git a/wadsrc/static/shaders/scene/binding_rsbuffers.glsl b/wadsrc/static/shaders/scene/binding_rsbuffers.glsl index 1ef772200..2f2913c2b 100644 --- a/wadsrc/static/shaders/scene/binding_rsbuffers.glsl +++ b/wadsrc/static/shaders/scene/binding_rsbuffers.glsl @@ -18,6 +18,8 @@ layout(set = 1, binding = 0, std140) uniform readonly ViewpointUBO float uClipHeightDirection; int uLightTilesWidth; // Levelmesh light tiles + + vec3 uCameraNormal; }; layout(set = 1, binding = 1, std140) uniform readonly MatricesUBO