public override void Init()
        {
            Content.ContentPath = "Data";

            Instance = this;

            Scene = new Scene();
            Scene.View = this;
            Scene.Camera = new LookatCartesianCamera()
            {
                Position = new Vector3(10, 10, 10),
                Lookat = Vector3.Zero,
                ZFar = 100,
                AspectRatio = AspectRatio
            };
            sceneQuadtree = new Common.Quadtree<Entity>(0, 0, 100, 100, 10);
            sbau = new SceneBVHAutoSyncer(Scene, sceneQuadtree);

            StateManager = new Device9StateManager(Device9);

            Graphics.Renderer.IRenderer Renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = Scene,
                StateManager = StateManager,
                Settings = new Graphics.Renderer.Settings()
                {
                    FogDistance = 100,
                    WaterLevel = -55
                }
            };

            SRC = new SortedTestSceneRendererConnector
            {
                Scene = Scene,
                Renderer = Renderer,
            };

            Renderer.Initialize(Scene.View);
            SRC.Initialize();

            Scene.Add(exquemelin = new Entity
            {
                MainGraphic = new Graphics.Content.MetaModel
                {
                    SkinnedMesh = new Graphics.Content.SkinnedMeshFromFile("Models/Units/MainCharacter1.x"),
                    Texture = new Graphics.Content.TextureFromFile("Models/Units/MainCharacter1.png"),
                    World = Matrix.Scaling(0.5f, 0.5f, 0.5f) * Graphics.Content.SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Translation(0, 0, -4f),
                },
                VisibilityLocalBounding = new Common.Bounding.NonfittableBounding(Vector3.Zero, false, true)

            });

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)Scene.Camera,
            };
        }
示例#2
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            Instance = this;

            Scene        = new Scene();
            Scene.View   = this;
            Scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };
            sceneQuadtree = new Common.Quadtree <Entity>(0, 0, 100, 100, 10);
            sbau          = new SceneBVHAutoSyncer(Scene, sceneQuadtree);

            StateManager = new Device9StateManager(Device9);

            Graphics.Renderer.IRenderer Renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene        = Scene,
                StateManager = StateManager,
                Settings     = new Graphics.Renderer.Settings()
                {
                    FogDistance = 100,
                    WaterLevel  = -55
                }
            };

            SRC = new SortedTestSceneRendererConnector
            {
                Scene    = Scene,
                Renderer = Renderer,
            };

            Renderer.Initialize(Scene.View);
            SRC.Initialize();

            Scene.Add(exquemelin = new Entity
            {
                MainGraphic = new Graphics.Content.MetaModel
                {
                    SkinnedMesh = new Graphics.Content.SkinnedMeshFromFile("Models/Units/MainCharacter1.x"),
                    Texture     = new Graphics.Content.TextureFromFile("Models/Units/MainCharacter1.png"),
                    World       = Matrix.Scaling(0.5f, 0.5f, 0.5f) * Graphics.Content.SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Translation(0, 0, -4f),
                },
                VisibilityLocalBounding = new Common.Bounding.NonfittableBounding(Vector3.Zero, false, true)
            });

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)Scene.Camera,
            };
        }
        public override void Init()
        {
            Content.ContentPath = "Data";

            Scene        = new Scene();
            Scene.View   = this;
            Scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };
            sceneQuadtree = new Common.Quadtree <Entity>(10);
            sbau          = new SceneBVHAutoSyncer(Scene, sceneQuadtree);

            StateManager = new Device9StateManager(Device9);

            Renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = Scene, StateManager = StateManager, Settings = new Graphics.Renderer.Settings {
                    ShadowQuality = Graphics.Renderer.Settings.ShadowQualities.NoShadows
                }
            };
            Renderer.Initialize(this);
            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Scene    = Scene,
                Renderer = Renderer
            };
            sceneRendererConnector.Initialize();

            Scene.Add(exquemelin = new Entity
            {
                MainGraphic = new Graphics.Content.MetaModel
                {
                    SkinnedMesh = new Graphics.Content.SkinnedMeshFromFile("Models/Units/Zombie1.x"),
                    Texture     = new Graphics.Content.TextureFromFile("Models/Units/Zombie1.png"),
                    World       = Graphics.Content.SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Scaling(0.5f, 0.5f, 0.5f),
                    HasAlpha    = false,
                },
                VisibilityLocalBounding = new Common.Bounding.NonfittableBounding(Vector3.Zero, false, true)
            });

            Graphics.Renderer.Renderer.EntityAnimation ea = Scene.View.Content.Peek <Graphics.Renderer.Renderer.EntityAnimation>(exquemelin.MetaEntityAnimation);

            ea.PlayAnimation(new AnimationPlayParameters("Idle1", true));

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)Scene.Camera,
            };
        }
        public override void Init()
        {
            Content.ContentPath = "Data";
            Instance            = this;

            scene            = new Scene();
            scene.DesignMode = true;
            scene.View       = this;
            scene.Camera     = new LookatCartesianCamera()
            {
                ZFar        = 100,
                AspectRatio = AspectRatio
            };
            ((LookatCamera)scene.Camera).Lookat   = new Vector3(SceneSize.Width / 2f, SceneSize.Height / 2f, 0);
            ((LookatCamera)scene.Camera).Position = ((LookatCamera)scene.Camera).Lookat + new Vector3(10, 10, 10);
            scene.EntityAdded   += new Action <Entity>(scene_EntityAdded);
            scene.EntityRemoved += new Action <Entity>(scene_EntityRemoved);
            sceneQuadtree        = new Common.Quadtree <Entity>(0, 0, SceneSize.Width, SceneSize.Height, 10);
            sbau = new SceneBVHAutoSyncer(scene, sceneQuadtree);

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Device9StateManager(Device9)
            };
            renderer.Initialize(this);
            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Scene    = scene,
                Renderer = renderer
            };
            sceneRendererConnector.Initialize();

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = new Graphics.InteractiveSceneManager {
                    Scene = scene
                },
            };

            timer          = new System.Windows.Forms.Timer();
            timer.Tick    += new EventHandler(timer_Tick);
            timer.Interval = 1;
            timer.Enabled  = true;

            RedGate.Profiler.UserEvents.ProfilerEvent.SignalEvent("Starting to add initial objects");
            for (int i = 0; i < nInitialEntities; i++)
            {
                CreateRandomTestEntity();
            }
            RedGate.Profiler.UserEvents.ProfilerEvent.SignalEvent("Starting CRUSHING!");
        }
示例#5
0
        public override void Init()
        {
            Content.ContentPath = "Data";
            Instance            = this;

            scene        = new Scene();
            scene.View   = this;
            scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };
            sceneQuadtree = new Common.Quadtree <Entity>(0, 0, 100, 100, 10);
            sbau          = new SceneBVHAutoSyncer(scene, sceneQuadtree);
            //heightmap = TextureUtil.ToHeightmap(Content.Peek<Texture>(new TextureFromFile("testheightmap.png")), 100);
            heightmap = new Graphics.Software.Texel.R32F[250, 250];
            texture   = new Graphics.Software.Texture <Graphics.Software.Texel.R32F>(heightmap);

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Device9StateManager(Device9)
            };
            renderer.Settings.ShadowQuality = Settings.ShadowQualities.NoShadows;
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene    = scene
            };
            sceneRendererConnector.Initialize();

            scene.Add(ground = new TestGround
            {
                Size      = new SizeF(100, 100),
                Heightmap = heightmap,
                NPieces   = new Size(20, 20),
                Height    = 1
            });
            ground.ConstructPieces();

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)scene.Camera
            };
        }
示例#6
0
        public override void PreRender(float dtime)
        {
            Graphics.Renderer.Renderer renderer = (Graphics.Renderer.Renderer)Game.Instance.Renderer;

            renderer.CalcShadowmapCamera(renderer.Settings.LightDirection, 0f);
#if BETA_RELEASE
            ClientProfilers.Culling.Start();
#endif
            if (Client.Game.Game.Instance.sceneQuadtree != null)
            {
                SceneRendererConnector.CullScene(Client.Game.Game.Instance.sceneQuadtree);
            }
#if BETA_RELEASE
            ClientProfilers.Culling.Stop();
#endif
            state.PreRender(dtime);
        }
        public override void Update(float dtime)
        {
            base.Update(dtime);
            var o = npc.VisibilityWorldBounding;

            if (InputHandler is WalkaroundCameraInputHandler && !Paused)
            {
                motionSimulation.Step(dtime);
                if (npc.MotionObject.Position.Z < 0.5f)
                {
                    Console.Write("asd");
                }
            }

            if (InputHandler != null)
            {
                InputHandler.ProcessMessage(MessageType.Update, new UpdateEventArgs {
                    Dtime = dtime
                });
            }

            Graphics.Renderer.Renderer renderer = (Graphics.Renderer.Renderer) this.renderer;

            sceneRendererConnector.CullScene(sceneQuadtree);
            sceneRendererConnector.UpdateAnimations(dtime);

            renderer.PreRender(dtime);
            Device9.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.DarkSlateGray, 1.0f, 0);

            /////////////////////////////////////////////////////////////////////
            Device9.BeginScene();

            renderer.Render(dtime);
            editorRenderer.Render(this);

            if (activeGrid != null)
            {
                DrawGrid(activeGrid);
            }

            Device9.EndScene();
            /////////////////////////////////////////////////////////////////////

            Window.Text = "FPS: " + FPS + ", NPos: " + npc.Translation /*+ ", PPos: " + pursuer.Translation*/;
        }
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene      = new Scene();
            scene.View = this;

            scene.Camera = new LookatCartesianCamera()
            {
                Lookat      = new Vector3(size.Width / 2f, size.Height / 2f, 0),
                Position    = new Vector3(10, 10, 10),
                FOV         = 0.5f,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)scene.Camera
            };

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9), Settings = new Graphics.Renderer.Settings {
                    WaterEnable = false
                }
            };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene    = scene
            };
            sceneRendererConnector.Initialize();

            motionSimulation = new Common.Motion.Simulation();

            scene.EntityAdded += new Action <Entity>(scene_EntityAdded);
            CreateGround();
            scene.EntityAdded -= new Action <Entity>(scene_EntityAdded);
        }
