public override void HandleInput(InputState input)
        {
            base.HandleInput(input);

            if (input.IsKeyPressed(Microsoft.Xna.Framework.Input.Keys.Enter))
                ScreenManager.Game.Exit();
        }
        public override void HandleInput(InputState input)
        {
            base.HandleInput(input);

            if (input.IsKeyPressed(Keys.Escape))
            {
                VolumetricRenderer.Game.Components.Remove(volumetricModel);

                // Reload the main menu and return.
                ScreenManager.AddScreen(new BackgroundScreen());
                ScreenManager.AddScreen(new MainMenuScreen());
                Finished();
            }

            // Volumetric Model
            if (input.IsKeyPressed(Keys.OemTilde))
            {
                if (volumeFile.Contains("skull"))
                {
                    volumeFile = "BostonTeapot.raw";
                    volumeFileSize = new Vector3(256, 256, 178);
                }
                else
                {
                    volumeFile = "skull.raw";
                    volumeFileSize = new Vector3(256, 256, 256);
                }

                VolumetricRenderer.Game.Components.Remove(volumetricModel);
                LoadVolumeData();
            }

            // Lighting
            if (input.IsKeyPressed(Keys.D8))
            {
                volumetricModel.ToggleLighting1();
            }
            else if (input.IsKeyPressed(Keys.D9))
            {
                volumetricModel.ToggleLighting2();
            }
            else if (input.IsKeyPressed(Keys.D0))
            {
                volumetricModel.ToggleLighting3();
            }

            // Transfer function testing.
            if (input.IsKeyPressed(Keys.D7))
            {
                volumetricModel.ToggleTransferFunction();
            }
            else if (input.IsKeyDown(Keys.OemPlus) || input.IsKeyDown(Keys.OemMinus) ||
                input.IsKeyDown(Keys.OemCloseBrackets) || input.IsKeyDown(Keys.OemOpenBrackets) ||
                input.IsKeyDown(Keys.OemQuotes) || input.IsKeyDown(Keys.OemSemicolon) ||
                input.IsKeyPressed(Keys.D1) || input.IsKeyPressed(Keys.D2) ||
                input.IsKeyPressed(Keys.D4) || input.IsKeyPressed(Keys.D5))
            {
                if (input.IsKeyPressed(Keys.D1))
                {
                    isoValue = 30;
                    alphaValue = 0.02f;
                    range = 130;
                }
                else if (input.IsKeyPressed(Keys.D2))
                {
                    isoValue = 30;
                    alphaValue = 0.03f;
                    range = 30;
                }
                else if (input.IsKeyPressed(Keys.D4))
                {
                    isoValue = 60;
                    alphaValue = 0.998f;
                    range = 50;
                }
                else if (input.IsKeyPressed(Keys.D5))
                {
                    isoValue = 130;
                    alphaValue = 0.998f;
                    range = 90;
                }
                else if (isoValue == 0)
                    return;
                else if (input.IsKeyDown(Keys.OemPlus) && isoValue < 252 - range)
                    isoValue++;
                else if (input.IsKeyDown(Keys.OemMinus) && isoValue > 3)
                    isoValue--;
                else if (input.IsKeyDown(Keys.OemCloseBrackets) && alphaValue < 0.997f)
                    alphaValue += 0.002f;
                else if (input.IsKeyDown(Keys.OemOpenBrackets) && alphaValue > 0.003f)
                    alphaValue -= 0.002f;
                else if (input.IsKeyDown(Keys.OemQuotes) && range < 252 - isoValue)
                    range++;
                else if (input.IsKeyDown(Keys.OemSemicolon) && range > 1)
                    range--;

                volumetricModel.TransferPoints = new TransferControlPoints(3, 6);

                volumetricModel.TransferPoints.AddRGBControlPoint(Color.Red, 0);
                volumetricModel.TransferPoints.AddRGBControlPoint(Color.Red, 1);
                volumetricModel.TransferPoints.AddRGBControlPoint(Color.Red, 255);

                volumetricModel.TransferPoints.AddAlphaControlPoint(0f, 0);
                volumetricModel.TransferPoints.AddAlphaControlPoint(0f, (byte)(isoValue - 2));
                volumetricModel.TransferPoints.AddAlphaControlPoint(alphaValue, isoValue);
                volumetricModel.TransferPoints.AddAlphaControlPoint(alphaValue, (byte)(isoValue + range));
                volumetricModel.TransferPoints.AddAlphaControlPoint(0f, (byte)(isoValue + range + 2));
                volumetricModel.TransferPoints.AddAlphaControlPoint(0f, 255);

                volumetricModel.CreateTransferFunction();
            }

            // Transfer function testing.
            if (input.IsKeyPressed(Keys.D3))
            {
                isoValue = 0;
                alphaValue = 0f;
                range = 0;

                volumetricModel.TransferPoints = new TransferControlPoints(4, 6);

                volumetricModel.TransferPoints.AddRGBControlPoint(Color.Blue, 0);
                volumetricModel.TransferPoints.AddRGBControlPoint(Color.Blue, 58);
                volumetricModel.TransferPoints.AddRGBControlPoint(Color.Red, 62);
                volumetricModel.TransferPoints.AddRGBControlPoint(Color.Red, 255);

                volumetricModel.TransferPoints.AddAlphaControlPoint(0f, 0);
                volumetricModel.TransferPoints.AddAlphaControlPoint(0f, 28);
                volumetricModel.TransferPoints.AddAlphaControlPoint(0.03f, 32);
                volumetricModel.TransferPoints.AddAlphaControlPoint(0.02f, 130);
                volumetricModel.TransferPoints.AddAlphaControlPoint(0.1f, 135);
                volumetricModel.TransferPoints.AddAlphaControlPoint(0.1f, 255);

                volumetricModel.CreateTransferFunction();
            }
        }