Example #1
0
        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);
        }
Example #2
0
        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);
        }