public override void Draw(GraphicsDevice g, float worldTime, Camera cam, Vector3 color)
        {
            Sim.Settings.Graphics gs = Sim.Settings.Graphics.Default;
            Effect.Parameters["matWorld"].SetValue(WorldMatrix);
            Effect.Parameters["matProjection"].SetValue(cam.Projection);
            Effect.Parameters["matView"].SetValue(cam.View);
            Effect.Parameters["fTime"].SetValue(worldTime / 500);
            Effect.Parameters["fTurbulence"].SetValue(gs.WindTurbulence);
            Effect.Parameters["vVelocity"].SetValue(new Vector3(gs.WindX, -15, gs.WindZ));
            Effect.Parameters["vColor"].SetValue(color);

            g.RenderState.DepthBufferWriteEnable = false;
            g.VertexDeclaration = vDec;
            g.Vertices[0].SetSource(vBuffer, 0, VertexPointSpriteParticle.SizeInBytes);

            Effect.Begin();
            Effect.CurrentTechnique.Passes[0].Begin();
            g.DrawPrimitives(PrimitiveType.PointList, 0, particles.Length);
            Effect.CurrentTechnique.Passes[0].End();
            Effect.End();

            g.RenderState.DepthBufferWriteEnable = true;
        }
예제 #2
0
        private void SetupGC(Viewport vp)
        {
            gc.Clear();


            Sim.Environment.World world   = manager.UI.Sim.World;
            Rectangle             gcArea  = new Rectangle(0, 0, vp.Width / 3, (int)(vp.Height / 1.5f));
            ControlMat            gcSpace = new ControlMat(gcArea, 16, 1, 2, ControlMat.FillOrder.RowsFirst);
            int i = 0;

            gc.Add(new Label("Drawing Options", gcSpace.Spaces[i++], Label.Fit.AlignCenter));

            Spinner <FillMode> gcFillSpinner = new Spinner <FillMode>("Fill Mode", gcSpace.Spaces[i++]);

            gcFillSpinner.Add(FillMode.Solid);
            gcFillSpinner.Add(FillMode.WireFrame);
            gcFillSpinner.Add(FillMode.Point);
            gcFillSpinner.Use += delegate() { world.FillMode = gcFillSpinner.GetSelected(); };
            gc.Add(gcFillSpinner);
            gc.Disable(manager.UI);

            Sim.Settings.Graphics gs = Sim.Settings.Graphics.Default;

            gc.Add(new Button("Sky", gcSpace.Spaces[i ++], delegate() { world.Sky.Visible = !world.Sky.Visible; }));
            gc.Add(new Button("Terrain", gcSpace.Spaces[i ++], delegate() { world.Terrain.Visible = !world.Terrain.Visible; }));
            gc.Add(new Button("Water", gcSpace.Spaces[i ++], delegate() { world.Water.Visible = !world.Water.Visible; }));
            gc.Add(new Button("Axes", gcSpace.Spaces[i ++], delegate() { world.DrawAxes = !world.DrawAxes; }));
            gc.Add(new Button("Vegetation", gcSpace.Spaces[i ++], delegate() { world.Vegetation.Visible = !world.Vegetation.Visible; }));
            gc.Add(new Button("AI Nodes", gcSpace.Spaces[i ++], delegate() { world.Terrain.DrawNodes = !world.Terrain.DrawNodes; }));
            gc.Add(new Button("Terrain Normals", gcSpace.Spaces[i ++], delegate() { world.Terrain.DrawNormals = !world.Terrain.DrawNormals; }));
            gc.Add(new Button("Detail Texturing", gcSpace.Spaces[i ++], delegate() {
                gs.TerrainDetail = !gs.TerrainDetail;
                world.Terrain.Effect.Parameters["bDetailEnabled"].SetValue(gs.TerrainDetail);
            }));
            gc.Add(new Button("Bump Mapping", gcSpace.Spaces[i ++], delegate() {
                gs.BumpEnabled = !gs.BumpEnabled;
                world.Terrain.Effect.Parameters["bBumpEnabled"].SetValue(gs.BumpEnabled);
            }));
            gc.Add(new Button("Shadow Mapping", gcSpace.Spaces[i ++], delegate() {
                gs.ShadowsEnabled = !gs.ShadowsEnabled;
                Shaders.Common.Parameters["bShadowsEnabled"].SetValue(gs.ShadowsEnabled);
            }));
            gc.Add(new Button("Bloom", gcSpace.Spaces[i ++], delegate()
            {
                gs.BloomEnabled = !gs.BloomEnabled;
            }));

            Slider biSlider = new Slider("Bloom Intes.", gcSpace.Spaces[i++], 0, 10);

            biSlider.SetValue(1.25f);
            biSlider.Use += delegate(float v) { manager.UI.Sim.PostProcessManager.Bloom.SetIntensity(v); };
            gc.Add(biSlider);

            Slider btSlider = new Slider("Bloom Thres.", gcSpace.Spaces[i++], 0, 1);

            btSlider.SetValue(0.6f);
            btSlider.Use += delegate(float v) { manager.UI.Sim.PostProcessManager.Bloom.SetThreshold(v); };
            gc.Add(btSlider);

            Slider bbSlider = new Slider("Bloom Blur", gcSpace.Spaces[i++], 0, 20);

            bbSlider.SetValue(8);
            bbSlider.Use += delegate(float v) { manager.UI.Sim.PostProcessManager.Bloom.SetBlur(v); };
            gc.Add(bbSlider);
        }