working on gizmos
This commit is contained in:
parent
7e2769ac9e
commit
0e7913d3de
32
imgui.ini
32
imgui.ini
@ -10,24 +10,24 @@ Collapsed=1
|
||||
|
||||
[Window][WindowOverViewport_11111111]
|
||||
Pos=0,19
|
||||
Size=1280,701
|
||||
Size=1920,1158
|
||||
Collapsed=0
|
||||
|
||||
[Window][Inspector]
|
||||
Pos=913,19
|
||||
Size=367,202
|
||||
Pos=1553,19
|
||||
Size=367,659
|
||||
Collapsed=0
|
||||
DockId=0x00000018,0
|
||||
|
||||
[Window][Scene Tree]
|
||||
Pos=0,19
|
||||
Size=335,350
|
||||
Size=335,579
|
||||
Collapsed=0
|
||||
DockId=0x0000001B,0
|
||||
|
||||
[Window][Viewport]
|
||||
Pos=337,19
|
||||
Size=574,202
|
||||
Size=1214,659
|
||||
Collapsed=0
|
||||
DockId=0x00000017,0
|
||||
|
||||
@ -36,14 +36,14 @@ Size=1280,19
|
||||
Collapsed=0
|
||||
|
||||
[Window][Performance Info]
|
||||
Pos=1106,223
|
||||
Size=174,268
|
||||
Pos=1628,680
|
||||
Size=292,268
|
||||
Collapsed=0
|
||||
DockId=0x00000019,0
|
||||
|
||||
[Window][Console]
|
||||
Pos=337,223
|
||||
Size=736,497
|
||||
Pos=337,680
|
||||
Size=1238,497
|
||||
Collapsed=0
|
||||
DockId=0x00000013,0
|
||||
|
||||
@ -78,8 +78,8 @@ Collapsed=0
|
||||
DockId=0x00000015,1
|
||||
|
||||
[Window][Color Correction]
|
||||
Pos=1106,493
|
||||
Size=174,227
|
||||
Pos=1628,950
|
||||
Size=292,227
|
||||
Collapsed=0
|
||||
DockId=0x0000001A,0
|
||||
|
||||
@ -113,8 +113,8 @@ Collapsed=0
|
||||
DockId=0x0000000E,0
|
||||
|
||||
[Window][Audio Output]
|
||||
Pos=1075,223
|
||||
Size=29,497
|
||||
Pos=1577,680
|
||||
Size=49,497
|
||||
Collapsed=0
|
||||
DockId=0x00000012,0
|
||||
|
||||
@ -125,8 +125,8 @@ Collapsed=0
|
||||
DockId=0x0000000D,0
|
||||
|
||||
[Window][Resources]
|
||||
Pos=0,371
|
||||
Size=335,349
|
||||
Pos=0,600
|
||||
Size=335,577
|
||||
Collapsed=0
|
||||
DockId=0x00000010,0
|
||||
|
||||
@ -147,7 +147,7 @@ Column 0 Weight=1.0000
|
||||
Column 1 Width=120
|
||||
|
||||
[Docking][Data]
|
||||
DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1280,701 Split=X
|
||||
DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X
|
||||
DockNode ID=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X
|
||||
DockNode ID=0x00000001 Parent=0x00000005 SizeRef=335,701 Split=Y Selected=0x12EF0F59
|
||||
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59
|
||||
|
@ -1,2 +1 @@
|
||||
[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o
|
||||
[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\functions\Prefab.o src\build\core\functions\ScenePacker.o src\build\core\scripts\LuaGlobalBridge.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Popup.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\editor\windows\LuaGlobals.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp -lz
|
||||
[COMPILE] g++ -std=c++20 -Wall -g -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\Engine.cpp -o src\build\Engine.o
|
||||
|
@ -26,13 +26,11 @@
|
||||
#include "core/utils/LoadingWindow.h"
|
||||
#include "core/scripts/LuaGlobalBridge.h"
|
||||
|
||||
|
||||
#include "editor/windows/AssetBrowser.h"
|
||||
#include "editor/windows/Inspector.h"
|
||||
#include "editor/windows/AudioInfo.h"
|
||||
#include "editor/windows/LuaGlobals.h"
|
||||
|
||||
|
||||
#include <GL/glew.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <imgui.h>
|
||||
@ -435,53 +433,47 @@ void ShowColorCorrectionWindow()
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
#include <ImGuizmo.h>
|
||||
|
||||
void DrawGizmoForObject(const std::shared_ptr<Object>& obj, const glm::mat4& view, const glm::mat4& projection)
|
||||
void DrawGizmoForObject(const std::shared_ptr<Object> &obj,
|
||||
const glm::mat4 &view,
|
||||
const glm::mat4 &projection)
|
||||
{
|
||||
if (!obj)
|
||||
return;
|
||||
|
||||
// 1. Build model matrix from position and rotation
|
||||
glm::mat4 model = glm::translate(glm::mat4(1.0f), glm::vec3(obj->GetLocalPosition(), 0.0f));
|
||||
model = glm::rotate(model, obj->GetLocalRotation(), glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
// Model matrix at z = 1 to avoid clipping
|
||||
glm::mat4 model = glm::translate(glm::mat4(1.0f), glm::vec3(obj->GetLocalPosition(), 1.0f));
|
||||
model = glm::rotate(model, obj->GetLocalRotation(), glm::vec3(0, 0, 1));
|
||||
|
||||
// 2. Ensure ImGuizmo is configured correctly
|
||||
ImGuizmo::SetOrthographic(false);
|
||||
ImGuizmo::SetOrthographic(true);
|
||||
ImGuizmo::SetDrawlist();
|
||||
|
||||
ImVec2 winPos = ImGui::GetWindowPos();
|
||||
ImVec2 winSize = ImGui::GetWindowSize();
|
||||
ImGuizmo::SetRect(winPos.x, winPos.y, winSize.x, winSize.y);
|
||||
|
||||
// 3. Set ImGuizmo rect to match current window (e.g., your viewport)
|
||||
ImVec2 pos = ImGui::GetWindowPos();
|
||||
ImVec2 size = ImGui::GetWindowSize();
|
||||
ImGuizmo::SetRect(pos.x, pos.y, size.x, size.y);
|
||||
|
||||
// 4. Handle mode switching
|
||||
static ImGuizmo::OPERATION operation = ImGuizmo::TRANSLATE;
|
||||
static ImGuizmo::OPERATION op = ImGuizmo::TRANSLATE;
|
||||
if (ImGui::IsKeyPressed(ImGuiKey_T))
|
||||
operation = ImGuizmo::TRANSLATE;
|
||||
op = ImGuizmo::TRANSLATE;
|
||||
if (ImGui::IsKeyPressed(ImGuiKey_R))
|
||||
operation = ImGuizmo::ROTATE;
|
||||
op = ImGuizmo::ROTATE;
|
||||
|
||||
// 5. Perform manipulation
|
||||
glm::mat4 manipulated = model;
|
||||
ImGuizmo::Manipulate(glm::value_ptr(view), glm::value_ptr(projection),
|
||||
operation, ImGuizmo::LOCAL, glm::value_ptr(manipulated));
|
||||
op, ImGuizmo::LOCAL, glm::value_ptr(manipulated));
|
||||
|
||||
// 6. Apply result to object if actively using gizmo
|
||||
if (ImGuizmo::IsUsing())
|
||||
{
|
||||
glm::vec3 translation, rotation, scale;
|
||||
Logger::LogInfo("adasd");
|
||||
glm::vec3 t, r, s;
|
||||
ImGuizmo::DecomposeMatrixToComponents(glm::value_ptr(manipulated),
|
||||
glm::value_ptr(translation),
|
||||
glm::value_ptr(rotation),
|
||||
glm::value_ptr(scale));
|
||||
|
||||
obj->SetLocalPosition({translation.x, translation.y});
|
||||
obj->SetLocalRotation(rotation.z);
|
||||
glm::value_ptr(t),
|
||||
glm::value_ptr(r),
|
||||
glm::value_ptr(s));
|
||||
obj->SetLocalPosition({t.x, t.y});
|
||||
obj->SetLocalRotation(r.z);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Engine::Init()
|
||||
{
|
||||
|
||||
@ -802,7 +794,6 @@ void Engine::Run()
|
||||
ImGui::Checkbox("Audio Viewer", &g_engineConfig.settings.show_audio_window);
|
||||
ImGui::Checkbox("Lua Globals Viewer", &g_engineConfig.settings.show_lua_globals_window);
|
||||
|
||||
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
|
||||
@ -912,8 +903,6 @@ void Engine::Run()
|
||||
editorCameraSavedZoom = cameraZoom;
|
||||
editorCameraWasSaved = true;
|
||||
LuaGlobalBridge::Clear();
|
||||
|
||||
|
||||
}
|
||||
else if (!playing && lastPlaying && editorCameraWasSaved)
|
||||
{
|
||||
@ -921,7 +910,6 @@ void Engine::Run()
|
||||
cameraZoom = editorCameraSavedZoom;
|
||||
editorCameraWasSaved = false;
|
||||
LuaGlobalBridge::Clear();
|
||||
|
||||
}
|
||||
lastPlaying = playing;
|
||||
|
||||
@ -1305,7 +1293,7 @@ void Engine::Run()
|
||||
previewType = AssetType::Unknown;
|
||||
|
||||
selected = finalized;
|
||||
previousSelection = nullptr;
|
||||
previousSelection = nullptr;
|
||||
}
|
||||
}
|
||||
else if (previewObj && (!hoveringViewport || !dragging))
|
||||
@ -1326,15 +1314,21 @@ void Engine::Run()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
glm::mat4 projection = glm::ortho(
|
||||
0.0f, static_cast<float>(size.x),
|
||||
static_cast<float>(size.y), 0.0f,
|
||||
-1.0f, 1.0f
|
||||
);
|
||||
-100.0f, 100.0f);
|
||||
|
||||
glm::mat4 view = glm::translate(glm::mat4(1.0f), glm::vec3(-cameraPos, 0.0f));
|
||||
glm::vec2 screenCenter = glm::vec2(size.x, size.y) * 0.5f;
|
||||
|
||||
glm::mat4 view = glm::mat4(1.0f);
|
||||
|
||||
// Translate to center of screen
|
||||
view = glm::translate(view, glm::vec3(screenCenter, 0.0f));
|
||||
|
||||
view = glm::scale(view, glm::vec3(cameraZoom, cameraZoom, 1.0f));
|
||||
|
||||
view = glm::translate(view, glm::vec3(-cameraPos, 0.0f));
|
||||
|
||||
DrawGizmoForObject(selected, view, projection);
|
||||
|
||||
@ -1359,9 +1353,7 @@ void Engine::Run()
|
||||
|
||||
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
|
||||
|
||||
|
||||
glfwSwapBuffers(window);
|
||||
|
||||
}
|
||||
|
||||
for (auto &obj : pendingDeletion)
|
||||
@ -1806,13 +1798,8 @@ void Engine::Shutdown()
|
||||
|
||||
g_engineConfig.SaveToFile();
|
||||
|
||||
|
||||
AudioEngine::Shutdown();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ImGui_ImplOpenGL3_Shutdown();
|
||||
ImGui_ImplGlfw_Shutdown();
|
||||
ImGui::DestroyContext();
|
||||
@ -1820,7 +1807,4 @@ void Engine::Shutdown()
|
||||
glfwTerminate();
|
||||
|
||||
AssetManager::ClearAllAssets();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user