Example #1
0
        protected Entity GetCube(Vector3 position, Vector3?scale = null, Color?color = null)
        {
            var cubeEntity = new Entity();

            var model    = new Model();
            var material = Material.New(GraphicsDevice, new MaterialDescriptor
            {
                Attributes =
                {
                    Diffuse      = new MaterialDiffuseMapFeature(new ComputeColor(color ?? Color.White)),
                    DiffuseModel = new MaterialDiffuseLambertModelFeature()
                }
            });

            model.Materials.Add(material);
            cubeEntity.Add(new ModelComponent(model));

            var modelDescriptor = new ProceduralModelDescriptor(new CubeProceduralModel());

            modelDescriptor.GenerateModel(Services, model);

            cubeEntity.Transform.Position = position;
            cubeEntity.Transform.Scale    = scale ?? Vector3.One;

            return(cubeEntity);
        }
Example #2
0
        protected override async Task LoadContent()
        {
            await base.LoadContent();

            Window.AllowUserResizing = true;

            // Instantiate a scene with a single entity and model component
            var scene = new Scene();

            // Create a cube entity
            cubeEntity = new Entity();

            // Create a procedural model with a diffuse material
            var model    = new Model();
            var material = Material.New(GraphicsDevice, new MaterialDescriptor
            {
                Attributes =
                {
                    Diffuse      = new MaterialDiffuseMapFeature(new ComputeColor(Color.White)),
                    DiffuseModel = new MaterialDiffuseLambertModelFeature()
                }
            });

            model.Materials.Add(material);
            cubeEntity.Add(new ModelComponent(model));

            var modelDescriptor = new ProceduralModelDescriptor(new CubeProceduralModel());

            modelDescriptor.GenerateModel(Services, model);

            // Add the cube to the scene
            scene.Entities.Add(cubeEntity);

            // Use this graphics compositor
            SceneSystem.GraphicsCompositor = GraphicsCompositorHelper.CreateDefault(false, graphicsProfile: GraphicsProfile.Level_9_1);

            // Create a camera entity and add it to the scene
            var cameraEntity = new Entity {
                new CameraComponent {
                    Slot = Services.GetSafeServiceAs <SceneSystem>().GraphicsCompositor.Cameras[0].ToSlotId()
                }
            };

            cameraEntity.Transform.Position = new Vector3(0, 0, 5);
            scene.Entities.Add(cameraEntity);

            // Create a light
            var lightEntity = new Entity()
            {
                new LightComponent()
            };

            lightEntity.Transform.Position = new Vector3(0, 0, 1);
            lightEntity.Transform.Rotation = Quaternion.RotationY(MathUtil.DegreesToRadians(45));
            scene.Entities.Add(lightEntity);

            // Create a scene instance
            SceneSystem.SceneInstance = new SceneInstance(Services, scene);
        }
Example #3
0
            protected override Entity CreateEntity()
            {
                // create a sphere model to display the material
                var proceduralModel = new ProceduralModelDescriptor {
                    Type = new SphereProceduralModel {
                        MaterialInstance = { Material = LoadedAsset }
                    }
                };

                model = proceduralModel.GenerateModel(Services);

                // create the entity, create and set the model component
                var materialEntity = new Entity {
                    Name = "thumbnail Entity of material: " + AssetUrl
                };

                materialEntity.Add(new ModelComponent {
                    Model = model
                });

                return(materialEntity);
            }
Example #4
0
        private Entity CreateMaterialPreview(Entity root, Vector3 position, out ModelComponent previewModel)
        {
            // create a sphere model to display the material
            var proceduralModel = new ProceduralModelDescriptor {
                Type = new SphereProceduralModel()
            };
            var model = proceduralModel.GenerateModel(Game.Services); // TODO: should dispose those resources at some points!

            // create the entity, create and set the model component
            var materialEntity = new Entity {
                Name = BuildName()
            };

            materialEntity.Add(previewModel = new ModelComponent
            {
                Model     = model,
                Materials = { [0] = CreateMaterial(Metalness, Glossiness) }
            });
            materialEntity.Transform.Position = position;

            root.AddChild(materialEntity);
            return(materialEntity);
        }
Example #5
0
        protected override async Task LoadContent()
        {
            await base.LoadContent();

            Window.AllowUserResizing = true;

            // Instantiate a scene with a single entity and model component
            var scene = new Scene();

            // Create a cube entity
            cubeEntity = new Entity();

            // Create a procedural model with a diffuse material
            var model    = new Model();
            var material = Material.New(GraphicsDevice, new MaterialDescriptor
            {
                Attributes =
                {
                    Diffuse      = new MaterialDiffuseMapFeature(new ComputeColor(Color.White)),
                    DiffuseModel = new MaterialDiffuseLambertModelFeature()
                }
            });

            model.Materials.Add(material);
            cubeEntity.Add(new ModelComponent(model));

            var modelDescriptor = new ProceduralModelDescriptor(new CubeProceduralModel());

            modelDescriptor.GenerateModel(Services, model);

            // Add the cube to the scene
            scene.AddChild(cubeEntity);

            // Create a camera entity and add it to the scene
            var cameraEntity = new Entity {
                new CameraComponent()
            };

            cameraEntity.Transform.Position = new Vector3(0, 0, 5);
            scene.AddChild(cameraEntity);

            // Create a light
            var lightEntity = new Entity()
            {
                new LightComponent()
            };

            lightEntity.Transform.Position = new Vector3(0, 0, 1);
            lightEntity.Transform.Rotation = Quaternion.RotationY(MathUtil.DegreesToRadians(45));
            scene.AddChild(lightEntity);

            // Create a graphics compositor
            var compositor = new SceneGraphicsCompositorLayers();

            bool isLDR = false;

            if (isLDR)
            {
                compositor.Master.Renderers.Add(new ClearRenderFrameRenderer());
                compositor.Master.Renderers.Add(new SceneCameraRenderer()
                {
                });
            }
            else
            {
                var layer           = new SceneGraphicsLayer();
                var renderHDROutput = new LocalRenderFrameProvider {
                    Descriptor = { Format = RenderFrameFormat.HDR, DepthFormat = RenderFrameDepthFormat.Shared }
                };
                layer.Output = renderHDROutput;
                layer.Renderers.Add(new ClearRenderFrameRenderer());
                layer.Renderers.Add(new SceneCameraRenderer());
                compositor.Layers.Add(layer);
                compositor.Master.Renderers.Add(new SceneEffectRenderer()
                {
                    Effect = new PostProcessingEffects()
                });
            }
            compositor.Cameras.Add(cameraEntity.Get <CameraComponent>());

            SceneSystem.SceneInstance = new SceneInstance(Services, scene);

            // Use this graphics compositor
            scene.Settings.GraphicsCompositor = compositor;

            // Create a scene instance
            SceneSystem.SceneInstance = new SceneInstance(Services, scene);
        }