示例#9
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene      = new Scene();
            scene.View = this;

            scene.Camera = new LookatCartesianCamera()
            {
                Lookat      = new Vector3(0, 0, 0),
                Position    = new Vector3(0, 0, 10),
                FOV         = 0.5f,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = new InteractiveSceneManager {
                    Scene = scene
                },
            };

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9)
            };
            renderer.Initialize(this);

            motionSimulation = new Common.Motion.Simulation();

            scene.EntityRemoved += new Action <Entity>(scene_EntityRemoved);
            scene.EntityAdded   += new Action <Entity>(scene_EntityAdded);

            scene.Add(CreateBlock(-Vector3.UnitZ, new Vector3(size.Width, size.Height, 1), "grass1.png"));
            InitiateUnits();
        }
示例#10
0
        public override void Update(float dtime)
        {
            base.Update(dtime);

            Graphics.Renderer.Renderer renderer = (Graphics.Renderer.Renderer)Renderer;

            if (sceneQuadtree != null)
            {
                sceneRendererConnector.CullScene(sceneQuadtree);
            }

            sceneRendererConnector.UpdateAnimations(dtime);

            Renderer.PreRender(dtime);

            Device9.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.FromArgb(1, (int)(0.6 * 255), (int)(0.8 * 255), 255), 1.0f, 0);

            Device9.BeginScene();

            Renderer.Render(dtime);

            Device9.EndScene();
        }
        public override void Init()
        {
            if (DesignMode)
            {
                return;
            }

            Content.ContentPath = "Data(.kel)";
            Client.Game.Map.GameEntity.ContentPool = Content;

            Scene.View   = this;
            Scene.Camera = new LookatSphericalCamera()
            {
                FOV  = 0.5f,
                ZFar = 50,
                SphericalCoordinates = Program.ClientDefaultSettings.CameraSphericalCoordinates,
                AspectRatio          = this.AspectRatio
            };
            Controller = new InteractiveSceneManager {
                Scene = Scene
            };
            StateManager = new DummyDevice9StateManager(Device9);
            InputHandler = inputHandlersRoot;

            cameraInputHandler = new CameraInputHandler
            {
                Camera = (LookatSphericalCamera)Scene.Camera,
                View   = this,
            };
            Scene.Camera.ZFar = 50;
            inputHandlersRoot.InputHandlers.Add(cameraInputHandler);
            cameraInputHandler.InputHandler = Controller;

            if (Program.Settings.UseDummyRenderer)
            {
                throw new NotSupportedException("Dummy renderer is no longer supported.");
                //Renderer = new Graphics.DummyRenderer.Renderer { Scene = Scene, StateManager = StateManager };
            }
            else
            {
                Renderer = new Graphics.Renderer.Renderer(Device9)
                {
                    Scene        = Scene,
                    StateManager = StateManager,
                    Settings     = new Graphics.Renderer.Settings
                    {
                        ShadowQuality   = Graphics.Renderer.Settings.ShadowQualities.Medium,
                        LightingQuality = Graphics.Renderer.Settings.LightingQualities.High
                    }
                };
                SceneRendererConnector = new SortedTestSceneRendererConnector
                {
                    Scene    = Scene,
                    Renderer = Renderer
                };
            }

            Renderer.Settings.TerrainQuality  = Graphics.Renderer.Settings.TerrainQualities.High;
            Renderer.Settings.LightingQuality = Graphics.Renderer.Settings.LightingQualities.High;
            Renderer.Settings.ShadowQuality   = Graphics.Renderer.Settings.ShadowQualities.Low;

            SceneRendererConnector.Initialize();
            Renderer.Initialize(Scene.View);

            if (Program.Settings.DeveloperSettings)
            {
                p1 = new System.Windows.Forms.PropertyGrid {
                    SelectedObject = Renderer.Settings, Dock = System.Windows.Forms.DockStyle.Fill
                };
                form1.Controls.Add(p1);
                form1.Show();
            }

            bvRenderer = new BoundingVolumesRenderer
            {
                StateManager = StateManager,
                View         = this
            };

            tooltip = new System.Windows.Forms.ToolTip();

            StartDefaultMode();
        }
示例#12
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            Instance = this;

            Scene        = new Scene();
            Scene.View   = this;
            Scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 10000,
                AspectRatio = AspectRatio
            };
            sceneQuadtree = new Common.Quadtree <Entity>(0, 0, 100, 100, 10);
            sbau          = new SceneBVHAutoSyncer(Scene, sceneQuadtree);

            StateManager = new Device9StateManager(Device9);

            int nVertices = 10;
            int nFaces    = nVertices * 2 - 4;
            int nIndices  = nFaces * 3;

            List <int> indices = new List <int>();
            List <Graphics.Software.Vertex.Position3Normal3Texcoord3> vertices = new List <Graphics.Software.Vertex.Position3Normal3Texcoord3>();

            for (int i = 0; i < (nVertices / 2) - 1; i++)
            {
                indices.Add(i * 2);
                indices.Add(i * 2 + 2);
                indices.Add(i * 2 + 1);

                indices.Add(i * 2 + 1);
                indices.Add(i * 2 + 2);
                indices.Add(i * 2 + 3);

                indices.Add(i * 2 + 0);
                indices.Add(i * 2 + 1);
                indices.Add(i * 2 + 3);

                indices.Add(i * 2 + 0);
                indices.Add(i * 2 + 3);
                indices.Add(i * 2 + 2);
            }

            for (int i = 0; i < nVertices / 2; i++)
            {
                float texturecoord = 1 - ((float)i / (float)nVertices);

                if (texturecoord > 0.99f)
                {
                    texturecoord = 0.99f;
                }

                vertices.Add(new Graphics.Software.Vertex.Position3Normal3Texcoord3(Vector3.UnitX * i, Vector3.Zero, new Vector3(texturecoord, 1, 0)));
                vertices.Add(new Graphics.Software.Vertex.Position3Normal3Texcoord3(Vector3.UnitX * i + Vector3.UnitY * 4.0f, Vector3.Zero, new Vector3(texturecoord, 0, 0)));
            }

            arrow = new MetaModel
            {
                HasAlpha = true,
                Opacity  = 0.4f,
                XMesh    = new MeshConcretize
                {
                    Mesh = new Graphics.Software.Mesh
                    {
                        IndexBuffer        = new Graphics.Software.IndexBuffer(indices.ToArray()),
                        VertexBuffer       = new VertexBuffer <Graphics.Software.Vertex.Position3Normal3Texcoord3>(vertices.ToArray()),
                        NVertices          = nVertices,
                        NFaces             = nFaces,
                        VertexStreamLayout = global::Graphics.Software.Vertex.Position3Normal3Texcoord3.Instance,
                    },
                    Layout = global::Graphics.Software.Vertex.PositionNormalTexcoord.Instance
                },
                Texture = new TextureFromFile("green.png"),
            };

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)Scene.Camera
            };

            Renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = Scene, StateManager = StateManager, Settings = new Graphics.Renderer.Settings {
                    FogDistance = 50000, WaterLevel = 0
                }
            };
            Renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = Renderer,
                Scene    = Scene
            };
            sceneRendererConnector.Initialize();

            Scene.Add(new Entity
            {
                MainGraphic             = arrow,
                VisibilityLocalBounding = Vector3.Zero,
            });
        }
        public override void Init()
        {
            if (DesignMode)
            {
                return;
            }

            Content.ContentPath = "Data";

            scene      = new Scene();
            scene.View = this;

            scene.Camera = new LookatCartesianCamera()
            {
                Lookat      = Vector3.Zero,
                Position    = new Vector3(-15, 15, 15),
                FOV         = 0.5f,
                ZFar        = 400,
                AspectRatio = AspectRatio
            };

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene        = scene,
                Settings     = new Graphics.Renderer.Settings(),
                StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9)
            };
            renderer.Initialize(this);
            sceneQuadtree          = new Common.Quadtree <Entity>(10);
            sbau                   = new SceneBVHAutoSyncer(scene, sceneQuadtree);
            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene    = scene
            };
            sceneRendererConnector.Initialize();

            navMesh = new Common.Pathing.NavMesh();

            worldViewProbe = new Graphics.WorldViewProbe(this, scene.Camera);
            editor         = new Graphics.Editors.BoundingRegionEditor(this, worldViewProbe);
            editor.Region  = navMesh.BoundingRegion;

            editorRenderer = new Graphics.Editors.BoundingRegionEditor.Renderer9(editor)
            {
                StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9),
                Camera       = scene.Camera
            };
            InputHandler = editor;
            inputHandlers.Add(editor);
            inputHandlers.Add(new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = new InteractiveSceneManager {
                    Scene = scene
                },
                //FilteredMessages = new MessageType[] { }
            });

            var sim = new Common.Motion.Simulation(navMesh);

            ((Common.Motion.Simulation)sim).SetHeightMap(new float[][] { new float[] { 0.5f } }, new Vector2(400, 400), new Vector2(-200, -200));
            motionSimulation = sim;
            //motionSimulation = new Common.Motion.ThreadSimulationProxy(sim);

            var ground = CreateBlock(new Vector3(-200, -200, -0.5f), new Vector3(400, 400, 1), "Models/GroundTextures/Grass1.png");

            scene.Add(ground);
            motionSimulation.Insert(ground.MotionObject);

            npc = CreateNPC(new Vector2(-2, -2));
            scene.Add(npc);
            motionSimulation.Insert(npc.MotionObject);
            ((Common.IMotion.IUnit)npc.MotionObject).VelocityImpulse(new Vector3(0, 0, 0.1f));
            ((Common.IMotion.INPC)npc.MotionObject).Weight = 10000000f;
            AddCreatedGridEvent(npc);
            //((Common.Motion.NPC)npc.MotionObject).DebugSolidAsARock = true;


            int     amount = 25;
            Vector2 offset = new Vector2(-4, -4);

            for (int i = 0; i < amount; i++)
            {
                int x = i / (int)System.Math.Sqrt(amount);
                int y = i % (int)System.Math.Sqrt(amount);
                var n = CreateNPC(new Vector2(x, y));
                pursuers.Add(n);
                scene.Add(n);
                motionSimulation.Insert(n.MotionObject);
                ((Common.IMotion.IUnit)n.MotionObject).VelocityImpulse(new Vector3(0, 0, 0.1f));
                AddCreatedGridEvent(n);
            }
        }
