/// <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; } } }
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(); }