//*/ /// <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); }); }
/// <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); }); }
public static void TestRenderModel() { Model testModel = null; TestGame.Start("TestRenderModel", delegate { testModel = new Model("Apple"); }, delegate { testModel.Render(Matrix.CreateScale(10)); }); }