示例#14
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene        = new Scene();
            scene.View   = this;
            scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(-5, 5, 5),
                AspectRatio = AspectRatio
            };


            foreach (var v in scene.AllEntities)
            {
                v.VisibilityLocalBounding = Vector3.Zero;
            }

            Device9StateManager sm = new Device9StateManager(Device9);

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = sm
            };
            renderer.Initialize(this);
            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Scene    = scene,
                Renderer = renderer
            };
            sceneRendererConnector.Initialize();

            bvr = new BoundingVolumesRenderer
            {
                View         = this,
                StateManager = sm
            };

            BVEntity t;

            scene.Add(t = new BVEntity
            {
                MainGraphic = new MetaModel
                {
                    XMesh   = new MeshFromFile("Models/Props/Barrel1.x"),
                    Texture = new TextureFromFile("Models/Props/Barrel1.png"),
                    World   = Matrix.Scaling(0.1f, 0.1f, 0.1f) * SkinnedMesh.InitSkinnedMeshFromMaya,
                },
                WorldMatrix = Matrix.Translation(1, 0, 0)
            });
            t.BoundingVolume = Graphics.Boundings.Transform(new Graphics.MetaBoundingBox {
                Mesh = ((MetaModel)t.MainGraphic).XMesh
            },
                                                            ((MetaModel)t.MainGraphic).World);
            scene.Add(t = new BVEntity
            {
                MainGraphic = new MetaModel
                {
                    SkinnedMesh = new SkinnedMeshFromFile("Models/Props/Bridge1.x"),
                    Texture     = new TextureFromFile("Models/Props/Bridge1.png"),
                    World       = Matrix.Scaling(0.1f, 0.1f, 0.1f) * SkinnedMesh.InitSkinnedMeshFromMaya
                },
                WorldMatrix = Matrix.Translation(3, 0, 0)
            });
            scene.Add(t = new BVEntity
            {
                MainGraphic = new MetaModel
                {
                    SkinnedMesh = new SkinnedMeshFromFile("Models/Props/Bridge1.x"),
                    Texture     = new TextureFromFile("Models/Props/Bridge1.png"),
                    World       = Matrix.Scaling(0.1f, 0.1f, 0.1f) * SkinnedMesh.InitSkinnedMeshFromMaya
                },
                WorldMatrix = Matrix.Translation(-3, -3, 0)
            });
            t.BoundingVolume = Vector3.Zero;
        }
示例#15
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene        = new Scene();
            scene.View   = this;
            scene.Camera = new LookatCartesianCamera
            {
                Position = new Vector3(-5, 5, 5),
            };

            foreach (var v in scene.AllEntities)
            {
                v.VisibilityLocalBounding = Content.Acquire <Graphics.Content.StructBoxer <BoundingBox> >(v.MainGraphic).Value;
            }

            var stateManager = new Device9StateManager(Device9);

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = stateManager
            };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Scene    = scene,
                Renderer = renderer
            };
            sceneRendererConnector.Initialize();

            editor = new Graphics.Editors.SceneEditor {
                Scene = scene
            };
            editorRenderer = new Graphics.Editors.SceneEditor.Renderer9(editor)
            {
                BoundingVolumesRenderer = new BoundingVolumesRenderer
                {
                    StateManager = stateManager,
                    View         = this
                }
            };

            InputHandler = editor;

            Entity e;

            scene.Add(e = new Entity
            {
                MainGraphic = new MetaModel
                {
                    XMesh   = new MeshFromFile("Models/Props/Barrel1.x"),
                    Texture = new TextureFromFile("Models/Props/Barrel1.png"),
                    World   = Matrix.Scaling(0.1f, 0.1f, 0.1f) * SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Translation(1, 0, 0)
                },
            });
            e.VisibilityLocalBounding = CreateBoundingBoxFromModel((MetaModel)e.MainGraphic);
            e.PickingLocalBounding    = CreateBoundingMeshFromModel(e, (MetaModel)e.MainGraphic);

            scene.Add(e = new Entity
            {
                MainGraphic = new MetaModel
                {
                    SkinnedMesh = new SkinnedMeshFromFile("Models/Props/Bridge1.x"),
                    Texture     = new TextureFromFile("Models/Props/Bridge1.png"),
                    World       = Matrix.Scaling(0.1f, 0.1f, 0.1f) * SkinnedMesh.InitSkinnedMeshFromMaya *
                                  Matrix.Translation(3, 0, 0)
                },
            });
            e.VisibilityLocalBounding = CreateBoundingBoxFromModel((MetaModel)e.MainGraphic);
            e.PickingLocalBounding    = CreateBoundingMeshFromModel(e, (MetaModel)e.MainGraphic);
        }
示例#16
0
        public override void Init()
        {
            Content.ContentPath = "Data";
            Instance            = this;

            scene        = new Scene();
            scene.View   = this;
            scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };
            //heightmap = TextureUtil.ToHeightmap(Content.Peek<Texture>(new TextureFromFile("testheightmap.png")), 100);
            texture = new Graphics.Software.Texture <Graphics.Software.Texel.A8R8G8B8>(new Graphics.Software.Texel.A8R8G8B8[250, 250]);

            scene.Add(ground = new TestGround
            {
                Size = new SizeF(100, 100),
                //Texture = new SingleColorTexture(Color.Orange),
                NPieces = new Size(20, 20),
            });
            ground.ConstructPieces();

            dxTexture = texture.ToTexture9(Device9);

            ground.Texture = new UnmanagedResource <SlimDX.Direct3D9.Texture, SlimDX.Direct3D10.Texture2D> {
                Resource9 = dxTexture
            };

            groundTextureEditor = new Graphics.Editors.GroundTextureEditor
            {
                Camera          = scene.Camera,
                Viewport        = Viewport,
                SoftwareTexture = new[] { texture },
                Texture9        = new[] { dxTexture },
                Position        = ground.Translation,
                Size            = ground.Size,
                GroundIntersect = new WorldViewProbe(this, scene.Camera)
                {
                    WorldProbe = new GroundProbe()
                },
                Pencil = new Graphics.Editors.GroundTexturePencil
                {
                    Color  = new Vector4(0, 0, 1, 0),
                    Radius = 5,
                    Type   = Graphics.Editors.GroundTexturePencilType.AddSaturate
                }
            };
            groundTextureEditor.TextureValuesChanged += new Graphics.Editors.TextureValuesChangedEventHandler((o, e) =>
            {
            });
            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = groundTextureEditor,
            };

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Device9StateManager(Device9)
            };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene    = scene
            };
            sceneRendererConnector.Initialize();
        }
