Esempio n. 1
0
        private void InternalAddSceneObject(string type)
        {
            GameObject sceneObject = null;

            switch (type)
            {
            case "Cube": sceneObject = new MeshPrefab(type, new CubeGeometry()); break;

            case "Cylinder": sceneObject = new MeshPrefab(type, new CylinderGeometry()); break;

            case "Quad": sceneObject = new MeshPrefab(type, new QuadGeometry()); break;

            case "Plane": sceneObject = new MeshPrefab(type, new PlaneGeometry()); break;

            case "Pyramid": sceneObject = new MeshPrefab(type, new PyramidGeometry()); break;

            case "Sphere": sceneObject = new MeshPrefab(type, new SphereGeometry()); break;

            case "Torus": sceneObject = new MeshPrefab(type, new TorusGeometry()); break;

            case "Terrain":
                var terrain = new TerrainPrefab(type);
                terrain.Flatten();
                terrain.Renderer.Material = DefaultMaterial;
                sceneObject = terrain;
                break;

            case "Water":
                var water = new WaterPrefab(type);
                Add(water);
                water.Generate(string.Empty, string.Empty, new Vector3(10));
                water.Renderer.Material = GetMaterialByName("WaterMaterial");
                sceneObject             = water;
                break;

            case "Directional": sceneObject = CreateLightNode(type, LightType.Directional); break;

            case "Point": sceneObject = CreateLightNode(type, LightType.Point); break;

            case "Spot": sceneObject = CreateLightNode(type, LightType.Spot); break;

            case "Camera":
                sceneObject = new CameraPrefab(type);
                sceneObject.AddComponent <EDBoxCollider>();

                var camRenderer = sceneObject.AddComponent <EDMeshRenderer>();
                camRenderer.CastShadow    = false;
                camRenderer.ReceiveShadow = false;
                camRenderer.Geometry      = new QuadGeometry();
                camRenderer.Geometry.Build();
                camRenderer.Material = GetMaterialByName("Camera");
                break;

            default: break;
            }

            InternalAddSceneObject(sceneObject);
        }
Esempio n. 2
0
        public override void Initialize()
        {
            base.Initialize();

            // Skybox
            RenderSettings.Skybox.Generate(Application.GraphicsDevice, Application.Content, DemoGame.BlueSkybox);

            // Camera
            var camera = new CameraPrefab("camera");

            camera.AddComponent <ControllerSwitcher>();
            camera.AddComponent <DemoBehaviour>();
            Add(camera);

            // Light
            var lightPrefab = new LightPrefab("light", LightType.Directional);

            lightPrefab.Transform.Translate(0, 10, 0);
            lightPrefab.Light.Range        = 25;
            lightPrefab.Light.Intensity    = 1.0f;
            lightPrefab.Light.FallOf       = 5f;
            lightPrefab.Transform.Rotation = new Vector3(-1, 1, 0);
            lightPrefab.Light.Angle        = MathHelper.PiOver4;
            lightPrefab.Light.ShadowGenerator.ShadowStrength = 0.6f;
            lightPrefab.Light.ShadowGenerator.SetShadowMapSize(Application.GraphicsDevice, 1024);
            lightPrefab.EnableShadows = true;
            Add(lightPrefab);

            // Finally a terrain
            var terrainMat = new TerrainMaterial(scene);

            var terrain = new TerrainPrefab("terrain");

            terrain.Randomize(4, 12);
            terrain.Renderer.Material = terrainMat;
            terrain.Transform.Translate(-terrain.Width >> 1, 0, -terrain.Depth / 2);
            Add(terrain);

            terrain.SetWeightData(0.5f, 4, 15, 30);

            terrainMat.Texture       = Application.Content.Load <Texture2D>("Textures/Terrain/Grass");
            terrainMat.SandTexture   = Application.Content.Load <Texture2D>("Textures/Terrain/Sand");
            terrainMat.SnowTexture   = Application.Content.Load <Texture2D>("Textures/Terrain/Snow");
            terrainMat.RockTexture   = Application.Content.Load <Texture2D>("Textures/Terrain/Rock");
            terrainMat.WeightTexture = terrain.GenerateWeightMap();
            terrainMat.Tiling        = new Vector2(4);

            // Water !
            var water = new WaterPrefab("water");

            Add(water);
            water.Generate("Textures/water", "Textures/wavesbump", new Vector3(terrain.Width * 0.5f));

            var waterMat = water.Renderer.Material as WaterMaterial;

            waterMat.ReflectiveMap     = scene.RenderSettings.Skybox.Texture;
            waterMat.WaterTransparency = 0.6f;
        }
