From d8ba57f6d45b9467520377ffcc1f453154d77430 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 9577d1e..ef9b93d 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/vertex_buffer.h" #include "rendering/index_buffer.h" @@ -13,14 +14,14 @@ namespace Donut Engine::Engine() : m_sag_a(glm::vec3(0.0f, 0.0f, 0.0f), 8.54e36f) { - GLFWwindow* window = static_cast(Application::get().get_window().get_native_window()); - glfwGetFramebufferSize(window, &m_width, &m_height); + m_width = 1280; + m_height = 720; m_camera.set_camera_mode(CameraMode::Orbital); - m_camera.set_orbital_radius(6.34194e10); - m_camera.set_orbital_limits(1e10, 1e12); + m_camera.set_orbital_radius(1e11); + m_camera.set_orbital_limits(1e9, 1e13); m_camera.set_orbital_speed(0.01f); - m_camera.set_zoom_speed(25e9f); + m_camera.set_zoom_speed(1e10f); m_objects = { @@ -47,12 +48,17 @@ namespace Donut void Engine::update_window_dimensions() { - GLFWwindow* window = static_cast(Application::get().get_window().get_native_window()); + update_compute_dimensions(); + } + + void Engine::set_window_dimensions(int width, int height) + { int old_width = m_width; int old_height = m_height; int old_compute_height = m_compute_height; - glfwGetFramebufferSize(window, &m_width, &m_height); + m_width = width; + m_height = height; if (old_width != m_width || old_height != m_height || @@ -273,4 +279,66 @@ namespace Donut return { vertex_array, texture }; } + + void Engine::load_objects_from_scene(const std::vector& objects) + { + m_objects.clear(); + m_objects.push_back( + { + glm::vec4(0.00f, 0.00f, 0.00f, m_sag_a.m_rs), + glm::vec4(0, 0, 0, 1), + static_cast(m_sag_a.m_mass) + }); + + for (const auto& obj : objects) + { + ObjectData engine_obj; + + float scale_factor = 1e10f; + engine_obj.m_pos_radius = glm::vec4 + ( + obj.m_centre.x * scale_factor, + obj.m_centre.y * scale_factor, + obj.m_centre.z * scale_factor, + obj.m_radius * scale_factor + ); + + engine_obj.m_color = glm::vec4(obj.m_material.m_color, 1.0f); + + float volume = (4.0f / 3.0f) * 3.14159f * engine_obj.m_pos_radius.w * engine_obj.m_pos_radius.w * engine_obj.m_pos_radius.w; + float density = 1e12f; + engine_obj.m_mass = volume * density; + engine_obj.m_velocity = glm::vec3(0.0f, 0.0f, 0.0f); + + m_objects.push_back(engine_obj); + } + + DONUT_INFO("Loaded {} objects from WorldBuilder scene (scaled up by {})", objects.size(), 1e10f); + print_object_info(); + } + + void Engine::print_object_info() 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_pos_radius.x, obj.m_pos_radius.y, obj.m_pos_radius.z, + obj.m_pos_radius.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.get_orbital_position().x, + m_camera.get_orbital_position().y, + m_camera.get_orbital_position().z + ); + DONUT_INFO("Camera radius: {:.2e}", m_camera.get_orbital_radius()); + DONUT_INFO("========================"); + } } diff --git a/src/engine/engine.h b/src/engine/engine.h index 124fa39..b0e06f3 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/vertex_array.h" @@ -73,6 +74,7 @@ namespace Donut void render_scene(); void update_physics(float delta_time); void update_window_dimensions(); + void set_window_dimensions(int width, int height); int get_width() const { return m_width; } int get_height() const { return m_height; } @@ -97,6 +99,9 @@ namespace Donut void set_max_steps_moving(int steps) { m_max_steps_moving = steps; } void set_max_steps_static(int steps) { m_max_steps_static = steps; } void set_early_exit_distance(float distance) { m_early_exit_distance = distance; } + + void load_objects_from_scene(const std::vector& objects); + void print_object_info() const; private: Ref create_compute_program(const char* path); std::pair, Ref> quad_vao(); -- cgit v1.3