示例#17
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene        = new Scene();
            scene.View   = this;
            scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };
            //heightmap = TextureUtil.ToHeightmap(Content.Peek<Texture>(new TextureFromFile("testheightmap.png")), 100);
            texture = new Graphics.Software.Texture <Graphics.Software.Texel.A8R8G8B8>(
                new Graphics.Software.Texel.A8R8G8B8[250, 250]);

            var r = new Random();

            for (int y = 0; y < texture.Size.Height; y++)
            {
                for (int x = 0; x < texture.Size.Width; x++)
                {
                    texture[y, x] =
                        new Graphics.Software.Texel.A8R8G8B8
                    {
                        //R = 1f,//(float)r.NextDouble(),
                        //G = (float)r.NextDouble(),
                        //B = (float)r.NextDouble(),
                        A = 1f,
                    }
                }
            }
            ;



            scene.Add(ground = new TestGround
            {
                Size = new SizeF(100, 100),
                //Texture = new SingleColorTexture(Color.Orange),
                NPieces = new Size(20, 20),
            });
            ground.ConstructPieces();

            dxTexture = texture.ToTexture9(Device9);
            UpdateTexture();

            groundTextureEditor = new Graphics.Editors.GroundTextureEditor
            {
                Camera          = scene.Camera,
                Viewport        = Viewport,
                SoftwareTexture = new ITexture[] { texture },
                Texture9        = new[] { dxTexture },
                Position        = ground.Translation,
                Size            = ground.Size,
                GroundIntersect = new WorldViewProbe(this, scene.Camera)
                {
                    WorldProbe = new GroundProbe()
                },
                Pencil = new Graphics.Editors.GroundTexturePencil
                {
                    Color  = new Vector4(1, 0, 0, 0),
                    Radius = 30,
                    Type   = Graphics.Editors.GroundTexturePencilType.Add
                }
            };
            groundTextureEditor.TextureValuesChanged += new Graphics.Editors.TextureValuesChangedEventHandler((o, e) =>
            {
                UpdateTexture();
                foreach (var v in ground.Children)
                {
                    v.Invalidate();
                }
            });
            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = groundTextureEditor
            };

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene        = scene,
                StateManager = new Device9StateManager(Device9)
            };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Scene    = scene,
                Renderer = renderer
            };
            sceneRendererConnector.Initialize();
        }
示例#18
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            Instance = this;

            Scene        = new Scene();
            Scene.View   = this;
            Scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 10000,
                AspectRatio = AspectRatio
            };
            sceneQuadtree = new Common.Quadtree <Entity>(-1, -1, 100, 100, 10);
            sbau          = new SceneBVHAutoSyncer(Scene, sceneQuadtree);

            StateManager = new Device9StateManager(Device9);

            arrow = new MetaModel
            {
                HasAlpha         = true,
                IsAxialBillboard = true,
                AxialDirection   = new Vector3(0.5f, 0.5f, 0),
                XMesh            = new Graphics.Content.MeshFromFile("Arrow.x"),
                Texture          = new TextureFromFile("green.png"),
                Visible          = Priority.High,
                World            = Matrix.Identity,
            };

            direction = new Vector3(1, 0, 0);

            axialBillboard = new MetaModel
            {
                HasAlpha         = true,
                IsAxialBillboard = true,
                AxialDirection   = direction,
                XMesh            = new MeshConcretize
                {
                    MeshDescription = new Graphics.Software.Meshes.IndexedPlane
                    {
                        Facings  = Facings.Frontside | Facings.Backside,
                        Position = new Vector3(-0.5f, -0.5f, 0),
                        Size     = new Vector2(1, 1),
                        UVMin    = Vector2.Zero,
                        UVMax    = new Vector2(1, 1)
                    },
                    Layout = global::Graphics.Software.Vertex.PositionNormalTexcoord.Instance
                },
                Texture = new TextureFromFile("Models/Effects/MuzzleFlash1.png"),
                World   = Matrix.RotationX((float)Math.PI / 2.0f) * Matrix.RotationY((float)Math.PI / 2.0f) * Matrix.Translation(direction * 0.5f)
            };

            rand = new Random();

            //axialBillboard.World.Invert();

            nBillboards = 1;
            billboards  = new Entity[nBillboards];
            directions  = new Vector3[nBillboards];

            for (int i = 0; i < nBillboards; i++)
            {
                directions[i] = new Vector3((float)rand.NextDouble() * 2 - 1, (float)rand.NextDouble() * 2 - 1, (float)rand.NextDouble() * 2 - 1);
            }

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)Scene.Camera
            };

            Renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = Scene, StateManager = StateManager, Settings = new Graphics.Renderer.Settings {
                    FogDistance = 50000, WaterLevel = 0
                }
            };
            Renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = Renderer,
                Scene    = Scene
            };
            sceneRendererConnector.Initialize();

            for (int i = 0; i < nBillboards; i++)
            {
                Scene.Add(billboards[i] = new Entity
                {
                    MainGraphic             = axialBillboard,
                    VisibilityLocalBounding = Vector3.Zero,
                    WorldMatrix             = Matrix.Identity
                });
            }
        }
示例#19
0
        public override void Init()
        {
            Content.ContentPath = "Data";


            StateManager = new Device9StateManager(Device9);

            Scene.View = this;

            Renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = Scene, StateManager = StateManager
            };
            Renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = Renderer,
                Scene    = Scene
            };
            sceneRendererConnector.Initialize();

            Scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                AspectRatio = AspectRatio
            };
            Scene.Add(donutEntity = new Entity
            {
                MainGraphic = new Graphics.Content.MetaModel
                {
                    SkinnedMesh = new SkinnedMeshFromFile("Models/Props/Palmtree1.x"),
                    Texture     = new TextureFromFile("Models/Props/Palmtree1.png"),
                    World       = Graphics.Content.SkinnedMesh.InitSkinnedMeshFromMaya
                }
            });
            Scene.Add(goblinEntity = new Entity
            {
                MainGraphic = new Graphics.Content.MetaModel
                {
                    SkinnedMesh = new Graphics.Content.SkinnedMeshFromFile("Models/Units/Brute1.x"),
                    Texture     = new Graphics.Content.TextureFromFile("Models/Units/Brute1.png"),
                    World       = Graphics.Content.SkinnedMesh.InitSkinnedMeshFromMaya * Matrix.Translation(4, 4, 0),
                }
            });
            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)Scene.Camera,
            };

            //donutEntity.PlayAnimation("idle1", 1, true, 0);

            Renderer.Initialize(this);

            System.Windows.Forms.PropertyGrid p1;
            System.Windows.Forms.PropertyGrid p2;

            System.Windows.Forms.Form form1 = new System.Windows.Forms.Form();
            System.Windows.Forms.Form form2 = new System.Windows.Forms.Form();
            form1.Controls.Add(p1 = new System.Windows.Forms.PropertyGrid {
                SelectedObject = Renderer.Settings, Dock = System.Windows.Forms.DockStyle.Fill
            });
            form2.Controls.Add(p2 = new System.Windows.Forms.PropertyGrid {
                SelectedObject = GraphicsDevice.Settings, Dock = System.Windows.Forms.DockStyle.Fill
            });

            form1.Show();
            form2.Show();
        }
示例#20
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            Instance   = this;
            nParticles = 0;

            scene = new Scene
            {
                View   = this,
                Camera = new LookatCartesianCamera
                {
                    Position    = new Vector3(10, 10, 10),
                    Lookat      = Vector3.Zero,
                    ZFar        = 600,
                    AspectRatio = AspectRatio
                }
            };
            sceneQuadtree = new Common.Quadtree <Entity>(10);
            new SceneBVHAutoSyncer(scene, sceneQuadtree);

            stateManager = new DummyDevice9StateManager(Device9);

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene        = scene,
                StateManager = stateManager,
                Settings     = new Graphics.Renderer.Settings
                {
                    CullMode    = Cull.Counterclockwise,
                    FogDistance = 1500,
                }
            };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene    = scene
            };
            sceneRendererConnector.Initialize();

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = new InteractiveSceneManager
                {
                    Scene = scene
                },
            };

            ground = new MetaModel
            {
                AlphaRef = 0,
                HasAlpha = false,
                Texture  = new TextureFromFile("Models/GroundTextures/Grass1.png"),
                XMesh    = new MeshConcretize
                {
                    MeshDescription = new Graphics.Software.Meshes.IndexedPlane
                    {
                        Position = new Vector3(-5f, -5f, -1),
                        Size     = new Vector2(10, 10),
                        UVMin    = Vector2.Zero,
                        UVMax    = new Vector2(1, 1),
                        Facings  = Facings.Frontside
                    },
                    Layout = Graphics.Software.Vertex.PositionNormalTexcoord.Instance
                },
            };

            scene.Add(new Entity
            {
                MainGraphic             = ground,
                VisibilityLocalBounding = new Common.Bounding.NonfittableBounding(Vector3.Zero, false, true),
                Translation             = Vector3.UnitZ
            });
        }
