public DirectionalLightRenderer(DX11Game game, GBuffer gBuffer)
        {
            this.game    = game;
            this.gBuffer = gBuffer;
            var device = game.Device;

            context = device.ImmediateContext;

            shadowsShader = BasicShader.LoadAutoreload(game,
                                                       new System.IO.FileInfo(
                                                           CompiledShaderCache.Current.RootShaderPath + "Deferred\\DirectionalLight.fx"));

            shadowsShader.SetTechnique("Technique0");

            noShadowsShader = BasicShader.LoadAutoreload(game,
                                                         new System.IO.FileInfo(
                                                             CompiledShaderCache.Current.RootShaderPath + "Deferred\\DirectionalLight.fx"), null, new[] { new ShaderMacro("DISABLE_SHADOWS") });

            noShadowsShader.SetTechnique("Technique0");

            quad = new FullScreenQuad(device);

            layout = FullScreenQuad.CreateInputLayout(device, shadowsShader.GetCurrentPass(0));

            LightDirection = Vector3.Normalize(new Vector3(1, 2, 1));
            Color          = new Vector3(1, 1, 0.9f);

            CSMRenderer = new CSM.CSMRenderer(game);
        }
Пример #2
0
        public void TestCascadedShadowMapping()
        {
            var game = new DX11Game();

            game.InitDirectX();
            var device  = game.Device;
            var context = device.ImmediateContext;

            var filledGBuffer = new TestFilledGBuffer(game, 800, 600);

            var csmRenderer = new CSMRenderer(game);

            var toggle = false;

            var light = new DirectionalLight();


            game.GameLoopEvent += delegate
            {
                context.ClearState();
                filledGBuffer.DrawUpdatedGBuffer();

                csmRenderer.UpdateShadowMap(delegate(OrthographicCamera lightCamera)
                {
                    game.Camera = lightCamera;

                    filledGBuffer.Draw();

                    game.Camera = game.SpectaterCamera;
                }, light, game.SpectaterCamera);

                game.SetBackbuffer();

                if (game.Keyboard.IsKeyPressed(Key.C))
                {
                    toggle = !toggle;
                }

                if (toggle)
                {
                    light.Direction = game.SpectaterCamera.CameraDirection;
                }


                if (game.Keyboard.IsKeyDown(Key.I))
                {
                    GBufferTest.DrawGBuffer(game, filledGBuffer.GBuffer);
                }
                else
                {
                    csmRenderer.RenderShadowOcclusion(game.SpectaterCamera, filledGBuffer.GBuffer.DepthRV);
                    //light.Draw();
                    game.TextureRenderer.Draw(csmRenderer.ShadowMapRV, new Vector2(10, 10), new Vector2(590, 200));

                    for (int i = 0; i < 6; i++)
                    {
                        //game.LineManager3D.AddViewFrustum(light.LightCameras[i].ViewProjection,
                        //new Color4(0, 1, 0));
                    }
                }
            };

            game.Run();
        }