From 402a65ec072e6a4f34cce02d8e31ac76e6d5ca2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Pinto?= Date: Sun, 26 May 2024 20:18:17 +0100 Subject: [PATCH] imgui stuff --- engine/include/group.hpp | 2 +- engine/src/group.cpp | 5 +++-- engine/src/main.cpp | 39 ++++++++++++++++++++++++++++++++++----- imgui.ini | 9 +++++++-- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/engine/include/group.hpp b/engine/include/group.hpp index c9fcb90..8450606 100644 --- a/engine/include/group.hpp +++ b/engine/include/group.hpp @@ -34,7 +34,7 @@ class Group { void rotate(float angle, float x, float y, float z); - void drawGroup(bool lights, const Frustsum& frustsum, bool normals, float elapsed_time); + void drawGroup(bool lights, const Frustsum& frustsum, bool normals, float elapsed_time, int& nr_models); }; diff --git a/engine/src/group.cpp b/engine/src/group.cpp index 39b0da4..5d40ad3 100644 --- a/engine/src/group.cpp +++ b/engine/src/group.cpp @@ -58,7 +58,7 @@ glm::mat4 applyTransformations(std::vector order, return matrix; } -void Group::drawGroup(bool lights, const Frustsum& frustsum, bool normals, float speed_factor) { +void Group::drawGroup(bool lights, const Frustsum& frustsum, bool normals, float speed_factor, int& nr_models) { glPushMatrix(); glm::mat4 matrix = applyTransformations(this->order, this->static_transformations, this->rotations, this->translates, speed_factor); @@ -69,13 +69,14 @@ void Group::drawGroup(bool lights, const Frustsum& frustsum, bool normals, float } if(model.bounding_sphere.isInsideFrustsum(frustsum, matrix)) { + nr_models++; model.drawModel(); if(normals) model.drawNormals(); } } for (Group& sub : this->subgroups) { - sub.drawGroup(lights, frustsum, normals, speed_factor); + sub.drawGroup(lights, frustsum, normals, speed_factor, nr_models); } glPopMatrix(); diff --git a/engine/src/main.cpp b/engine/src/main.cpp index d4cc4f3..1d06206 100644 --- a/engine/src/main.cpp +++ b/engine/src/main.cpp @@ -12,6 +12,7 @@ extern "C" { #define _USE_MATH_DEFINES #include #include +#include #include "Configuration.hpp" #include "curves.hpp" @@ -29,6 +30,10 @@ bool normals = false; bool culling = false; bool lighting = false; float speed_factor = 1.0f; +bool models_menus = false; + +int total_models = 0; +int nr_models = 0; int timebase; float frames; @@ -36,6 +41,14 @@ float frames; Configuration c; Camera camera; +struct ModelInfo { + int vertex_number; + int triangle_number; +}; + +std::unordered_map models_info; + + void reshape(int w, int h) { float aspect_ratio = (float)w / (float)h; @@ -99,7 +112,11 @@ void setupConfig(char* arg) { void setupModels(Group& group) { for (Model& model : group.models) { + total_models++; model.initModel(); + + ModelInfo info = {model.vbo.size(), model.ibo.size() / 3}; + models_info[model.filename] = info; } for (Group& g : group.subgroups) { setupModels(g); @@ -127,12 +144,13 @@ void renderMenu() { ImGui::Begin("Infos", NULL, ImGuiWindowFlags_AlwaysAutoResize); ImGui::Text("FPS: %.1f (%.3f ms/frame)", io.Framerate, 1000.f / io.Framerate); - ImGui::Text("Camera Position: (%f, %f, %f)", camera.position.x, camera.position.y, camera.position.z); - ImGui::Text("Camera LookAt: (%f, %f, %f)", camera.lookAt.x, camera.lookAt.y, camera.lookAt.z); - ImGui::Text("Fov: %d Ratio: %.1f Near: %f Far: %f", c.camera.fov, static_cast(glutGet(GLUT_WINDOW_WIDTH) / glutGet(GLUT_WINDOW_HEIGHT)), c.camera.near, c.camera.far); + ImGui::Text("Camera Position: (%.3f, %.3f, %.3f)", camera.position.x, camera.position.y, camera.position.z); + ImGui::Text("Fov: %d Ratio: %.1f Near: %.3f Far: %.3f", c.camera.fov, static_cast(glutGet(GLUT_WINDOW_WIDTH) / glutGet(GLUT_WINDOW_HEIGHT)), c.camera.near, c.camera.far); ImGui::Text("XML File: %s", filename.c_str()); - + ImGui::Text("Models: %d (Total %d)", nr_models, total_models); + ImGui::Checkbox("Models Info", &models_menus); ImGui::End(); + } { ImGui::Begin("Options", NULL, ImGuiWindowFlags_AlwaysAutoResize); @@ -159,6 +177,16 @@ void renderMenu() { } ImGui::End(); } + if(models_menus){ + ImGui::Begin("Models", NULL, ImGuiWindowFlags_AlwaysAutoResize); + for (auto& model : models_info) { + ImGui::Text("Model: %s", model.first.c_str()); + ImGui::Text("Vertices: %d Triangles: %d", model.second.vertex_number, model.second.triangle_number); + //separator here + ImGui::Separator(); + } + ImGui::End(); + } ImGui::Render(); glViewport(0, 0, (GLsizei) io.DisplaySize.x, (GLsizei) io.DisplaySize.y); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); @@ -209,7 +237,8 @@ void renderScene(void) { drawLights(c.lights); } - c.group.drawGroup(lighting, frustsum, normals, speed_factor); + nr_models = 0; + c.group.drawGroup(lighting, frustsum, normals, speed_factor, nr_models); // Start the Dear ImGui frame renderMenu(); diff --git a/imgui.ini b/imgui.ini index 9e85340..84a42d1 100644 --- a/imgui.ini +++ b/imgui.ini @@ -5,11 +5,16 @@ Collapsed=0 [Window][Infos] Pos=15,18 -Size=304,116 +Size=325,139 Collapsed=0 [Window][Options] -Pos=14,141 +Pos=15,169 Size=312,124 Collapsed=0 +[Window][Models] +Pos=770,16 +Size=297,183 +Collapsed=1 +