private void CreateGuiControls() { var panel = SampleFramework.AddOptions("Batching"); SampleHelper.AddDropDown( panel, "Batching method", EnumHelper.GetValues(typeof(BatchingType)), (int)_batchingType, batchingType => SetBatchingType((BatchingType)batchingType)); SampleHelper.AddCheckBox( panel, "Draw debug info", _drawDebugInfo, isChecked => _drawDebugInfo = isChecked); SampleFramework.ShowOptionsWindow("Batching"); }
private void CreateGuiControls() { var panel = SampleFramework.AddOptions("Shadows"); // ----- Light node controls var lightNodePanel = SampleHelper.AddGroupBox(panel, "Light Nodes"); SampleHelper.AddDropDown( lightNodePanel, "Light type", new[] { "Spotlight", "PointLight" }, 0, selectedItem => { bool enableSpotlight = (selectedItem == "Spotlight"); _spotlightNode.IsEnabled = enableSpotlight; _pointLightNode.IsEnabled = !enableSpotlight; }); SampleHelper.AddSlider( lightNodePanel, "Range", "F2", 1, 30, 10, value => { _spotlight.Range = value; _pointLight.Range = value; }); SampleHelper.AddSlider( lightNodePanel, "Y position", "F2", 0, 10, 1, value => { foreach (var node in new[] { _spotlightNode, _pointLightNode }) { var pose = node.PoseWorld; pose.Position.Y = value; node.PoseWorld = pose; } }); SampleHelper.AddSlider( lightNodePanel, "X rotation", "F0", -90, 90, 1, value => { var pose = _spotlightNode.PoseWorld; pose.Orientation = Matrix.CreateRotationX(MathHelper.ToRadians(value)); _spotlightNode.PoseWorld = pose; }); SampleHelper.AddSlider( lightNodePanel, "Spotlight angle", "F2", 1, 89, MathHelper.ToDegrees(_spotlight.CutoffAngle), value => { float angle = MathHelper.ToRadians(value); _spotlight.FalloffAngle = 0.8f * angle; _spotlight.CutoffAngle = angle; }); // ----- Shadow controls var shadowPanel = SampleHelper.AddGroupBox(panel, "Shadow"); SampleHelper.AddSlider( shadowPanel, "Shadow map resolution", "F0", 16, 1024, _standardShadow.PreferredSize, value => { _standardShadow.PreferredSize = (int)value; _cubeMapShadow.PreferredSize = (int)value; }); SampleHelper.AddCheckBox( shadowPanel, "Prefer 16 bit", _standardShadow.Prefer16Bit, isChecked => { _standardShadow.Prefer16Bit = isChecked; _cubeMapShadow.Prefer16Bit = isChecked; }); SampleHelper.AddSlider( shadowPanel, "Depth bias", "F2", 0, 10, _standardShadow.DepthBias, value => { _standardShadow.DepthBias = value; _cubeMapShadow.DepthBias = value; }); SampleHelper.AddSlider( shadowPanel, "Normal offset", "F2", 0, 10, _standardShadow.NormalOffset, value => { _standardShadow.NormalOffset = value; _cubeMapShadow.NormalOffset = value; }); SampleHelper.AddSlider( shadowPanel, "Number of samples", "F0", -1, 32, _standardShadow.NumberOfSamples, value => { _standardShadow.NumberOfSamples = (int)value; _cubeMapShadow.NumberOfSamples = (int)value; }); SampleHelper.AddSlider( shadowPanel, "Filter radius", "F2", 0, 10, _standardShadow.FilterRadius, value => { _standardShadow.FilterRadius = value; _cubeMapShadow.FilterRadius = value; }); SampleHelper.AddSlider( shadowPanel, "Jitter resolution", "F0", 1, 10000, _standardShadow.JitterResolution, value => { _standardShadow.JitterResolution = value; _cubeMapShadow.JitterResolution = value; }); SampleFramework.ShowOptionsWindow("Shadows"); }
// Add GUI controls to the Options window. private void CreateGuiControls() { var sampleFramework = _services.GetInstance<SampleFramework>(); var optionsPanel = sampleFramework.AddOptions("Game Objects"); var panel = SampleHelper.AddGroupBox(optionsPanel, "TerrainObject"); SampleHelper.AddCheckBox( panel, "Draw wireframe", _graphicsScreen.TerrainRenderer.DrawWireFrame, isChecked => _graphicsScreen.TerrainRenderer.DrawWireFrame = isChecked); SampleHelper.AddCheckBox( panel, "Show clipmaps", _showClipmaps, isChecked => _showClipmaps = isChecked); SampleHelper.AddSlider( panel, "Min height", null, -500, 0, _minHeight, value => { _minHeight = value; _updateGeometryTexture = true; }); SampleHelper.AddSlider( panel, "Max height", null, 0, 2000, _maxHeight, value => { _maxHeight = value; _updateGeometryTexture = true; }); SampleHelper.AddCheckBox( panel, "Smooth height map", _smoothness > 0, isChecked => { _smoothness = isChecked ? 1e6f : 0; _updateGeometryTexture = true; }); SampleHelper.AddSlider( panel, "Height map cell size", null, 0.5f, 4f, TerrainNode.Terrain.Tiles[0].CellSize, value => { foreach (var tile in TerrainNode.Terrain.Tiles) tile.CellSize = value; _updateGeometryTexture = true; }); SampleHelper.AddCheckBox( panel, "Nearest neighbor mipmaps", _useNearestNeighborMipmaps, isChecked => { _useNearestNeighborMipmaps = isChecked; _updateGeometryTexture = true; }); var texelsPerLevelList = new List<int> { 64, 128, 256 }; SampleHelper.AddDropDown( panel, "Cells per level", texelsPerLevelList, texelsPerLevelList.IndexOf(TerrainNode.BaseClipmap.CellsPerLevel), value => TerrainNode.BaseClipmap.CellsPerLevel = value); SampleHelper.AddSlider( panel, "Number of levels", "F0", 1, 6, TerrainNode.BaseClipmap.NumberOfLevels, value => TerrainNode.BaseClipmap.NumberOfLevels = (int)value); var detailTexelsPerLevelList = new List<int> { 512, 1024, 1365 }; #else var detailTexelsPerLevelList = new List<int> { 512, 1024, 1365, 2048 }; SampleHelper.AddDropDown( panel, "Detail clipmap cells per level", detailTexelsPerLevelList, detailTexelsPerLevelList.IndexOf(TerrainNode.DetailClipmap.CellsPerLevel), value => { TerrainNode.DetailClipmap.CellsPerLevel = value; _updateDetailClipmapCellSizes = true; }); SampleHelper.AddSlider( panel, "Number of detail clipmap levels", "F0", 1, 9, TerrainNode.DetailClipmap.NumberOfLevels, value => { TerrainNode.DetailClipmap.NumberOfLevels = (int)value; _updateDetailClipmapCellSizes = true; }); SampleHelper.AddSlider( panel, "Mipmap bias", null, -10, 10, TerrainNode.DetailClipmap.LevelBias, value => TerrainNode.DetailClipmap.LevelBias = value); SampleHelper.AddCheckBox( panel, "Enable mipmap", TerrainNode.DetailClipmap.EnableMipMap, isChecked => TerrainNode.DetailClipmap.EnableMipMap = isChecked); SampleHelper.AddCheckBox( panel, "Enable anisotropic filtering", TerrainNode.DetailClipmap.EnableAnisotropicFiltering, isChecked => TerrainNode.DetailClipmap.EnableAnisotropicFiltering = isChecked); }
private void CreateGuiControls() { var panel = SampleFramework.AddOptions("Vegetation"); var swayPanel = SampleHelper.AddGroupBox(panel, "Swaying"); SampleHelper.AddSlider( swayPanel, "Wind wave frequency", "F2", 0, 0.5f, _windWaveFrequency, value => { _windWaveFrequency = value; UpdateMaterialEffectParameters(); }); SampleHelper.AddSlider( swayPanel, "Wind wave randomness", "F2", 0, 1, _windWaveRandomness, value => { _windWaveRandomness = value; UpdateMaterialEffectParameters(); }); SampleHelper.AddSlider( swayPanel, "Trunk frequency multiplier", "F2", 0, 10, _trunkFrequencyMultiplier, value => { _trunkFrequencyMultiplier = value; UpdateMaterialEffectParameters(); }); SampleHelper.AddSlider( swayPanel, "Branch frequency multiplier", "F2", 0, 10, _branchFrequencyMultiplier, value => { _branchFrequencyMultiplier = value; UpdateMaterialEffectParameters(); }); SampleHelper.AddSlider( swayPanel, "Trunk scale multiplier", "F2", 0, 10, _trunkScaleMultiplier, value => { _trunkScaleMultiplier = value; UpdateMaterialEffectParameters(); }); SampleHelper.AddSlider( swayPanel, "Branch scale multiplier", "F2", 0, 10, _branchScaleMultiplier, value => { _branchScaleMultiplier = value; UpdateMaterialEffectParameters(); }); SampleHelper.AddSlider( swayPanel, "Leaf scale multiplier", "F2", 0, 10, _leafScaleMultiplier, value => { _leafScaleMultiplier = value; UpdateMaterialEffectParameters(); }); SampleHelper.AddDropDown( swayPanel, "Render vertex color", EnumHelper.GetValues(typeof(VertexColorChannel)), 0, item => { _vertexColorChannel = (VertexColorChannel)item; UpdateMaterialEffectParameters(); }); SampleHelper.AddCheckBox( panel, "Enable translucency", true, isChecked => { _enableTranslucency = isChecked; UpdateMaterialEffectParameters(); }); SampleHelper.AddCheckBox( panel, "Draw debug info", _drawDebugInfo, isChecked => _drawDebugInfo = isChecked); SampleFramework.ShowOptionsWindow("Vegetation"); }
private void CreateGuiControls() { var optionsPanel = SampleFramework.AddOptions("Shadows"); // ----- Shadow controls var shadowPanel = SampleHelper.AddGroupBox(optionsPanel, "Shadow"); SampleHelper.AddSlider( shadowPanel, "Shadow map resolution", "F0", 16, 1024, _cascadedShadow.PreferredSize, value => { _cascadedShadow.PreferredSize = (int)value; _cascadedShadow.ShadowMap.SafeDispose(); _cascadedShadow.ShadowMap = null; }); SampleHelper.AddCheckBox( shadowPanel, "Prefer 16 bit", _cascadedShadow.Prefer16Bit, isChecked => { _cascadedShadow.Prefer16Bit = isChecked; _cascadedShadow.ShadowMap.SafeDispose(); _cascadedShadow.ShadowMap = null; }); SampleHelper.AddSlider( shadowPanel, "Number of cascades", "F0", 1, 4, _cascadedShadow.NumberOfCascades, value => { _cascadedShadow.NumberOfCascades = (int)value; switch ((int)value) { case 1: _cascadedShadow.Distances = new Vector4(80); break; case 2: _cascadedShadow.Distances = new Vector4(20, 80, 80, 80); break; case 3: _cascadedShadow.Distances = new Vector4(12, 20, 80, 80); break; case 4: _cascadedShadow.Distances = new Vector4(4, 12, 20, 80); break; } _cascadedShadow.ShadowMap.SafeDispose(); _cascadedShadow.ShadowMap = null; }); SampleHelper.AddSlider( shadowPanel, "Depth bias", "F2", 0, 10, _cascadedShadow.DepthBias.X, value => _cascadedShadow.DepthBias = new Vector4(value)); SampleHelper.AddSlider( shadowPanel, "Normal offset", "F2", 0, 10, _cascadedShadow.NormalOffset.X, value => _cascadedShadow.NormalOffset = new Vector4(value)); SampleHelper.AddSlider( shadowPanel, "Number of samples", "F0", -1, 32, _cascadedShadow.NumberOfSamples, value => _cascadedShadow.NumberOfSamples = (int)value); SampleHelper.AddSlider( shadowPanel, "Filter radius", "F2", 0, 10, _cascadedShadow.FilterRadius, value => _cascadedShadow.FilterRadius = value); SampleHelper.AddSlider( shadowPanel, "Jitter resolution", "F0", 1, 10000, _cascadedShadow.JitterResolution, value => _cascadedShadow.JitterResolution = value); SampleHelper.AddSlider( shadowPanel, "Fade-out range", "F2", 0, 1, _cascadedShadow.FadeOutRange, value => _cascadedShadow.FadeOutRange = value); SampleHelper.AddSlider( shadowPanel, "Shadow fog", "F2", 0, 1, _cascadedShadow.ShadowFog, value => _cascadedShadow.ShadowFog = value); SampleHelper.AddDropDown( shadowPanel, "Cascade split selection", new[] { ShadowCascadeSelection.Fast, ShadowCascadeSelection.Best, ShadowCascadeSelection.BestDithered, }, (int)_cascadedShadow.CascadeSelection, item => _cascadedShadow.CascadeSelection = item); SampleHelper.AddCheckBox( shadowPanel, "Visualize cascades", _cascadedShadow.VisualizeCascades, isChecked => _cascadedShadow.VisualizeCascades = isChecked); // ----- Shadow map caching var cachingPanel = SampleHelper.AddGroupBox(optionsPanel, "Shadow map caching"); cachingPanel.Children.Add(new TextBlock { Text = "Set a value > 0 to update shadow map less frequently.", Margin = new Vector4(0, 0, SampleHelper.Margin, 0), }); SampleHelper.AddSlider( cachingPanel, "Cascade 0", "F0", 0, 10, _targetSkippedFrames[0], value => _targetSkippedFrames[0] = (int)value); SampleHelper.AddSlider( cachingPanel, "Cascade 1", "F0", 0, 10, _targetSkippedFrames[1], value => _targetSkippedFrames[1] = (int)value); SampleHelper.AddSlider( cachingPanel, "Cascade 2", "F0", 0, 10, _targetSkippedFrames[2], value => _targetSkippedFrames[2] = (int)value); SampleHelper.AddSlider( cachingPanel, "Cascade 3", "F0", 0, 10, _targetSkippedFrames[3], value => _targetSkippedFrames[3] = (int)value); SampleFramework.ShowOptionsWindow("Shadows"); }