示例#21
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene = new Scene();
            scene.View = this;

            scene.Camera = new LookatCartesianCamera()
            {
                Lookat = new Vector3(size.Width / 2f, size.Height / 2f, 0),
                Position = new Vector3(10, 10, 10),
                FOV = 0.5f,
                ZFar = 100,
                AspectRatio = AspectRatio
            };

            sceneQuadtree = new Common.Quadtree<Entity>(10);
            sbau = new SceneBVHAutoSyncer(scene, sceneQuadtree);

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)scene.Camera,
                InputHandler = new InteractiveSceneManager { Scene = scene },
            };

            renderer = new Graphics.Renderer.Renderer(Device9) { Scene = scene, StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9), Settings = new Graphics.Renderer.Settings { WaterEnable = false, FogDistance = float.MaxValue, ShadowQuality = Graphics.Renderer.Settings.ShadowQualities.Lowest } };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene = scene
            };
            sceneRendererConnector.Initialize();

            motionSimulation = new Common.Motion.Simulation();
            //motionSimulation = new Common.Motion.ThreadSimulationProxy(new Common.Motion.Simulation());
            //System.Windows.Forms.Application.ApplicationExit += ((sender, o) => { ((Common.Motion.ThreadSimulationProxy)motionSimulation).Shutdown(); });

            scene.EntityAdded += new Action<Entity>(scene_EntityAdded);
            scene.EntityRemoved += new Action<Entity>(scene_EntityRemoved);

            heightMap = CreateGround();

            //((Common.Motion.Simulation)((Common.Motion.ThreadSimulationProxy)motionSimulation).InnerSimulation).SetHeightMap(heightMap, new Vector2(size.Width, size.Height), Vector2.Zero);
            //scene.Add(CreateBlock(-Vector3.UnitZ, new Vector3(size.Width, size.Height, 1), "grass1.png"));

            Random r = new Random();
            for (int i = 0; i < 0; i++)
                InsertUnit(r);
            //var unit = CreateUnit(new Vector3(size.Width/2f, size.Height/2f, -5f));
            //scene.Add(unit);
            //units.Add(unit);
            foreach (var u in units)
                ((Common.IMotion.IUnit)u.MotionObject).VelocityImpulse(new Vector3(0, 0, 0.00001f));
        }
        void Setup()
        {
            Scene = new Scene();
            GameState = GameState.Playing;
            InterfaceIngameScene = new Scene();
            Scene.View = InterfaceIngameScene.View = Program.Instance;
            Scene.Camera = InterfaceIngameScene.Camera = new LookatSphericalCamera()
            {
                Lookat = new Vector3(0, 0, 0),
                Position = new Vector3(10, 10, 10),
                FOV = Program.Settings.CameraFOV,
                ZFar = 20,
                ZNear = Program.Settings.CameraZNear,
                AspectRatio = Program.Instance.AspectRatio
            };
            CameraController = new CameraController { Camera = (LookatSphericalCamera)Scene.Camera };
            Scene.EntityAdded += scene_EntityAdded;

            Program.Instance.Interface.Layer1.AddChild(
                SceneControl = new GameSceneControl
                {
                    InnerScene = Scene,
                    Size = Program.Instance.Interface.Size
                });

            InterfaceIngameRenderer = new Graphics.Interface.InterfaceRenderer9(Program.Instance.Device9)
            {
                Scene = InterfaceIngameScene,
                StateManager = Program.Instance.StateManager,
            };
            InterfaceIngameRenderer.Initialize(Scene.View);

            if (Program.Settings.OutputPNGSequence)
                Directory.CreateDirectory(OutputPNGSequencePath);

            if (Program.Settings.UseDummyRenderer)
            {
                throw new NotSupportedException("Dummy renderer is no longer supported.");
            }
            else
            {
                Renderer = new Graphics.Renderer.Renderer(Program.Instance.Device9)
                {
                    Scene = Scene,
                    StateManager = Program.Instance.StateManager,
                    Settings = Program.Settings.RendererSettings,
                };
                SceneRendererConnector = new SortedTestSceneRendererConnector
                {
                    Scene = Scene,
                    Renderer = Renderer
                };
            }

            Graphics.Renderer.Results result = Renderer.Initialize(Scene.View);
            SceneRendererConnector.Initialize();
            if (result == Graphics.Renderer.Results.OutOfVideoMemory)
            {
                System.Windows.Forms.MessageBox.Show(Locale.Resource.ErrorOutOfVideoMemory);
                Application.Log("User ran out of video memory according to renderer. This is probably due to having too high shadow quality.");
                System.Windows.Forms.Application.Exit();
            }

            RendererSettingsController = new RendererSettingsController();

            var s = Program.Settings.GraphicsDeviceSettings.Resolution;
            Program.Instance.Interface.Layer1.AddChild(Interface = new Interface.Interface
            {
                Size = new Vector2(s.Width, s.Height),
                Visible = false
            });
        }
示例#23
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene      = new Scene();
            scene.View = this;

            scene.Camera = new LookatCartesianCamera()
            {
                Lookat      = new Vector3(size.Width / 2f, size.Height / 2f, 0),
                Position    = new Vector3(10, 10, 10),
                FOV         = 0.5f,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };

            sceneQuadtree = new Common.Quadtree <Entity>(10);
            sbau          = new SceneBVHAutoSyncer(scene, sceneQuadtree);

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = new InteractiveSceneManager {
                    Scene = scene
                },
            };

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9), Settings = new Graphics.Renderer.Settings {
                    WaterEnable = false, FogDistance = float.MaxValue, ShadowQuality = Graphics.Renderer.Settings.ShadowQualities.Lowest
                }
            };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene    = scene
            };
            sceneRendererConnector.Initialize();

            motionSimulation = new Common.Motion.Simulation();
            //motionSimulation = new Common.Motion.ThreadSimulationProxy(new Common.Motion.Simulation());
            //System.Windows.Forms.Application.ApplicationExit += ((sender, o) => { ((Common.Motion.ThreadSimulationProxy)motionSimulation).Shutdown(); });

            scene.EntityAdded   += new Action <Entity>(scene_EntityAdded);
            scene.EntityRemoved += new Action <Entity>(scene_EntityRemoved);

            heightMap = CreateGround();

            //((Common.Motion.Simulation)((Common.Motion.ThreadSimulationProxy)motionSimulation).InnerSimulation).SetHeightMap(heightMap, new Vector2(size.Width, size.Height), Vector2.Zero);
            //scene.Add(CreateBlock(-Vector3.UnitZ, new Vector3(size.Width, size.Height, 1), "grass1.png"));

            Random r = new Random();

            for (int i = 0; i < 0; i++)
            {
                InsertUnit(r);
            }
            //var unit = CreateUnit(new Vector3(size.Width/2f, size.Height/2f, -5f));
            //scene.Add(unit);
            //units.Add(unit);
            foreach (var u in units)
            {
                ((Common.IMotion.IUnit)u.MotionObject).VelocityImpulse(new Vector3(0, 0, 0.00001f));
            }
        }
示例#24
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene        = new Scene();
            scene.View   = this;
            scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)scene.Camera
            };

            //heightmap = TextureUtil.ToHeightmap(Content.Peek<Texture>(new TextureFromFile("testheightmap.png")), 100);
            Random r = new Random();

            heightmap = new Graphics.Software.Texel.R32F[64, 64];
            for (int y = 0; y < 64; y++)
            {
                for (int x = 0; x < 64; x++)
                {
                    heightmap[y, x] = new Graphics.Software.Texel.R32F((float)r.NextDouble());
                }
            }


            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Device9StateManager(Device9)
            };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Scene    = scene,
                Renderer = renderer
            };
            sceneRendererConnector.Initialize();

            SizeF patches    = new SizeF(20, 20);
            SizeF patchSize  = new SizeF(1f / 20f, 1f / 20f);
            SizeF groundSize = new SizeF(100, 100);

            for (int y = 0; y < patches.Height; y++)
            {
                for (int x = 0; x < patches.Width; x++)
                {
                    scene.Add(e = new Entity
                    {
                        MainGraphic = new MetaModel
                        {
                            XMesh = new MeshConcretize
                            {
                                MeshDescription = new Graphics.Software.Meshes.MeshFromHeightmap
                                {
                                    Grid = new Graphics.Software.Meshes.Grid
                                    {
                                        Position = Vector3.Zero,
                                        MeshType = MeshType.Indexed,
                                        Size     = new Vector2(patchSize.Width * groundSize.Width, patchSize.Height * groundSize.Height),
                                        NWidth   = (int)((heightmap.GetLength(1) - 1) * patchSize.Width),
                                        NHeight  = (int)((heightmap.GetLength(0) - 1) * patchSize.Height),
                                        UVMin    = new Vector2(0, 0),
                                        UVMax    = new Vector2(1, 1)
                                    },
                                    Height      = 5,
                                    Heightmap   = heightmap,
                                    Rectangle   = new RectangleF(x * patchSize.Width, y * patchSize.Height, patchSize.Width, patchSize.Height),
                                    PointSample = true
                                },
                                Layout = global::Graphics.Software.Vertex.PositionNormalTexcoord.Instance
                            },
                            Texture = new TextureFromFile("Models/GroundTextures/Grass1.png")
                        },
                        Translation             = new Vector3(x * groundSize.Width / patches.Width, y * groundSize.Height / patches.Height, 0),
                        VisibilityLocalBounding = Vector3.Zero
                    });
                }
            }
        }
