internal static void WriteSpotlightConstants(LightId lid, ref SpotlightConstants data) { data.ApertureCos = Spotlights[lid.Index].ApertureCos; data.Range = Spotlights[lid.Index].Range; data.Color = Spotlights[lid.Index].Color; data.Direction = Spotlights[lid.Index].Direction; data.Up = Spotlights[lid.Index].Up; data.GlossFactor = Spotlights[lid.Index].GlossFactor; data.ShadowsRange = Lights.Data[lid.Index].CastsShadowsThisFrame ? Lights.Data[lid.Index].ShadowsDistance : 0; data.Position = Lights.Data[lid.Index].SpotPosition - MyRender11.Environment.CameraPosition; float ratio = (float)Math.Sqrt(1 - data.ApertureCos * data.ApertureCos) / data.ApertureCos; float h = ratio * data.Range; Matrix viewProjAt0 = MyRender11.Environment.ViewProjectionAt0; if (MyStereoRender.Enable) { if (MyStereoRender.RenderRegion == MyStereoRegion.LEFT) { viewProjAt0 = MyStereoRender.EnvMatricesLeftEye.ViewProjectionAt0; } if (MyStereoRender.RenderRegion == MyStereoRegion.RIGHT) { viewProjAt0 = MyStereoRender.EnvMatricesRightEye.ViewProjectionAt0; } } data.ProxyWorldViewProj = Matrix.Transpose(Matrix.CreateScale(2 * h, 2 * h, data.Range) * Matrix.CreateWorld(data.Position, data.Direction, data.Up) * viewProjAt0); data.ShadowMatrix = CreateShadowMatrix(lid); }
internal static void WriteSpotlightConstants(LightId lid, ref SpotlightConstants data) { data.ApertureCos = Spotlights[lid.Index].ApertureCos; data.Range = Spotlights[lid.Index].Range; data.Color = Spotlights[lid.Index].Color; data.Direction = Spotlights[lid.Index].Direction; data.Up = Spotlights[lid.Index].Up; data.ShadowsRange = Lights.Data[lid.Index].CastsShadows ? Lights.Data[lid.Index].ShadowsDistance : 0; data.Position = Lights.Data[lid.Index].Position - MyEnvironment.CameraPosition; float ratio = (float)Math.Sqrt(1 - data.ApertureCos * data.ApertureCos) / data.ApertureCos; float h = ratio * data.Range; data.ProxyWorldViewProj = Matrix.Transpose(Matrix.CreateScale(2 * h, 2 * h, data.Range) * Matrix.CreateWorld(data.Position, data.Direction, data.Up) * MyEnvironment.ViewProjectionAt0); }