Exemple #1
0
        private void AddObject()
        {
            var sceneObject = new SceneObject();
            var cube        = sceneObject.AddComponent <MeshRenderer>();

            cube.ReceiveShadow = false;
            cube.Geometry      = new CubeGeometry();
            cube.Geometry.Build();
            cube.Material         = new PreLightMaterial(scene);
            cube.Material.Texture = GraphicsHelper.CreateCheckboardTexture(RandomHelper.GetColor(), RandomHelper.GetColor(), 64, 64);

            var inc  = 75;
            var path = cube.AddComponent <SimplePath>();

            path.Loop = true;

            cube.Transform.Position   = RandomHelper.GetVector3(-inc, 3, -inc, inc, 15, -inc);
            cube.Transform.LocalScale = new Vector3(4);

            var autoRotate = cube.AddComponent <AutoRotation>();

            autoRotate.Rotation = Vector3.Normalize(RandomHelper.GetVector3(-0.01f, -0.01f, 0, 0.01f, 0.01f, 0));

            path.Begin();

            for (int i = 0; i < 6; i++)
            {
                path.AddPath(RandomHelper.GetVector3(-inc, 0, -inc, inc, 0, inc), cube.Transform);
            }

            path.End();

            Add(sceneObject);
        }
Exemple #2
0
        private void CreateMaterialCollection()
        {
            var i      = 0;
            var colors = new Color[] { Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Purple };
            var names  = new string[] { "Red", "Green", "Blue", "Yellow", "Purple" };
            var size   = colors.Length;

            // Procedurales textures.
            for (i = 0; i < size; i++)
            {
                CreateMaterial(string.Format("Border {0}", names[i]), GraphicsHelper.CreateBorderTexture(colors[i], Color.LightGray, 64, 64, 1));
            }

            for (i = 0; i < size; i++)
            {
                CreateMaterial(string.Format("Checkboard {0}", names[i]), GraphicsHelper.CreateCheckboardTexture(colors[i], Color.LightGray, 64, 64));
            }

            // Voxel pack by Kenney Vleugels for Kenney (www.kenney.nl) / License (Creative Commons Zero, CC0)
            var path  = Path.Combine("Content", "Textures", "VoxelPack");
            var files = Directory.GetFiles(Path.Combine(path, "Tiles"));
            var name  = string.Empty;

            for (i = 0; i < files.Length; i++)
            {
                name = Path.GetFileNameWithoutExtension(files[i]);
                CreateMaterial(name, "Textures/VoxelPack/Tiles/" + name);
            }

            files = Directory.GetFiles(Path.Combine(path, "Tiles", "Details"));
            for (i = 0; i < files.Length; i++)
            {
                name = Path.GetFileNameWithoutExtension(files[i]);
                CreateBillboardMaterial(name, "Textures/VoxelPack/Tiles/Details/" + name);
            }

            // Terrain textures
            CreateMaterial("Terrain Grass", "Textures/Terrain/Grass");
            CreateMaterial("Terrain Rock", "Textures/Terrain/Rock");
            CreateMaterial("Terrain Sand", "Textures/Terrain/Sand");
            CreateMaterial("Terrain Snow", "Textures/Terrain/Snow");

            // Billboards for the editor
            CreateBillboardMaterial("ED_Camera", "Icons/Camera_Icon");
            CreateBillboardMaterial("ED_Light", "Icons/Light_Icon");

            // Water material
            var waterMaterial = new WaterMaterial(this, "WaterMaterial");

            waterMaterial.Texture   = Asset.LoadTexture("Textures/water");
            waterMaterial.NormalMap = Asset.LoadTexture("Textures/wavesbump");
        }
Exemple #3
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);
        }
Exemple #4
0
        private void BuildScene()
        {
            var lightGo = GameObjectFactory.CreateLight(LightType.Point, Color.LightSteelBlue, 1.5f);

            lightGo.Transform.LocalPosition = new Vector3(-20, 20, 0);
            lightGo.Transform.LocalRotation = new Vector3(1, -1, 0);
            lightGo.AddComponent <DemoBehaviour>();
            Add(lightGo);

            lightGo.GetComponent <Light>().Range = 100;

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

            terrainMaterial.MainTexture = Application.Content.Load <Texture2D>("Textures/Terrain/Grass");
            terrainMaterial.Shininess   = 150;
            terrainMaterial.Tiling      = new Vector2(16);

            var terrainGo = GameObjectFactory.CreateTerrain();
            var terrain   = terrainGo.GetComponent <Terrain>();

            terrain.Renderer.Geometry.Size          = new Vector3(2);
            terrain.Renderer.Geometry.TextureRepeat = new Vector2(4);
            terrain.Renderer.Geometry.Build();
            terrain.Flatten();
            terrain.Renderer.CastShadow = true;
            terrain.Renderer.Material   = terrainMaterial;
            Add(terrainGo);

            var cubMat = new StandardMaterial(this);

            cubMat.MainTexture = GraphicsHelper.CreateCheckboardTexture(Color.Red, Color.White);
            cubMat.Tiling      = new Vector2(2, 2);

            for (var i = 0; i < 10; i++)
            {
                var go = new GameObject("Cube " + i);
                go.Transform.LocalPosition = RandomHelper.GetVector3(-20, 1, -20, 20, 1, 20);
                Add(go);
                var renderer = go.AddComponent <MeshRenderer>();
                renderer.Geometry = new CubeMesh();
                renderer.Geometry.Build();
                renderer.Material = cubMat;
            }

            // Skybox
            RenderSettings.Skybox.Generate(Application.GraphicsDevice, Application.Content, DemoGame.BlueSkybox);
        }
Exemple #5
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;
        }
Exemple #6
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);
        }