From fe49b5774249e6d0cbe17e5d116652f0f3911838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=83=AD=E5=BF=83=E5=B8=82=E6=B0=91=E7=9F=B3=E5=85=88?= =?UTF-8?q?=E7=94=9F?= <1249467256@qq.com> Date: Mon, 13 Apr 2026 18:18:48 +0800 Subject: [PATCH] Make directional light follow camera rotation Adds camera Yaw/Pitch to the directional light rotation angles, so the light source moves with the camera viewport. This improves model visibility when viewing from different angles, as the lit side of the model remains visible regardless of camera position. --- .../Rendering/CommonShaderParameterBuilder.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/GameWorld/View3D/Components/Rendering/CommonShaderParameterBuilder.cs b/GameWorld/View3D/Components/Rendering/CommonShaderParameterBuilder.cs index 623c9baeb..45f41b11c 100644 --- a/GameWorld/View3D/Components/Rendering/CommonShaderParameterBuilder.cs +++ b/GameWorld/View3D/Components/Rendering/CommonShaderParameterBuilder.cs @@ -7,15 +7,20 @@ internal static class CommonShaderParameterBuilder { public static CommonShaderParameters Build(ArcBallCamera camera, SceneRenderParametersStore sceneLightParameters) { + // Light follows camera rotation for better model visibility + float dirLightRotX = MathHelper.ToRadians(sceneLightParameters.DirLightRotationDegrees_X) + camera.Pitch; + float dirLightRotY = MathHelper.ToRadians(sceneLightParameters.DirLightRotationDegrees_Y) + camera.Yaw; + float envLightRotY = MathHelper.ToRadians(sceneLightParameters.EnvLightRotationDegrees_Y) + camera.Yaw; + var commonShaderParameters = new CommonShaderParameters( camera.ViewMatrix, camera.ProjectionMatrix, camera.Position, camera.LookAt, - MathHelper.ToRadians(sceneLightParameters.EnvLightRotationDegrees_Y), - MathHelper.ToRadians(sceneLightParameters.DirLightRotationDegrees_X), - MathHelper.ToRadians(sceneLightParameters.DirLightRotationDegrees_Y), + envLightRotY, + dirLightRotX, + dirLightRotY, sceneLightParameters.LightIntensityMult, [sceneLightParameters.FactionColour0, sceneLightParameters.FactionColour1, sceneLightParameters.FactionColour2],