/// <summary>
        /// Loads the scene file from the specified file, discards current hierarchy and configures the loaded scene objects using the provided renderer.
        /// </summary>
        /// <param name="absolutePath">Absolute path to the scene file.</param>
        /// <param name="renderer">The renderer to use when configuring the loaded scene objects.</param>
        public static void LoadAndReplaceHierarchyAbsolute(string absolutePath, Renderer renderer)
        {
            SceneManager.currentRenderer = renderer;

            string jsonString = File.ReadAllText(absolutePath);

            var scene = JsonSerializer.Deserialize <SerializableScene>(jsonString);

            Hierarchy.Dispose();

            foreach (var savedObject in scene.SavedSceneObjects)
            {
                Hierarchy.Add(new SceneObject(savedObject));
            }

            for (int i = 0; i < Hierarchy.sceneObjects.Count; i++)
            {
                if (scene.SavedSceneObjects[i].Transform.ParentId != null)
                {
                    Hierarchy.sceneObjects[i].transform.parent = Hierarchy.sceneObjects.Find(so => so.transform.Id == scene.SavedSceneObjects[i].Transform.ParentId)?.transform;
                }
            }
        }
示例#2
0
        private static void Main()
        {
            // Create Renderer
            Renderer renderer = new Renderer("SharpDX - SceneManager", 1280, 720, 60);

            SceneManager.LoadAndReplaceHierarchyRelative("Solar system.json", renderer);
            //SceneManager.LoadAndReplaceHierarchyRelative("Earth and moon.json", renderer);

            //CreateSolarSystemScene(10f, 1.5f, 0.2f, renderer);
            //CreateEarthAndMoonScene(0.1f, 1f, 3f, renderer);

            // Create camera
            Camera camera = new Camera();

            camera.cameraPosition = new Vector3(0, 3, 10.0f);
            camera.cameraLookAt   = new Vector3(0, 0, 0);
            camera.fov            = (float)Math.PI / 4.0f;
            camera.aspectRatio    = renderer.form.Width / (float)renderer.form.Height;


            //SceneManager.SaveCurrentHierarchyRelative("Test scene 01.json");

            // Use clock
            Time.Start();

            bool isOnFirstScene = true;

            // Main loop
            RenderLoop.Run(renderer.form, () =>
            {
                // Advance time
                Time.NextFrame();

                // Demonstrate switching scenes
                if (isOnFirstScene)
                {
                    if ((int)Time.Elapsed % 8 >= 4)
                    {
                        isOnFirstScene = false;

                        SceneManager.SaveCurrentHierarchyRelative("Solar system.json");
                        SceneManager.LoadAndReplaceHierarchyRelative("Earth and moon.json", renderer);
                    }
                }
                else
                {
                    if ((int)Time.Elapsed % 8 < 4)
                    {
                        isOnFirstScene = true;

                        SceneManager.SaveCurrentHierarchyRelative("Earth and moon.json");
                        SceneManager.LoadAndReplaceHierarchyRelative("Solar system.json", renderer);
                    }
                }

                // Clear views
                renderer.ClearViews();


                // Update objects
                Hierarchy.Update();

                // Render
                Hierarchy.Render(camera, renderer);


                // Present
                renderer.swapChain.Present(0, PresentFlags.None);
            });


            //SceneManager.SaveCurrentHierarchyRelative("Solar system.json");
            //SceneManager.SaveCurrentHierarchyRelative("Earth and moon.json");

            //// Release all resources
            renderer.Dispose();
            Hierarchy.Dispose();
        }