Esempio n. 3
0
        public override void Initialize()
        {
            base.Initialize();

            // Add a camera with a FPS controller
            var camera = new CameraPrefab("camera");

            camera.Setup(new Vector3(0, 2, -10), new Vector3(0, 0, 0), Vector3.Up);
            camera.AddComponent <ControllerSwitcher>();
            Add(camera);

            // And a light
            var lightPrefab = new LightPrefab("light", LightType.Directional);

            Add(lightPrefab);
            lightPrefab.Transform.Rotation = new Vector3(-1, 1, 0);
            lightPrefab.Light.Color        = Color.LightSkyBlue;
            lightPrefab.Light.Intensity    = 1.0f;
            lightPrefab.AddComponent <DemoBehaviour>();
            lightPrefab.EnableShadows = true;

            // Finally a terrain
            var terrainMat = new TerrainMaterial(scene);

            var terrain = new TerrainPrefab("terrain");

            scene.Add(terrain);
            terrain.LoadHeightmap("Textures/heightmap");
            terrain.Renderer.Material = terrainMat;
            terrain.Transform.Translate(-terrain.Width >> 1, -10, -terrain.Depth >> 1);
            terrain.AddComponent <WeightMapViewer>();
            var map = terrain.GenerateWeightMap();

            terrainMat.Texture       = Application.Content.Load <Texture2D>("Textures/Terrain/Grass");
            terrainMat.SandTexture   = Application.Content.Load <Texture2D>("Textures/Terrain/Sand");
            terrainMat.SnowTexture   = Application.Content.Load <Texture2D>("Textures/Terrain/Snow");
            terrainMat.RockTexture   = Application.Content.Load <Texture2D>("Textures/Terrain/Rock");
            terrainMat.WeightTexture = map;
            terrainMat.Tiling        = new Vector2(4);

            // With water !
            var water = new WaterPrefab("water");

            scene.Add(water);
            water.Generate("Textures/water", "Textures/wavesbump", new Vector3(terrain.Width * 0.5f));

            Screen.ShowCursor = true;

            // Don't miss the Skybox ;)
            RenderSettings.Skybox.Generate(Application.GraphicsDevice, Application.Content, DemoGame.BlueSkybox);

            // And fog
            RenderSettings.FogDensity = 0.0085f;
            RenderSettings.FogMode    = FogMode.Exp2;
        }
Esempio n. 4
0
        public override void Initialize()
        {
            base.Initialize();

            // First we add a Skybox
            RenderSettings.Skybox.Generate(Application.GraphicsDevice, Application.Content, DemoGame.StarsSkybox);

            // And a camera with some components
            var camera = new CameraPrefab("camera");

            camera.AddComponent <ControllerSwitcher>();
            camera.AddComponent <DemoBehaviour>();
            Add(camera);

            // A light is required to illuminate objects.
            var lightPrefab = new LightPrefab("light", LightType.Directional);

            lightPrefab.Transform.Rotation = new Vector3(-1, 1, 0);
            lightPrefab.Light.ShadowGenerator.SetShadowMapSize(Application.GraphicsDevice, 1024);
            lightPrefab.EnableShadows = true;
            Add(lightPrefab);

            // A terrain with its material.
            var terrainMaterial = new StandardMaterial(scene);

            terrainMaterial.Texture   = Application.Content.Load <Texture2D>("Textures/Terrain/Rock");
            terrainMaterial.Shininess = 150;
            terrainMaterial.Tiling    = new Vector2(8);

            var terrain = new TerrainPrefab("terrain");

            terrain.Renderer.Geometry.Size = new Vector3(2);
            terrain.Renderer.ReceiveShadow = true;
            terrain.Randomize(4, 12);
            terrain.Renderer.Material = terrainMaterial;
            terrain.Transform.Translate(-terrain.Width >> 1, 0, -terrain.Depth / 2);
            Add(terrain);

            // Lava !
            var lavaMaterial = new LavaMaterial(this);

            lavaMaterial.Texture   = Application.Content.Load <Texture2D>("Textures/lava_texture");
            lavaMaterial.NormalMap = Application.Content.Load <Texture2D>("Textures/lava_bump");

            var lava = new WaterPrefab("water");

            lava.Renderer.Material      = lavaMaterial;
            lava.Renderer.ReceiveShadow = true;
            lava.Renderer.Geometry.Size = new Vector3(terrain.Width * 0.5f);
            lava.Renderer.Geometry.Build();
            Add(lava);
        }