示例#25
0
        //private float timestep = 0.1f;
        public override void Update(float dtime)
        {
            //dtime = timestep;
            base.Update(dtime);

            Random r = new Random();

            if (InputHandler != null)
            {
                InputHandler.ProcessMessage(MessageType.Update, new UpdateEventArgs {
                    Dtime = dtime
                });
            }

            if (droppingUnits)
            {
                if (DateTime.Now.Subtract(lastDrop).TotalMilliseconds >= 6000)
                {
                    int nUnits = units.Count;
                    foreach (var u in units)
                    {
                        u.Remove();
                    }
                    units.Clear();
                    for (int i = 0; i < nUnits; i++)
                    {
                        InsertUnit(r);
                    }
                    lastDrop = DateTime.Now;
                }
            }
            else
            {
                if (DateTime.Now.Subtract(lastJump).TotalMilliseconds >= 3000)
                {
                    foreach (var u in units)
                    {
                        var umo = (Common.IMotion.IUnit)u.MotionObject;
                        if (r.NextDouble() > 0 && umo.IsOnGround)
                        {
                            umo.VelocityImpulse(new Vector3(8f * (float)r.NextDouble() - 4f, 8f * (float)r.NextDouble() - 4f, 3f * (float)r.NextDouble() + 2f));
                        }
                        //umo.VelocityImpulse(new Vector3(0, 0, 3f * (float)r.NextDouble() + 2f));
                    }
                    lastJump = DateTime.Now;
                }

                if (DateTime.Now.Subtract(lastDirectionChange).TotalMilliseconds >= 3000)
                {
                    foreach (var u in units)
                    {
                        var umo = (Common.IMotion.IUnit)u.MotionObject;
                        umo.RunVelocity = new Vector2(8f * (float)r.NextDouble() - 4f, 8f * (float)r.NextDouble() - 4f);
                    }
                    lastDirectionChange = DateTime.Now;
                    if (lastJump == DateTime.MinValue)
                    {
                        lastJump = DateTime.Now.AddMilliseconds(750);
                    }
                }
            }

            if (motionSimulation.Running)
            {
                motionSimulation.Step(dtime);
            }

            if (recordingHeight)
            {
                float height = ((Common.Motion.Simulation)motionSimulation).DebugReturnQuadtree.DebugCheckGroundHeight(controlledUnit.MotionObject.Position);
                recordedHeight.Add(new Vector3(controlledUnit.MotionObject.Position.X, controlledUnit.MotionObject.Position.Y, height));
            }

            if (renderingScene)
            {
                Graphics.Renderer.Renderer renderer = (Graphics.Renderer.Renderer) this.renderer;

                if (sceneQuadtree != null)
                {
                    sceneRendererConnector.CullScene(sceneQuadtree);
                }

                sceneRendererConnector.UpdateAnimations(dtime);

                renderer.PreRender(dtime);
                Device9.Clear(SlimDX.Direct3D9.ClearFlags.Target | SlimDX.Direct3D9.ClearFlags.ZBuffer, Color.DarkSlateGray, 1.0f, 0);

                Device9.BeginScene();

                renderer.Render(dtime);

                if (drawingUnitBBs)
                {
                    foreach (var u in units)
                    {
                        Vector3 min, max;
                        UnitBoxCoords(u.MotionObject.Position, out min, out max);
                        Draw3DAABB(scene.Camera, Matrix.Identity, min, max, Color.Red);
                        UnitBoxCoords(u.MotionObject.InterpolatedPosition, out min, out max);
                        Draw3DAABB(scene.Camera, Matrix.Identity, min, max, Color.Blue);
                    }
                }
                if (controlledUnit != null)
                {
                    Vector3 min, max;
                    UnitBoxCoords(controlledUnit.MotionObject.Position, out min, out max);
                    Draw3DAABB(scene.Camera, Matrix.Identity, min, max, Color.Red);
                    UnitBoxCoords(controlledUnit.MotionObject.InterpolatedPosition, out min, out max);
                    Draw3DAABB(scene.Camera, Matrix.Identity, min, max, Color.Blue);
                }

                if (drawingGroundLines)
                {
                    int   xPieces  = xSize;
                    int   yPieces  = xSize;
                    float stepx    = size.Width / (float)(heightMap[0].Length - 1);
                    float stepy    = size.Height / (float)(heightMap.Length - 1);
                    int   nxPieces = heightMap[0].Length / xPieces;
                    int   nyPieces = heightMap.Length / yPieces;
                    for (int yp = 0; yp < yPieces; yp++)
                    {
                        for (int xp = 0; xp < xPieces; xp++)
                        {
                            for (int y = 0; y < nyPieces; y++)
                            {
                                for (int x = 0; x < nxPieces; x++)
                                {
                                    //Vector3 pos0 = new Vector3((xp * nxPieces + x) * stepx, (yp * nyPieces + y) * stepy, heightMap[yp * (nyPieces - 1) + y][xp * (nxPieces - 1) + x]);
                                    Vector3 pos0 = GetPosOrSmth(x, xp, nxPieces, stepx, y, yp, nyPieces, stepy);
                                    Vector3 pos1 = GetPosOrSmth(x + 1, xp, nxPieces, stepx, y, yp, nyPieces, stepy);
                                    Vector3 pos2 = GetPosOrSmth(x, xp, nxPieces, stepx, y + 1, yp, nyPieces, stepy);

                                    Draw3DLines(scene.Camera, Matrix.Identity, new Vector3[] { pos0, pos1 }, (xp == xPieces - 1 ? Color.Red : Color.Green));
                                    Draw3DLines(scene.Camera, Matrix.Identity, new Vector3[] { pos0, pos2 }, Color.Green);
                                }
                            }
                        }
                    }
                }

                Device9.EndScene();
            }

            //var unit = ValidateUnitPositions();
            MotionEntity unit = null;

            if (motionSimulation.Running && unit != null)
            {
                motionSimulation.Running = false;
                ((MetaModel)unit.MainGraphic).Texture = new TextureConcretizer
                {
                    Texture = global::Graphics.Software.ITexture.SingleColorTexture(Color.Red)
                };

                var umo = ((Common.IMotion.IUnit)unit.MotionObject);
                tag = "Position: " + unit.MotionObject.Position + ". RunVelocity: " + umo.RunVelocity +
                      ". OnGround: " + umo.IsOnGround;
                FocusCamera(umo.Position);
            }

            var forRemoval = new List <MotionEntity>();

            foreach (var u in units)
            {
                if (u.MotionObject.Position.Z < -18 + heightOffset)
                {
                    forRemoval.Add(u);
                }
            }
            foreach (var u in forRemoval)
            {
                units.Remove(u);
                u.Remove();
                InsertUnit(r);   // Keep balance
            }

            if (motionSimulation.Running)
            {
                Application.MainWindow.Text = "FPS: " + FPS + ". #Static: " +
                                              ". #ListUnits: " + units.Count + (controlledUnit != null ? ". UnitPos: " + Common.Math.ToVector2(controlledUnit.Translation).ToString() : "") +
                                              ". CamPos: " + scene.Camera.Position;
            }
            else
            {
                Application.MainWindow.Text = tag + ". CamPos: " + scene.Camera.Position;
            }
        }
