public void DrawReflectionMap(IEnumerable <Body> Renderables, DwarfTime gameTime, WorldManager game, float waterHeight, Matrix reflectionViewMatrix, Shader effect, GraphicsDevice device) { if (!DrawReflections) { return; } ValidateBuffers(); reflectionTimer.Update(gameTime); if (!reflectionTimer.HasTriggered && (prevCameraPos - game.Camera.Position).LengthSquared() < 0.001 && (prevCameraTarget - game.Camera.Target).LengthSquared() < 0.001) { return; } prevCameraPos = game.Camera.Position; prevCameraTarget = game.Camera.Target; Plane reflectionPlane = CreatePlane(waterHeight, new Vector3(0, -1, 0), reflectionViewMatrix, true); effect.ClipPlane = new Vector4(reflectionPlane.Normal, reflectionPlane.D); effect.ClippingEnabled = true; effect.GhostClippingEnabled = false; device.SetRenderTarget(reflectionRenderTarget); device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0); effect.View = reflectionViewMatrix; //game.DrawSky(); if (DrawTerrainReflected) { game.DrawSky(gameTime, reflectionViewMatrix, 0.25f, effect.FogColor, false); game.Draw3DThings(gameTime, effect, reflectionViewMatrix); } else { game.DrawSky(gameTime, reflectionViewMatrix, 0.25f, effect.FogColor, false); } effect.View = reflectionViewMatrix; //Drawer3D.Render(device, effect, false); if (DrawComponentsReflected) { effect.View = reflectionViewMatrix; ComponentRenderer.Render(Renderables, gameTime, game.ChunkManager, game.Camera, DwarfGame.SpriteBatch, game.GraphicsDevice, effect, ComponentRenderer.WaterRenderType.Reflective, waterHeight); game.InstanceRenderer.Flush(device, effect, game.Camera, InstanceRenderMode.Normal); } effect.ClippingEnabled = false; device.SetRenderTarget(null); ReflectionMap = reflectionRenderTarget; }
public void DrawReflectionMap(DwarfTime gameTime, WorldManager game, float waterHeight, Matrix reflectionViewMatrix, Shader effect, GraphicsDevice device) { if (!DrawReflections) { return; } Plane reflectionPlane = CreatePlane(waterHeight, new Vector3(0, -1, 0), reflectionViewMatrix, true); effect.ClipPlane = new Vector4(reflectionPlane.Normal, reflectionPlane.D); effect.ClippingEnabled = true; effect.GhostClippingEnabled = false; device.SetRenderTarget(reflectionRenderTarget); device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0); effect.View = reflectionViewMatrix; //game.DrawSky(); if (DrawTerrainReflected) { game.DrawSky(gameTime, reflectionViewMatrix, 0.25f); game.Draw3DThings(gameTime, effect, reflectionViewMatrix); } else { game.DrawSky(gameTime, reflectionViewMatrix, 0.25f); } Drawer3D.Render(device, effect, false); if (DrawComponentsReflected) { effect.View = reflectionViewMatrix; game.DrawComponents(gameTime, effect, reflectionViewMatrix, ComponentManager.WaterRenderType.Reflective, waterHeight); } effect.ClippingEnabled = false; device.SetRenderTarget(null); ReflectionMap = reflectionRenderTarget; }