Esempio n. 5
0
        public override void Initialize()
        {
            base.Initialize();

            DefaultMaterial.Texture = GraphicsHelper.CreateBorderTexture(Color.DimGray, Color.LightGray, 128, 128, 2);

            camera = CreateAddSceneObject <Camera>("EditorCamera.Main");
            camera.Setup(new Vector3(0.0f, 10.0f, 30.0f), Vector3.Zero, Vector3.Up);
            camera.Transform.Rotation = new Vector3(-MathHelper.Pi / 6, 0.0f, 0.0f);
            camera.AddComponent <EDFirstPersonCamera>();

            light = CreateAddSceneObject <Light>("Directional Light", false);
            light.Transform.Position = new Vector3(250, 500, 500);
            light.Transform.Rotation = new Vector3(-0.6f, 1, 0.6f);
            light.TypeLight          = LightType.Directional;
            light.Backing            = LightRenderMode.RealTime;
            light.Color        = Color.White;
            light.EnableShadow = true;
            light.Intensity    = 1.0f;
            light.ShadowGenerator.ShadowMapSize  = 1024;
            light.ShadowGenerator.ShadowStrength = 0.4f;

            // Grid
            var gridMaterial = new StandardMaterial(this, "GridMaterial");

            gridMaterial.Texture = GraphicsHelper.CreateCheckboardTexture(new Color(0.6f, 0.6f, 0.6f), new Color(0.95f, 0.95f, 0.95f), 256, 256);;
            gridMaterial.Tiling  = new Vector2(24);

            grid     = new TerrainPrefab("Editor_Grid");
            grid.Tag = EditorTag;
            grid.Renderer.Material      = gridMaterial;
            grid.Renderer.ReceiveShadow = true;
            grid.Renderer.CastShadow    = false;
            grid.Flatten();
            grid.Transform.SetPosition(-grid.Width / 2, -1, -grid.Depth / 2);
            Add(grid);

            CreateMaterialCollection();

            EDRegistry.Camera = camera;

            Messenger.Register(EditorEvent.CreateSceneObject, CreateNewObject);
            Messenger.Register(EditorEvent.CommandDelete, RemoveSceneObject);
            Messenger.Register(EditorEvent.CommandEscape, UnselectObject);
            Messenger.Register(EditorEvent.CommandCopy, CopySelection);
            Messenger.Register(EditorEvent.CommandPast, PastSelection);
            Messenger.Register(EditorEvent.CommandDuplicate, DuplicateSelection);
        }
