예제 #1
0
        public void RenderConeLight(IConeLight coneLight)
        {
            if (deferredConeLightEffect == null)
            {
                deferredConeLightEffect = AssetManager.GetAsset <Effect>("Shaders/Deferred/DeferredConeLight");
            }

            // Call lighting methods.
            // Load Light Params
            deferredConeLightEffect.Parameters["halfPixel"].SetValue(halfPixel);
            deferredConeLightEffect.Parameters["lightDirection"].SetValue(coneLight.Direction);
            deferredConeLightEffect.Parameters["LightPosition"].SetValue(coneLight.Position);
            deferredConeLightEffect.Parameters["Color"].SetValue(coneLight.Color.ToVector3());

            deferredConeLightEffect.Parameters["ViewProjectionInv"].SetValue(Matrix.Invert(Camera.View * Camera.Projection));
            deferredConeLightEffect.Parameters["LightViewProjection"].SetValue(coneLight.View * coneLight.Projection);

            deferredConeLightEffect.Parameters["normalMap"].SetValue(normalMap);
            deferredConeLightEffect.Parameters["depthMap"].SetValue(depthMap);
            deferredConeLightEffect.Parameters["power"].SetValue(coneLight.Intensity);

            deferredConeLightEffect.Parameters["ConeAngle"].SetValue(coneLight.Angle);
            deferredConeLightEffect.Parameters["ConeDecay"].SetValue(coneLight.Decay);

            deferredConeLightEffect.Parameters["shadowMod"].SetValue((float)coneLight.ShadowMod);

            if (!ScreenSpaceShadows)
            {
                deferredConeLightEffect.Parameters["CastShadow"].SetValue(coneLight.CastShadow);
                if (coneLight.CastShadow)
                {
                    deferredConeLightEffect.Parameters["shadowMap"].SetValue(coneLight.ShadowMap);
                }
            }

            deferredConeLightEffect.CurrentTechnique.Passes[0].Apply();
            // Set sampler state to Point as the Surface type requires it in XNA 4.0
            GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
            sceneQuad.Draw(-Vector2.One, Vector2.One);
        }
        public void RenderConeLight(IConeLight coneLight)
        {
            if (deferredConeLightEffect == null)
                deferredConeLightEffect = AssetManager.GetAsset<Effect>("Shaders/Deferred/DeferredConeLight");

            // Call lighting methods.
            // Load Light Params
            deferredConeLightEffect.Parameters["halfPixel"].SetValue(halfPixel);
            deferredConeLightEffect.Parameters["lightDirection"].SetValue(coneLight.Direction);
            deferredConeLightEffect.Parameters["LightPosition"].SetValue(coneLight.Position);
            deferredConeLightEffect.Parameters["Color"].SetValue(coneLight.Color.ToVector3());

            deferredConeLightEffect.Parameters["ViewProjectionInv"].SetValue(Matrix.Invert(Camera.View * Camera.Projection));
            deferredConeLightEffect.Parameters["LightViewProjection"].SetValue(coneLight.View * coneLight.Projection);

            deferredConeLightEffect.Parameters["normalMap"].SetValue(normalMap);
            deferredConeLightEffect.Parameters["depthMap"].SetValue(depthMap);
            deferredConeLightEffect.Parameters["power"].SetValue(coneLight.Intensity);

            deferredConeLightEffect.Parameters["ConeAngle"].SetValue(coneLight.Angle);
            deferredConeLightEffect.Parameters["ConeDecay"].SetValue(coneLight.Decay);

            deferredConeLightEffect.Parameters["shadowMod"].SetValue((float)coneLight.ShadowMod);

            if (!ScreenSpaceShadows)
            {
                deferredConeLightEffect.Parameters["CastShadow"].SetValue(coneLight.CastShadow);
                if (coneLight.CastShadow)
                    deferredConeLightEffect.Parameters["shadowMap"].SetValue(coneLight.ShadowMap);
            }

            deferredConeLightEffect.CurrentTechnique.Passes[0].Apply();
            // Set sampler state to Point as the Surface type requires it in XNA 4.0
            GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
            sceneQuad.Draw(-Vector2.One, Vector2.One);
        }