示例#26
0
            public override void Render(float dtime)
            {
                Graphics.Renderer.Renderer renderer = (Graphics.Renderer.Renderer)Game.Instance.Renderer;

                Game.Instance.Renderer.Settings.WaterLevel     = Game.Instance.Map.Settings.WaterHeight;
                Game.Instance.Renderer.Settings.AmbientColor   = Game.Instance.Map.Settings.AmbientColor;
                Game.Instance.Renderer.Settings.DiffuseColor   = Game.Instance.Map.Settings.DiffuseColor;
                Game.Instance.Renderer.Settings.FogColor       = Game.Instance.Map.Settings.FogColor;
                Game.Instance.Renderer.Settings.SpecularColor  = Game.Instance.Map.Settings.SpecularColor;
                Game.Instance.Renderer.Settings.LightDirection = Game.Instance.Map.Settings.LightDirection;
                Game.Instance.Renderer.Settings.FogExponent    = Game.Instance.Map.Settings.FogExponent;
                Game.Instance.Renderer.Settings.FogDistance    = Game.Instance.Map.Settings.FogDistance;
#if BETA_RELEASE
                ClientProfilers.Renderer.Start();
#endif
                if (Program.Settings.RenderWorld)
                {
                    Game.Instance.Renderer.Render(dtime);
                }
#if BETA_RELEASE
                ClientProfilers.Renderer.Stop();
#endif

                Program.Instance.BoundingVolumesRenderer.Begin(Game.Instance.Scene.Camera);

                Game.Instance.HelperVisualizations.Render(Program.Instance.BoundingVolumesRenderer,
                                                          Program.Instance,
                                                          Game.Instance.Scene,
                                                          Game.Instance.Map.NavMesh,
                                                          Game.Instance.Renderer.Frame);

                if (Program.Settings.MotionSettings.VisualizeMotionBoundings)
                {
                    foreach (var v in Game.Instance.Mechanics.MotionSimulation.All)
                    {
                        if (v.LocalBounding != null && (!Program.Settings.HideGroundMotionBoundings || !(v.Tag is Map.GroundPiece)))
                        {
                            Program.Instance.BoundingVolumesRenderer.Draw(Matrix.Identity, v.WorldBounding, Color.Blue);
                        }
                    }
                }

                if (Program.Settings.VisualizeRendererQuadtree)
                {
                    Common.Quadtree <Entity> qt = Game.Instance.sceneQuadtree as Common.Quadtree <Entity>;
                    var root = qt.DebugReturnRoot;
                    if (qt != null && root != null)
                    {
                        DrawQuadtreeNode(root);
                    }
                }

                Program.Instance.BoundingVolumesRenderer.End();

                if (Program.Settings.DisplayInCombatUnits)
                {
                    foreach (var v in Game.Instance.Scene.AllEntities)
                    {
                        if (v is Map.Unit && ((Map.Unit)v).InCombat)
                        {
                            Program.Instance.DrawCircle(Game.Instance.Scene.Camera, Matrix.Identity,
                                                        ((Map.Unit)v).Position, 1, 12, Color.Red);
                        }
                    }
                }

                if (Program.Settings.DisplayAttackRangeCircles)
                {
                    foreach (var v in Game.Instance.Scene.AllEntities)
                    {
                        if (v is Map.NPC && ((Map.NPC)v).MotionObject != null)
                        {
                            int i = 1;
                            foreach (var a in ((Map.NPC)v).Abilities)
                            {
                                a.Mediator = (Map.NPC)v;
                                a.DrawEffectiveAttackRangeCircle(Game.Instance.Scene.Camera,
                                                                 ((Map.NPC)v).LookatDir, Common.Int2Color.Conv(i++));
                            }
                        }
                    }
                    var m = Game.Instance.Map.MainCharacter;
                    if (m.MotionObject != null)
                    {
                        m.PrimaryAbility.Mediator   = m;
                        m.SecondaryAbility.Mediator = m;

                        m.PrimaryAbility.DrawEffectiveAttackRangeCircle(Game.Instance.Scene.Camera,
                                                                        m.LookatDir, Color.DarkOrange);
                        m.SecondaryAbility.DrawEffectiveAttackRangeCircle(Game.Instance.Scene.Camera,
                                                                          m.LookatDir, Color.DarkOrange);

                        //Program.Instance.DrawArc(Game.Instance.Scene.Camera, Matrix.Identity,
                        //        m.PrimaryAbility.MediatorOffsetedPosition,
                        //        m.PrimaryAbility.PerformableRange, 12, Game.Instance.Map.MainCharacter.LookatDir,
                        //        m.PrimaryAbility.EffectiveAngle, Color.DarkOrange);
                        //Program.Instance.DrawArc(Game.Instance.Scene.Camera, Matrix.Identity,
                        //        m.PrimaryAbility.MediatorOffsetedPosition,
                        //        m.PrimaryAbility.EffectiveRange, 12, Game.Instance.Map.MainCharacter.LookatDir,
                        //        m.PrimaryAbility.EffectiveAngle, Color.Orange);
                        //Program.Instance.DrawArc(Game.Instance.Scene.Camera, Matrix.Identity,
                        //        m.SecondaryAbility.MediatorOffsetedPosition,
                        //        m.SecondaryAbility.PerformableRange, 12, Game.Instance.Map.MainCharacter.LookatDir,
                        //        m.SecondaryAbility.EffectiveAngle, Color.Gold);
                        //Program.Instance.DrawArc(Game.Instance.Scene.Camera, Matrix.Identity,
                        //        m.SecondaryAbility.MediatorOffsetedPosition,
                        //        m.SecondaryAbility.EffectiveRange, 12, Game.Instance.Map.MainCharacter.LookatDir,
                        //        m.SecondaryAbility.EffectiveAngle, Color.Yellow);
                    }
                }
                if (Program.Settings.DisplayHitRangeCircles)
                {
                    foreach (var v in Game.Instance.Scene.AllEntities)
                    {
                        var d = v as Map.Destructible;
                        if (d != null && d.IsDestructible)
                        {
                            Program.Instance.DrawCircle(Game.Instance.Scene.Camera, Matrix.Identity,
                                                        d.Translation, d.HitRadius, 12, Color.Yellow);
                        }
                    }
                }

                if (Program.Settings.DisplayWorldDebugCursor)
                {
                    Program.Instance.Draw3DLines(Game.Instance.Scene.Camera, Matrix.Identity,
                                                 new Vector3[]
                    {
                        Game.Instance.Input.State.MouseGroundPosition + Vector3.UnitX,
                        Game.Instance.Input.State.MouseGroundPosition - Vector3.UnitX,
                    }, Color.White);
                    Program.Instance.Draw3DLines(Game.Instance.Scene.Camera, Matrix.Identity,
                                                 new Vector3[]
                    {
                        Game.Instance.Input.State.MouseGroundPosition + Vector3.UnitY,
                        Game.Instance.Input.State.MouseGroundPosition - Vector3.UnitY,
                    }, Color.White);
                    var v = Game.Instance.Input.State.MouseGroundPosition;
                    v.Z -= Game.Instance.Map.MainCharacter.MainAttackToHeight;
                    var v2 = Game.Instance.Map.MainCharacter.Translation;
                    v2.Z += Game.Instance.Map.MainCharacter.MainAttackFromHeight;
                    Program.Instance.Draw3DLines(Game.Instance.Scene.Camera, Matrix.Identity,
                                                 new Vector3[]
                    {
                        Game.Instance.Map.MainCharacter.Translation,
                        v,
                        Game.Instance.Input.State.MouseGroundPosition,
                        Game.Instance.Map.MainCharacter.Translation,
                        v2,
                        Game.Instance.Input.State.MouseGroundPosition,
                    }, Color.Orange);
                }
            }
示例#27
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            scene      = new Scene();
            scene.View = this;

            scene.Camera = new LookatCartesianCamera()
            {
                Lookat      = new Vector3(size.Width / 2f, size.Height / 2f, 0),
                Position    = new Vector3(10, 10, 10),
                FOV         = 0.5f,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };

            viewport = new Graphics.GraphicsDevice.Viewport(Device9.Viewport);

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = new InteractiveSceneManager {
                    Scene = scene
                },
            };

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9), Settings = new Graphics.Renderer.Settings {
                    WaterEnable = false
                }
            };
            //renderer = new Graphics.DummyRenderer.Renderer { Scene = scene, StateManager = new Graphics.GraphicsDevice.Device9StateManager(Device9), Settings = new Graphics.Renderer.Settings { WaterEnable = false } };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = renderer,
                Scene    = scene
            };
            sceneRendererConnector.Initialize();

            motionSimulation = new Common.Motion.Simulation();

            scene.EntityAdded   += new Action <Entity>(scene_EntityAdded);
            scene.EntityRemoved += new Action <Entity>(scene_EntityRemoved);

            var sim = (Common.Motion.Simulation)motionSimulation;

            npcs = new List <Common.IMotion.INPC>();
            Vector2 startingPosition = new Vector2(size.Width / 2f, size.Height / 2f);

            CreateGround(true);
            scene.Add(controlledUnit = CreateUnit(startingPosition));
            scene.Add(CreateBlock(Common.Math.ToVector3(startingPosition + new Vector2(2, -2)), new Vector3(1, 1, 1.5f)));
            scene.Add(CreateBlock(Common.Math.ToVector3(startingPosition + new Vector2(-4, 2)), new Vector3(1, 1, 1.5f)));
            scene.Add(CreateBlock(Common.Math.ToVector3(startingPosition + new Vector2(4, -2)), new Vector3(1, 1, 1.5f)));
            scene.Add(CreateBlock(Common.Math.ToVector3(startingPosition + new Vector2(7, -1)), new Vector3(1, 1, 1.5f)));
            //scene.Add(CreateNPC(startingPosition + new Vector2(3, 3)));
            scene.Add(CreateNPC(startingPosition + new Vector2(3, -1)));
            scene.Add(CreateNPC(startingPosition + new Vector2(-5, 3)));
            scene.Add(CreateNPC(startingPosition + new Vector2(-2, 1)));
            Vector2 unitGroupStartingPosition = startingPosition + new Vector2(3, 3);

            for (int y = 0; y < 5; y++)
            {
                for (int x = 0; x < 5; x++)
                {
                    scene.Add(CreateNPC(unitGroupStartingPosition + new Vector2(x, y)));
                }
            }

            BulletCreation = (() =>
            {
                scene.Add(CreateBullet(controlledUnit.Translation + Vector3.UnitZ,
                                       bulletSpeed,
                                       controlledUnit.MotionObject.Rotation.Angle,
                                       bulletAcceleration));
            });

            foreach (var npc in npcs)
            {
                npc.Pursue(controlledUnit.MotionObject, 1f);
            }
        }
示例#28
0
        public override void Init()
        {
            Content.ContentPath = "Data";
            Instance            = this;

            scene        = new Scene();
            scene.View   = this;
            scene.Camera = new LookatCartesianCamera
            {
                Position = new Vector3(10, 10, 10),
                Lookat   = Vector3.Zero,
                ZFar     = 100
            };
            //heightmap = TextureUtil.ToHeightmap(Content.Peek<Texture>(new TextureFromFile("testheightmap.png")), 100);
            heightmap = new Graphics.Software.Texel.R32F[250, 250];
            texture   = new Graphics.Software.Texture <Graphics.Software.Texel.R32F>(heightmap);

            scene.Add(ground = new TestGround
            {
                Size      = new SizeF(100, 100),
                Heightmap = heightmap,
                NPieces   = new Size(20, 20),
                Height    = 1
            });
            ground.ConstructPieces();

            heightmapEditor = new Graphics.Editors.GroundTextureEditor
            {
                Camera          = scene.Camera,
                Viewport        = Viewport,
                SoftwareTexture = new[] { texture },
                Position        = ground.Translation,
                Size            = ground.Size,
                GroundIntersect = new WorldViewProbe(this, scene.Camera)
                {
                    WorldProbe = new GroundProbe()
                }
            };
            heightmapEditor.TextureValuesChanged += new Graphics.Editors.TextureValuesChangedEventHandler((o, e) =>
            {
                ground.UpdatePatches(e.ChangedRegion);
            });
            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera       = (LookatCartesianCamera)scene.Camera,
                InputHandler = heightmapEditor
            };

            renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = scene, StateManager = new Device9StateManager(Device9)
            };
            renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Scene    = scene,
                Renderer = renderer
            };
            sceneRendererConnector.Initialize();
        }