Esempio n. 6
0
        public override void Initialize()
        {
            base.Initialize();

            // Camera
            var camera = new CameraPrefab("camera");

            camera.AddComponent <OrbitController>();
            camera.AddComponent <RayPickingTester>();
            Add(camera);

            // Light
            var lightPrefab = new LightPrefab("lightPrefab", LightType.Point);

            Add(lightPrefab);
            lightPrefab.Transform.Position = new Vector3(0, 15, 15);
            lightPrefab.Light.Range        = 105;
            lightPrefab.Light.Intensity    = 2.0f;
            lightPrefab.Light.FallOf       = 5f;
            lightPrefab.Light.Color        = Color.Violet;
            lightPrefab.Transform.Rotation = new Vector3(-1, 1, 0);
            lightPrefab.Light.Angle        = 0.1f;
            lightPrefab.Light.ShadowGenerator.ShadowStrength = 0.6f; // FIXME need to be inverted
            lightPrefab.Light.ShadowGenerator.SetShadowMapSize(Application.GraphicsDevice, 1024);
            lightPrefab.EnableShadows = true;
            lightPrefab.AddComponent <LightSwitcher>();
            lightPrefab.AddComponent <LightMover>();
            lightPrefab.AddComponent <DemoBehaviour>();

            var lightPrefabSphere = lightPrefab.AddComponent <MeshRenderer>();

            lightPrefabSphere.Geometry = new SphereGeometry(2f, 4);
            lightPrefabSphere.Geometry.Build();
            lightPrefabSphere.CastShadow       = false;
            lightPrefabSphere.ReceiveShadow    = false;
            lightPrefabSphere.Material         = new SimpleMaterial(scene);
            lightPrefabSphere.Material.Texture = GraphicsHelper.CreateTexture(Color.Yellow, 1, 1);

            // Terrain
            var terrainMaterial = new StandardMaterial(scene);

            terrainMaterial.Texture   = GraphicsHelper.CreateBorderTexture(Color.LightGreen, Color.LightSeaGreen, 128, 128, 4);
            terrainMaterial.Shininess = 10;
            terrainMaterial.Tiling    = new Vector2(16);

            var terrain = new TerrainPrefab("terrain");

            terrain.Renderer.Geometry.Size = new Vector3(4);
            terrain.Renderer.Geometry.Build();
            terrain.Flatten();
            terrain.Renderer.Material = terrainMaterial;
            terrain.Transform.Translate(-terrain.Width >> 1, 0, -terrain.Depth / 2);
            Add(terrain);

            // Cube
            var cubeSuperMaterial = new StandardMaterial(scene);

            cubeSuperMaterial.Texture       = GraphicsHelper.CreateCheckboardTexture(Color.FloralWhite, Color.DodgerBlue);
            cubeSuperMaterial.DiffuseColor  = Color.WhiteSmoke;
            cubeSuperMaterial.SpecularColor = new Color(0.8f, 0.8f, 0.8f, 1.0f);
            cubeSuperMaterial.Shininess     = 10;
            cubeSuperMaterial.EmissiveColor = new Color(0f, 0.0f, 0.2f, 1.0f);

            var cubeScene = new SceneObject();

            cubeScene.Transform.Translate(0, 6f, 0);
            cubeScene.Transform.LocalScale = new Vector3(4.0f);
            cubeScene.Transform.Rotate((float)Math.PI / 4, 0, (float)Math.PI / 4);
            var autoRot = cubeScene.AddComponent <AutoRotation>();

            autoRot.Rotation = new Vector3(0, 0.01f, 0);
            Add(cubeScene);

            var cube = cubeScene.AddComponent <MeshRenderer>();

            cube.ReceiveShadow = false;
            cube.Geometry      = new CubeGeometry();
            cube.Geometry.Build();
            cube.Material = cubeSuperMaterial;

            cubeScene.AddComponent <BoxCollider>();

            // Skybox
            RenderSettings.Skybox.Generate(Application.GraphicsDevice, Application.Content, DemoGame.StarsSkybox, 500);

            Screen.ShowCursor = true;
        }
