Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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;
        }