示例#29
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            Instance = this;

            Scene        = new Scene();
            Scene.View   = this;
            Scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 100,
                AspectRatio = AspectRatio
            };
            sceneQuadtree = new Common.Quadtree <Entity>(-1, -1, 100, 100, 10);
            sbau          = new SceneBVHAutoSyncer(Scene, sceneQuadtree);

            StateManager = new Device9StateManager(Device9);

            rand = new Random();

            nBillboards = 2000;
            billboards  = new Entity[nBillboards];
            directions  = new Vector3[nBillboards];

            for (int i = 0; i < nBillboards; i++)
            {
                directions[i] = new Vector3((float)rand.NextDouble() * 2 - 1, (float)rand.NextDouble() * 2 - 1, (float)rand.NextDouble() * 2 - 1);
            }

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)Scene.Camera
            };

            Renderer = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = Scene, StateManager = StateManager, Settings = new Graphics.Renderer.Settings {
                    FogDistance = 500
                }
            };
            Renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = Renderer,
                Scene    = Scene
            };
            sceneRendererConnector.Initialize();

            for (int i = 0; i < nBillboards; i++)
            {
                Scene.Add(billboards[i] = new Entity
                {
                    MainGraphic = new MetaModel
                    {
                        AlphaRef             = 0,
                        BaseTexture          = null,
                        CastShadows          = Priority.Never,
                        HasAlpha             = true,
                        IsBillboard          = true,
                        IsWater              = false,
                        MaterialTexture      = null,
                        Mesh                 = null,
                        ReceivesAmbientLight = Priority.Never,
                        ReceivesDiffuseLight = Priority.Never,
                        ReceivesShadows      = Priority.Never,
                        SkinnedMesh          = null,
                        SplatMapped          = false,
                        SplatTexutre         = null,
                        Texture              = new TextureFromFile("checker.png"),
                        Visible              = Priority.High,
                        World                = Matrix.Identity,
                        XMesh                = new MeshConcretize
                        {
                            MeshDescription = new Meshes.IndexedPlane
                            {
                                Facings  = Facings.Backside | Facings.Frontside,
                                Position = Vector3.Zero,
                                Size     = new Vector2(5, 5),
                                UVMin    = Vector2.Zero,
                                UVMax    = new Vector2(1, 1)
                            },
                            Layout = global::Graphics.Software.Vertex.PositionNormalTexcoord.Instance
                        }
                    },
                    VisibilityLocalBounding = Vector3.Zero,
                    WorldMatrix             = Matrix.Identity
                });
            }
        }
示例#30
0
        public override void Init()
        {
            Content.ContentPath = "Data";

            Instance = this;

            //splatTexture = Content.Peek<Texture>(new TextureFromFile("splatting.png"));
            //grassTexture = Content.Peek<Texture>(new TextureFromFile(""));
            //soilTexture = Content.Peek<Texture>(new TextureFromFile(""));
            //grass2Texture = Content.Peek<Texture>(new TextureFromFile(""));
            //stoneTexture = Content.Peek<Texture>(new TextureFromFile(""));

            Scene        = new Scene();
            Scene.View   = this;
            Scene.Camera = new LookatCartesianCamera()
            {
                Position    = new Vector3(10, 10, 10),
                Lookat      = Vector3.Zero,
                ZFar        = 100,
                ZNear       = 0.1f,
                AspectRatio = AspectRatio
            };
            sceneQuadtree = new Common.Quadtree <Entity>(0, 0, 100, 100, 10);
            sbau          = new SceneBVHAutoSyncer(Scene, sceneQuadtree);

            StateManager = new Device9StateManager(Device9);
            Renderer     = new Graphics.Renderer.Renderer(Device9)
            {
                Scene = Scene, StateManager = StateManager
            };
            Renderer.Initialize(this);

            sceneRendererConnector = new SortedTestSceneRendererConnector
            {
                Renderer = Renderer,
                Scene    = Scene
            };
            sceneRendererConnector.Initialize();

            heightmap = TextureUtil.ToHeightmap(Content.Peek <Texture>(new TextureFromFile("heightmap.png")), 100);

            Scene.Add(ground = new Entity
            {
                MainGraphic = new MetaModel
                {
                    XMesh = new MeshConcretize
                    {
                        MeshDescription = new Graphics.Software.Meshes.MeshFromHeightmap
                        {
                            Grid = new Graphics.Software.Meshes.Grid
                            {
                                Position = Vector3.Zero,
                                MeshType = MeshType.Indexed,
                                Size     = new Vector2(100, 100),
                                NWidth   = heightmap.GetLength(1) - 1,
                                NHeight  = heightmap.GetLength(0) - 1,
                                UVMax    = new Vector2(1, 1),
                                UVMin    = new Vector2(0, 0)
                            },
                            Height      = 20,
                            Heightmap   = heightmap,
                            Rectangle   = new RectangleF(0, 0, 1, 1),
                            PointSample = true
                        },
                        Layout = Graphics.Software.Vertex.PositionNormalTexcoord.Instance
                    },
                    SplatMapped  = true,
                    Texture      = new TextureFromFile("splatting.png"),
                    SplatTexutre = new MetaResource <Texture, SlimDX.Direct3D10.Texture2D>[1] {
                        new TextureFromFile("splattingtest.png")
                    },
                    MaterialTexture = new MetaResource <Texture, SlimDX.Direct3D10.Texture2D>[4] {
                        new TextureFromFile("grass.png")
                        , new TextureFromFile("pebbles.png"), new TextureFromFile("vines.png"), new TextureFromFile("rock.png")
                    },
                },
                VisibilityLocalBounding = Vector3.Zero
            });

            InputHandler = new WalkaroundCameraInputHandler
            {
                Camera = (LookatCartesianCamera)Scene.Camera,
                //InputHandler = groundTextureEditor,
                //FilteredMessages = new MessageType[] { }
            };
        }
示例#31
0
        void Setup()
        {
            Scene                = new Scene();
            GameState            = GameState.Playing;
            InterfaceIngameScene = new Scene();
            Scene.View           = InterfaceIngameScene.View = Program.Instance;
            Scene.Camera         = InterfaceIngameScene.Camera = new LookatSphericalCamera()
            {
                Lookat      = new Vector3(0, 0, 0),
                Position    = new Vector3(10, 10, 10),
                FOV         = Program.Settings.CameraFOV,
                ZFar        = 20,
                ZNear       = Program.Settings.CameraZNear,
                AspectRatio = Program.Instance.AspectRatio
            };
            CameraController = new CameraController {
                Camera = (LookatSphericalCamera)Scene.Camera
            };
            Scene.EntityAdded += scene_EntityAdded;

            Program.Instance.Interface.Layer1.AddChild(
                SceneControl = new GameSceneControl
            {
                InnerScene = Scene,
                Size       = Program.Instance.Interface.Size
            });

            InterfaceIngameRenderer = new Graphics.Interface.InterfaceRenderer9(Program.Instance.Device9)
            {
                Scene        = InterfaceIngameScene,
                StateManager = Program.Instance.StateManager,
            };
            InterfaceIngameRenderer.Initialize(Scene.View);

            if (Program.Settings.OutputPNGSequence)
            {
                Directory.CreateDirectory(OutputPNGSequencePath);
            }

            if (Program.Settings.UseDummyRenderer)
            {
                throw new NotSupportedException("Dummy renderer is no longer supported.");
            }
            else
            {
                Renderer = new Graphics.Renderer.Renderer(Program.Instance.Device9)
                {
                    Scene        = Scene,
                    StateManager = Program.Instance.StateManager,
                    Settings     = Program.Settings.RendererSettings,
                };
                SceneRendererConnector = new SortedTestSceneRendererConnector
                {
                    Scene    = Scene,
                    Renderer = Renderer
                };
            }

            Graphics.Renderer.Results result = Renderer.Initialize(Scene.View);
            SceneRendererConnector.Initialize();
            if (result == Graphics.Renderer.Results.OutOfVideoMemory)
            {
                System.Windows.Forms.MessageBox.Show(Locale.Resource.ErrorOutOfVideoMemory);
                Application.Log("User ran out of video memory according to renderer. This is probably due to having too high shadow quality.");
                System.Windows.Forms.Application.Exit();
            }

            RendererSettingsController = new RendererSettingsController();

            var s = Program.Settings.GraphicsDeviceSettings.Resolution;

            Program.Instance.Interface.Layer1.AddChild(Interface = new Interface.Interface
            {
                Size    = new Vector2(s.Width, s.Height),
                Visible = false
            });
        }