Esempio n. 7
0
        public override void Initialize()
        {
            base.Initialize();

            Application.Engine.Renderer = new PreLightRenderer();

            // Camera
            var camPrefab = new CameraPrefab("camera");

            camPrefab.AddComponent <DemoBehaviour>();
            var camera = camPrefab.GetComponent <Camera>();

            camera.Far = 50000;

            var orbit = camPrefab.AddComponent <OrbitController>();

            orbit.MaxDistance = 250;
            Add(camPrefab);

            // Terrain
            var groundMaterial = new PreLightMaterial(scene);

            groundMaterial.Texture = GraphicsHelper.CreateCheckboardTexture(Color.LightGreen, Color.LightSeaGreen, 128, 128);
            groundMaterial.Tiling  = new Vector2(16);

            var ground = new TerrainPrefab("terrain");

            ground.Renderer.Geometry.Size = new Vector3(4, 1, 4);
            ground.Flatten();
            ground.Renderer.Material = groundMaterial;
            ground.Transform.Translate(-ground.Width >> 1, 0, -ground.Depth / 2);
            Add(ground);

            MeshRenderer cube     = null;
            var          maxCubes = 24;
            var          limits   = 250;

            for (int i = 0; i < maxCubes; i++)
            {
                var size = RandomHelper.GetVector3(0.5f, 0.5f, 0.5f, 16, 16, 16);
                cube                  = CreateCube(size, RandomHelper.GetVector3(-limits, size.Y, -limits, limits, size.Y, limits));
                cube.Material         = new PreLightMaterial(this);
                cube.Material.Texture = GraphicsHelper.CreateCheckboardTexture(RandomHelper.GetColor(), RandomHelper.GetColor());
                Add(cube.SceneObject);
            }

            for (int i = 0; i < 4; i++)
            {
                AddObject();
            }

            // Skybox
            RenderSettings.AmbientColor = new Color(0.15f, 0.15f, 0.15f, 1.0f);
            RenderSettings.Skybox.Generate(Application.GraphicsDevice, Application.Content, DemoGame.StarsSkybox, 1500.0f);

            Screen.ShowCursor = true;

            var margin = 80;

            AddBackedLight(new Vector3(0, 15, 0), Color.DarkCyan, 35);
            AddBackedLight(new Vector3(margin, 15, margin), Color.Red);
            AddBackedLight(new Vector3(-margin, 15, margin), Color.Blue);
            AddBackedLight(new Vector3(margin, 15, -margin), Color.Green);
            AddBackedLight(new Vector3(-margin, 15, -margin), Color.Yellow);
        }
Esempio n. 8
0
        public override void Initialize()
        {
            base.Initialize();

            // Skybox
            RenderSettings.Skybox.Generate(Application.GraphicsDevice, Application.Content, DemoGame.StarsSkybox);

            // Camera
            var camera = new CameraPrefab("camera");

            camera.Transform.Translate(0, 25, 0);
            camera.AddComponent <DemoBehaviour>();
            camera.AddComponent <PostProcessSwitcher>();
            Add(camera);

            var orbitController = camera.AddComponent <OrbitController>();

            // Light
            var lightPrefab = new LightPrefab("light", LightType.Directional);

            lightPrefab.Transform.Rotation = new Vector3(-1, 1, 0);
            lightPrefab.Light.ShadowGenerator.SetShadowMapSize(Application.GraphicsDevice, 1024);
            lightPrefab.EnableShadows   = true;
            lightPrefab.Light.Intensity = 0.5f;
            lightPrefab.Light.FallOf    = 5.0f;
            Add(lightPrefab);

            // Terrain
            var terrainMaterial = new StandardMaterial(scene);

            terrainMaterial.Texture   = Application.Content.Load <Texture2D>("Textures/Terrain/Rock");
            terrainMaterial.Shininess = 50;
            terrainMaterial.Tiling    = new Vector2(8);

            var terrain = new TerrainPrefab("terrain");

            terrain.Renderer.Geometry.Size = new Vector3(2);
            terrain.Renderer.ReceiveShadow = true;
            terrain.Randomize(4, 15, 0.086, 0.25, true);
            terrain.Renderer.Material = terrainMaterial;
            terrain.Transform.Translate(-terrain.Width >> 1, 0, -terrain.Depth / 2);
            Add(terrain);

            // Lava
            var lava = new LavaPrefab("water");

            Add(lava);

            lava.Generate("Textures/lava_texture", "Textures/lava_bump", new Vector3(terrain.Width * 0.5f));

            var jack = new ModelPrefab("Jack");

            jack.Transform.Rotate(-MathHelper.PiOver2, MathHelper.Pi, 0);
            jack.Transform.Translate(0, 35, 0);
            jack.Transform.LocalScale = new Vector3(4);
            jack.LoadModel("Models/Jack/JackOLantern");
            var jackMaterial = new StandardMaterial(this);

            jackMaterial.EmissiveColor = new Color(0.2f, 0.005f, 0);
            jackMaterial.Texture       = Application.Content.Load <Texture2D>("Models/Jack/PumpkinColor");
            jack.Renderer.Material     = jackMaterial;
            Add(jack);

            orbitController.LookAt(jack.Transform);
            orbitController.Distance = 150.0f;
        }