예제 #1
0
        //*/

        /// <summary>
        /// Test create render to texture
        /// </summary>
        public static void TestCreateRenderToTexture()
        {
            Model testModel = null;
            RenderToTexture renderToTexture = null;

            TestGame.Start(
                "TestCreateRenderToTexture",
                delegate
                {
                    testModel = new Model("apple");
                    renderToTexture = new RenderToTexture(
                        //SizeType.QuarterScreen);
                        SizeType.HalfScreen);
                        //SizeType.HalfScreenWithZBuffer);
                        //SizeType.FullScreen);
                        //SizeType.ShadowMap);
                },
                delegate
                {
                    bool renderToTextureWay =
                        Input.Keyboard.IsKeyUp(Keys.Space) &&
                        Input.GamePadAPressed == false;
                    BaseGame.Device.RenderState.DepthBufferEnable = true;

                    if (renderToTextureWay)
                    {
                        // Set render target to our texture
                        renderToTexture.SetRenderTarget();

                        // Clear background
                        renderToTexture.Clear(Color.Blue);

                        // Draw background lines
                        //Line.DrawGrid();
                        //Ui.LineManager.RenderAll3DLines();

                        // And draw object
                        testModel.Render(Matrix.CreateScale(7.5f));
                        //BaseGame.RenderManager.RenderAllMeshes();

                        // Do we need to resolve?
                        renderToTexture.Resolve(true);
                        //BaseGame.Device.ResolveRenderTarget(0);

                        // Reset background buffer
                        //not longer required, done in Resolve now:
                        //RenderToTexture.ResetRenderTarget(true);
                    } // if (renderToTextureWay)
                    else
                    {
                        // Copy backbuffer way, render stuff normally first
                        // Clear background
                        BaseGame.Device.Clear(Color.Blue);

                        // Draw background lines
                        //Line.DrawGrid();
                        //Ui.LineManager.RenderAll3DLines();

                        // And draw object
                        testModel.Render(Matrix.CreateScale(7.5f));
                        //BaseGame.RenderManager.RenderAllMeshes();
                    } // else

                    // Show render target in a rectangle on our screen
                    renderToTexture.RenderOnScreen(
                        //tst:
                        new Rectangle(100, 100, 256, 256));
                    //BaseGame.ScreenRectangle);
                    //no need: BaseGame.UI.FlushUI();

                    TextureFont.WriteText(2, 0,
                        "               Press Space to toogle full screen rendering");
                    TextureFont.WriteText(2, 30,
                        "renderToTexture.Width=" + renderToTexture.Width);
                    TextureFont.WriteText(2, 60,
                        "renderToTexture.Height=" + renderToTexture.Height);
                    TextureFont.WriteText(2, 90,
                        "renderToTexture.Valid=" + renderToTexture.IsValid);
                    TextureFont.WriteText(2, 120,
                        "renderToTexture.XnaTexture=" + renderToTexture.XnaTexture);
                    TextureFont.WriteText(2, 150,
                        "renderToTexture.ZBufferSurface=" + renderToTexture.ZBufferSurface);
                    TextureFont.WriteText(2, 180,
                        "renderToTexture.Filename=" + renderToTexture.Filename);
                });
        }
예제 #2
0
        /// <summary>
        /// Test shadow mapping
        /// </summary>
        public static void TestShadowMapping()
        {
            Model testModel = null;
            Model testGround = null;

            TestGame.Start("TestShadowMapping",
                delegate
                {
                    testModel = new Model("Building");
                    testGround = new Model("BackgroundGround");
                },
                delegate
                {
                    if (Input.Keyboard.IsKeyDown(Keys.Tab))
                        BaseGame.ViewMatrix = Matrix.CreateLookAt(
                            Mission.LookAtPosition +
                            BaseGame.LightDirection * Mission.ViewDistance,
                            Mission.LookAtPosition,
                            new Vector3(0, 1, 0));

                    Matrix renderMatrix = Matrix.CreateScale(15) *
                        Matrix.CreateRotationZ(0.85f) *
                        Matrix.CreateTranslation(0, 0, -16);
                    Matrix groundMatrix = Matrix.CreateScale(100);

                    if (Input.Keyboard.IsKeyUp(Keys.LeftAlt) &&
                        Input.GamePadXPressed == false)
                    {
                        // Generate shadows
                        ShaderEffect.shadowMapping.GenerateShadows(
                            delegate
                            {
                                testModel.GenerateShadow(renderMatrix);
                            });

                        // Render shadows
                        ShaderEffect.shadowMapping.RenderShadows(
                            delegate
                            {
                                testModel.UseShadow(renderMatrix);
                                testGround.UseShadow(groundMatrix);
                            });
                    } // if

                    testModel.Render(renderMatrix);
                    testGround.Render(groundMatrix);
                    BaseGame.MeshRenderManager.Render();

                    if (Input.Keyboard.IsKeyUp(Keys.LeftAlt) &&
                        Input.GamePadXPressed == false)
                    {
                        ShaderEffect.shadowMapping.ShowShadows();
                    } // if

                    if (Input.Keyboard.IsKeyDown(Keys.LeftShift) ||
                        Input.GamePadAPressed)
                    {
                        //if (Input.KeyboardRightPressed)// == false)
                        ShaderEffect.shadowMapping.shadowMapTexture.RenderOnScreen(
                            new Rectangle(10, 10, 256, 256));
                        //if (Input.KeyboardLeftPressed)// == false)
                        ShaderEffect.shadowMapping.shadowMapBlur.SceneMapTexture.
                            RenderOnScreen(
                            new Rectangle(10 + 256 + 10, 10, 256, 256));
                        // Unused on xbox360
            //#if !XBOX360
                        //ShaderEffect.shadowMapping.shadowMapBlur.BlurMapTexture.
                        //	RenderOnScreen(
                        //	new Rectangle(10 + 256 + 10+256+10, 10, 256, 256));
            //#endif
                    } // if (Input.Keyboard.IsKeyDown)

                    //tst:
                    //XnaShooterGame.GlowShader.Show();

                    TextureFont.WriteText(2, 510,
                        "Press left Shift or A to show all shadow pass textures.");
                    TextureFont.WriteText(2, 540,
                        "Press Alt or X to skip shadow map rendering.");
                    TextureFont.WriteText(2, 570,
                        "Camera pos="+BaseGame.CameraPos);//+
                        //", "+ShaderEffect.shadowMapping.shadowMapTexture.ZBufferSurface);
                });
        }
예제 #3
0
파일: Model.cs 프로젝트: kiichi7/XnaShooter
 public static void TestRenderModel()
 {
     Model testModel = null;
     TestGame.Start("TestRenderModel",
         delegate
         {
             testModel = new Model("Apple");
         },
         delegate
         {
             testModel.Render(Matrix.CreateScale(10));
         });
 }