/// <summary> /// Test NormalMapping shader /// </summary> public static void TestNormalMappingShader() { PlaneRenderer testPlane = null; TestGame.Start("TestNormalMappingShader", delegate { testPlane = new PlaneRenderer( Vector3.Zero, new Plane(new Vector3(0, 0, 1), 0), new Material("CaveDetailGround", "CaveDetailGroundNormal"), 25.0f); }, delegate { testPlane.Render(ShaderEffect.normalMapping);//, "DiffuseSpecular20"); }); }
//*/ //*TODO /// <summary> /// Test shadow mapping /// </summary> public static void TestShadowMapping() { PlaneRenderer plane = null; //ColladaModel testModel = null; // We need a dummy animated model to set the right bones once. AnimatedColladaModel dummyAniModel = null; TestGame.Start("TestShadowMapping", delegate { plane = new PlaneRenderer( Vector3.Zero, new Plane(new Vector3(0, 0, 1), 0), new Material( Color.White, Color.White, Color.Black, "CaveDetailGround", "CaveDetailGroundNormal", "", ""), 10.0f); //testModel = new ColladaModel( //"Door"); //"Hero"); //"Sword"); dummyAniModel = new AnimatedColladaModel("Hero"); //dummy: dummyAniModel.Render(Matrix.Identity); ShaderEffect.shadowMapping.SetVirtualLightPos( new Vector3(0, 0, 2)); }, delegate { // Start glow shader BaseGame.GlowShader.Start(); // Clear background with white color, looks much cooler for the // post screen glow effect. BaseGame.Device.Clear(Color.Black); if (Input.Keyboard.IsKeyDown(Keys.Tab)) BaseGame.ViewMatrix = Matrix.CreateLookAt( //Mission.LookAtPosition + BaseGame.LightDirection * ThirdPersonCamera.CameraDistance, Vector3.Zero,//Mission.LookAtPosition, new Vector3(0, 1, 0)); Matrix renderMatrix = Matrix.Identity; Matrix groundMatrix = Matrix.Identity; if (Input.Keyboard.IsKeyUp(Keys.LeftAlt) && Input.GamePadXPressed == false) { // Generate shadows ShaderEffect.shadowMapping.GenerateShadows( delegate { //testModel.GenerateShadow(renderMatrix); dummyAniModel.GenerateShadow(renderMatrix); //dummyAniModel.Render(renderMatrix); }); // Render shadows ShaderEffect.shadowMapping.RenderShadows( delegate { //testModel.UseShadow(renderMatrix); dummyAniModel.UseShadow(renderMatrix); plane.UseShadow(); }); } // if // Restore z buffer state BaseGame.Device.RenderState.DepthBufferEnable = true; BaseGame.Device.RenderState.DepthBufferWriteEnable = true; // Update game time Player.SetGameTimeMs(BaseGame.TotalTimeMs); plane.Render(); //testModel.Render(renderMatrix); dummyAniModel.Render(renderMatrix); //unused: BaseGame.MeshRenderManager.Render(); Matrix weaponMatrix = dummyAniModel.HandlePlayerFlareAndWeapon(); ShaderEffect.shadowMapping.SetVirtualLightPos( AnimatedColladaModel.finalPlayerFlarePos); EffectManager.AddEffect( AnimatedColladaModel.finalPlayerFlarePos, EffectManager.EffectType.Flare, 0.3f, 0); EffectManager.AddEffect( AnimatedColladaModel.finalPlayerFlarePos, EffectManager.EffectType.LightInstant, 0.3f * 2.5f, 0); BaseGame.effectManager.HandleAllEffects(); 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) DungeonQuestGame.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); }); }