From 6f72049359651155be62846e7d080d7a5e871096 Mon Sep 17 00:00:00 2001 From: hachem Date: Thu, 21 Aug 2025 19:08:34 +0200 Subject: [fix]: proper scene loading --- src/Engine/Engine.cpp | 82 ++++++++++++++++++++++++++++++++++++++++++++++----- src/Engine/Engine.h | 7 ++++- 2 files changed, 81 insertions(+), 8 deletions(-) (limited to 'src/Engine') diff --git a/src/Engine/Engine.cpp b/src/Engine/Engine.cpp index f6c594c..fa010a7 100644 --- a/src/Engine/Engine.cpp +++ b/src/Engine/Engine.cpp @@ -5,6 +5,7 @@ #include #include "Engine.h" +#include "Core/Log.h" #include "Rendering/VertexBuffer.h" #include "Rendering/IndexBuffer.h" @@ -13,14 +14,14 @@ namespace Donut Engine::Engine() : m_SagA(glm::vec3(0.0f, 0.0f, 0.0f), 8.54e36f) { - GLFWwindow* window = static_cast(Application::Get().GetWindow().GetNativeWindow()); - glfwGetFramebufferSize(window, &m_Width, &m_Height); + m_Width = 1280; + m_Height = 720; m_Camera.SetCameraMode(CameraMode::Orbital); - m_Camera.SetOrbitalRadius(6.34194e10); - m_Camera.SetOrbitalLimits(1e10, 1e12); + m_Camera.SetOrbitalRadius(1e11); + m_Camera.SetOrbitalLimits(1e9, 1e13); m_Camera.SetOrbitalSpeed(0.01f); - m_Camera.SetZoomSpeed(25e9f); + m_Camera.SetZoomSpeed(1e10f); m_Objects = { @@ -47,12 +48,17 @@ namespace Donut void Engine::UpdateWindowDimensions() { - GLFWwindow* window = static_cast(Application::Get().GetWindow().GetNativeWindow()); + UpdateComputeDimensions(); + } + + void Engine::SetWindowDimensions(int width, int height) + { int oldWidth = m_Width; int oldHeight = m_Height; int oldComputeHeight = m_ComputeHeight; - glfwGetFramebufferSize(window, &m_Width, &m_Height); + m_Width = width; + m_Height = height; if (oldWidth != m_Width || oldHeight != m_Height || @@ -274,4 +280,66 @@ namespace Donut return { vertexArray, texture }; } + + void Engine::LoadObjectsFromScene(const std::vector& objects) + { + m_Objects.clear(); + m_Objects.push_back( + { + glm::vec4(0.00f, 0.00f, 0.00f, m_SagA.m_Rs), + glm::vec4(0, 0, 0, 1), + static_cast(m_SagA.m_Mass) + }); + + for (const auto& obj : objects) + { + ObjectData engineObj; + + float scaleFactor = 1e10f; + engineObj.m_PosRadius = glm::vec4 + ( + obj.m_Centre.x * scaleFactor, + obj.m_Centre.y * scaleFactor, + obj.m_Centre.z * scaleFactor, + obj.m_Radius * scaleFactor + ); + + engineObj.m_Color = glm::vec4(obj.m_Material.m_Color, 1.0f); + + float volume = (4.0f / 3.0f) * 3.14159f * engineObj.m_PosRadius.w * engineObj.m_PosRadius.w * engineObj.m_PosRadius.w; + float density = 1e12f; + engineObj.m_Mass = volume * density; + engineObj.m_Velocity = glm::vec3(0.0f, 0.0f, 0.0f); + + m_Objects.push_back(engineObj); + } + + DONUT_INFO("Loaded {} objects from WorldBuilder scene (scaled up by {})", objects.size(), 1e10f); + PrintObjectInfo(); + } + + void Engine::PrintObjectInfo() const + { + DONUT_INFO("=== Object Information ==="); + DONUT_INFO("Total objects: {}", m_Objects.size()); + + for (size_t i = 0; i < m_Objects.size(); ++i) + { + const auto& obj = m_Objects[i]; + DONUT_INFO("Object {}: Pos=({:.2e}, {:.2e}, {:.2e}), Radius={:.2e}, Mass={:.2e}, Color=({:.2f}, {:.2f}, {:.2f})", + i, + obj.m_PosRadius.x, obj.m_PosRadius.y, obj.m_PosRadius.z, + obj.m_PosRadius.w, + obj.m_Mass, + obj.m_Color.x, obj.m_Color.y, obj.m_Color.z + ); + } + DONUT_INFO("Camera position: ({:.2e}, {:.2e}, {:.2e})", + m_Camera.GetOrbitalPosition().x, + m_Camera.GetOrbitalPosition().y, + m_Camera.GetOrbitalPosition().z + ); + DONUT_INFO("Camera radius: {:.2e}", m_Camera.GetOrbitalRadius()); + DONUT_INFO("========================"); + } } diff --git a/src/Engine/Engine.h b/src/Engine/Engine.h index 05bd96f..f3724ff 100644 --- a/src/Engine/Engine.h +++ b/src/Engine/Engine.h @@ -8,8 +8,9 @@ #include #include -#include "Core/Application.h" #include "Core/Camera.h" +#include "Object.h" + #include "Rendering/Renderer.h" #include "Rendering/Shader.h" #include "Rendering/VertexArray.h" @@ -73,6 +74,7 @@ namespace Donut void RenderScene(); void UpdatePhysics(float deltaTime); void UpdateWindowDimensions(); + void SetWindowDimensions(int width, int height); int GetWidth() const { return m_Width; } int GetHeight() const { return m_Height; } @@ -97,6 +99,9 @@ namespace Donut void SetMaxStepsMoving(int steps) { m_MaxStepsMoving = steps; } void SetMaxStepsStatic(int steps) { m_MaxStepsStatic = steps; } void SetEarlyExitDistance(float distance) { m_EarlyExitDistance = distance; } + + void LoadObjectsFromScene(const std::vector& objects); + void PrintObjectInfo() const; private: Ref CreateComputeProgram(const char* path); std::pair, Ref> QuadVAO(); -- cgit v1.3