From 3c8af0060a6d50f983cbf2669fdd8a96baa02b21 Mon Sep 17 00:00:00 2001 From: Irlan <-> Date: Wed, 11 Apr 2018 03:06:13 -0300 Subject: [PATCH] ui, camera --- examples/testbed/framework/debug_draw_2.cpp | 2 +- examples/testbed/framework/debug_draw_4.cpp | 2 +- examples/testbed/framework/model.h | 29 ++-- examples/testbed/framework/view.cpp | 149 +++++++++++--------- 4 files changed, 101 insertions(+), 81 deletions(-) diff --git a/examples/testbed/framework/debug_draw_2.cpp b/examples/testbed/framework/debug_draw_2.cpp index 227c947..ea83e7d 100644 --- a/examples/testbed/framework/debug_draw_2.cpp +++ b/examples/testbed/framework/debug_draw_2.cpp @@ -1313,7 +1313,7 @@ void DebugDraw::DrawString(const b3Color& color, const char* text, ...) va_list args; va_start(args, text); - ImGui::SetNextWindowPos(ImVec2(0.0f, 20.0f)); + ImGui::SetNextWindowPos(ImVec2(0.0f, 40.0f)); ImGui::SetNextWindowSize(ImVec2(g_camera->m_width, g_camera->m_height)); ImGui::Begin(g_overlayName, NULL, ImVec2(0.0f, 0.0f), 0.0f, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoScrollbar); diff --git a/examples/testbed/framework/debug_draw_4.cpp b/examples/testbed/framework/debug_draw_4.cpp index 7f5410c..bf4caf7 100644 --- a/examples/testbed/framework/debug_draw_4.cpp +++ b/examples/testbed/framework/debug_draw_4.cpp @@ -1321,7 +1321,7 @@ void DebugDraw::DrawString(const b3Color& color, const char* text, ...) va_list args; va_start(args, text); - ImGui::SetNextWindowPos(ImVec2(0.0f, 20.0f)); + ImGui::SetNextWindowPos(ImVec2(0.0f, 40.0f)); ImGui::SetNextWindowSize(ImVec2(g_camera->m_width, g_camera->m_height)); ImGui::Begin(g_overlayName, NULL, ImVec2(0.0f, 0.0f), 0.0f, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoScrollbar); diff --git a/examples/testbed/framework/model.h b/examples/testbed/framework/model.h index d99bfc5..1675f03 100644 --- a/examples/testbed/framework/model.h +++ b/examples/testbed/framework/model.h @@ -113,50 +113,55 @@ inline void Model::Action_SingleStep() inline void Model::Action_DefaultCamera() { m_camera.m_q = b3QuatRotationX(-0.125f * B3_PI); + + b3Quat d = b3QuatRotationY(0.125f * B3_PI); + + m_camera.m_q = d * m_camera.m_q; + m_camera.m_q.Normalize(); m_camera.m_center.SetZero(); - m_camera.m_zoom = 20.0f; + m_camera.m_zoom = 50.0f; } inline void Model::Action_LeftCamera() { - m_camera.m_q.Set(b3Vec3(0.0f, 1.0f, 0.0f), 0.5f * B3_PI); + m_camera.m_q = b3QuatRotationX(0.5f * B3_PI); m_camera.m_center.SetZero(); - m_camera.m_zoom = 20.0f; + m_camera.m_zoom = 50.0f; } inline void Model::Action_RightCamera() { - m_camera.m_q.Set(b3Vec3(0.0f, 1.0f, 0.0f), -0.5f * B3_PI); + m_camera.m_q = b3QuatRotationX(-0.5f * B3_PI); m_camera.m_center.SetZero(); - m_camera.m_zoom = 20.0f; + m_camera.m_zoom = 50.0f; } inline void Model::Action_BottomCamera() { - m_camera.m_q.Set(b3Vec3(1.0f, 0.0f, 0.0f), 0.5f * B3_PI); + m_camera.m_q = b3QuatRotationX(0.5f * B3_PI); m_camera.m_center.SetZero(); - m_camera.m_zoom = 20.0f; + m_camera.m_zoom = 50.0f; } inline void Model::Action_TopCamera() { - m_camera.m_q.Set(b3Vec3(1.0f, 0.0f, 0.0f), -0.5f * B3_PI); + m_camera.m_q = b3QuatRotationX(-0.5f * B3_PI); m_camera.m_center.SetZero(); - m_camera.m_zoom = 20.0f; + m_camera.m_zoom = 50.0f; } inline void Model::Action_BackCamera() { - m_camera.m_q.Set(b3Vec3(0.0f, 1.0f, 0.0f), -B3_PI); + m_camera.m_q = b3QuatRotationX(-B3_PI); m_camera.m_center.SetZero(); - m_camera.m_zoom = 20.0f; + m_camera.m_zoom = 50.0f; } inline void Model::Action_FrontCamera() { m_camera.m_q.SetIdentity(); m_camera.m_center.SetZero(); - m_camera.m_zoom = 20.0f; + m_camera.m_zoom = 50.0f; } inline void Model::Command_Press_Key(int button) diff --git a/examples/testbed/framework/view.cpp b/examples/testbed/framework/view.cpp index c677aa9..5caa370 100644 --- a/examples/testbed/framework/view.cpp +++ b/examples/testbed/framework/view.cpp @@ -139,6 +139,8 @@ View::~View() void View::Command_PreDraw() { ImGui_GLFW_GL_NewFrame(); + + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); } void View::Command_Draw() @@ -146,14 +148,9 @@ void View::Command_Draw() Camera& camera = m_model->m_camera; Settings& settings = m_model->m_settings; - ImVec2 buttonSize(-1.0f, 0.0f); - - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); - bool openAbout = false; if (ImGui::BeginMainMenuBar()) { - if (ImGui::BeginMenu("File")) { if (ImGui::MenuItem("Save")) @@ -194,7 +191,7 @@ void View::Command_Draw() ImGui::EndMenu(); } - + if (ImGui::BeginMenu("Tools")) { ImGui::EndMenu(); @@ -216,18 +213,19 @@ void View::Command_Draw() if (openAbout) { ImGui::OpenPopup("About Bounce Testbed"); - openAbout = false; } + ImVec2 buttonSize(-1.0f, 0.0f); + if (ImGui::BeginPopupModal("About Bounce Testbed", NULL, ImGuiWindowFlags_Popup | ImGuiWindowFlags_NoResize)) { extern b3Version b3_version; - + ImGui::Text("Bounce Testbed"); ImGui::Text("Version %d.%d.%d", b3_version.major, b3_version.minor, b3_version.revision); ImGui::Text("Copyright (c) Irlan Robson"); ImGui::Text("https://github.com/irlanrobson/bounce"); - + if (ImGui::Button("OK", buttonSize)) { ImGui::CloseCurrentPopup(); @@ -236,83 +234,100 @@ void View::Command_Draw() ImGui::EndPopup(); } - ImGui::SetNextWindowPos(ImVec2(camera.m_width - 250.0f, 0.0f)); - ImGui::SetNextWindowSize(ImVec2(250.0f, camera.m_height)); + ImGui::SetNextWindowPos(ImVec2(0.0f, 20.0f)); + ImGui::SetNextWindowSize(ImVec2(g_camera->m_width, 20.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0.0f, 0.0f)); - ImGui::Begin("Test", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); + ImGui::Begin("##ToolBar", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_MenuBar); + + if (ImGui::BeginMenuBar()) + { + ImGui::PushItemWidth(250.0f); + + ImGui::Separator(); + + if (ImGui::Combo("##Test", &settings.testID, GetTestName, NULL, g_testCount, g_testCount)) + { + m_model->Action_SelectTest(settings.testID); + } + + ImGui::PopItemWidth(); + + ImVec2 menuButtonSize(100.0f, 0.0f); + + ImGui::Separator(); + + if (ImGui::Button("Previous", menuButtonSize)) + { + m_model->Action_PreviousTest(); + } + + if (ImGui::Button("Next", menuButtonSize)) + { + m_model->Action_NextTest(); + } + + ImGui::Separator(); + + if (ImGui::Button("Play/Pause", menuButtonSize)) + { + m_model->Action_PlayPause(); + } + + if (ImGui::Button("Single Step", menuButtonSize)) + { + m_model->Action_SingleStep(); + } + + ImGui::Separator(); + + if (ImGui::Button("Restart", menuButtonSize)) + { + m_model->Action_RestartTest(); + } + + ImGui::Separator(); + + if (ImGui::Button("Reset Camera", menuButtonSize)) + { + m_model->Action_DefaultCamera(); + } + + ImGui::EndMenuBar(); + } + + ImGui::End(); + + ImGui::PopStyleVar(); + + ImGui::SetNextWindowPos(ImVec2(camera.m_width - 250.0f, 40.0f)); + ImGui::SetNextWindowSize(ImVec2(250.0f, camera.m_height - 40.0f)); + ImGui::Begin("Test Settings", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); ImGui::PushItemWidth(-1.0f); - - if (ImGui::Combo("##Test", &settings.testID, GetTestName, NULL, g_testCount, g_testCount)) - { - m_model->Action_SelectTest(settings.testID); - } - - ImGui::Separator(); - - if (ImGui::Button("Restart", buttonSize)) - { - m_model->Action_RestartTest(); - } - - if (ImGui::Button("Previous", buttonSize)) - { - m_model->Action_PreviousTest(); - } - - if (ImGui::Button("Next", buttonSize)) - { - m_model->Action_NextTest(); - } - - ImGui::Separator(); - - if (ImGui::Button("Play/Pause", buttonSize)) - { - m_model->Action_PlayPause(); - } - - if (ImGui::Button("Single Step", buttonSize)) - { - m_model->Action_SingleStep(); - } - - ImGui::Separator(); - - ImGui::Text("Camera"); - - ImGui::Separator(); - - if (ImGui::Button("Restart##Camera", buttonSize)) - { - m_model->Action_DefaultCamera(); - } - - ImGui::Separator(); - - ImGui::Text("Settings"); - - ImGui::Separator(); ImGui::Text("Hertz"); ImGui::SliderFloat("##Hertz", &settings.hertz, 0.0f, 240.0f, "%.1f"); + ImGui::Text("Velocity Iterations"); ImGui::SliderInt("##Velocity Iterations", &settings.velocityIterations, 0, 50); + ImGui::Text("Position Iterations"); - ImGui::SliderInt("#Position Iterations", &settings.positionIterations, 0, 50); + ImGui::SliderInt("##Position Iterations", &settings.positionIterations, 0, 50); + ImGui::Checkbox("Sleep", &settings.sleep); ImGui::Checkbox("Convex Cache", &settings.convexCache); ImGui::Checkbox("Warm Start", &settings.warmStart); ImGui::PopItemWidth(); - - ImGui::End(); - ImGui::PopStyleVar(); + ImGui::End(); } void View::Command_PostDraw() { + ImGui::PopStyleVar(); + ImGui::Render(); ImGui_GLFW_GL_RenderDrawData(ImGui::GetDrawData());