Search
Duplicate

imGuizmo 추가 및 간단한 예제

ImGuizmo는 ImGui와 함께 사용되는 3D 기즈모 도구로, 모델의 위치, 회전, 스케일을 조작하는 데 유용합니다. ImGuizmo를 프로젝트에 추가하고 사용하는 기본적인 방법을 안내하겠습니다.

1. ImGuizmo 다운로드

먼저, ImGuizmo GitHub 리포지토리에서 소스 코드를 다운로드합니다.
bash 코드 복사 git clone https://github.com/CedricGuillemet/ImGuizmo.git
Shell
복사

2. 프로젝트에 ImGuizmo 추가

ImGuizmo의 ImGuizmo.hImGuizmo.cpp 파일을 프로젝트에 추가합니다. ImGuizmo는 ImGui를 기반으로 하므로, 이미 ImGui가 프로젝트에 추가되어 있어야 합니다.

예: CMake를 사용할 경우

cmake 코드 복사 add_library(ImGuizmo STATIC path/to/ImGuizmo.cpp) target_include_directories(ImGuizmo PUBLIC path/to/imgui path/to/ImGuizmo) target_link_libraries(your_project_name ImGuizmo ImGui)
Plain Text
복사

3. ImGuizmo 초기화 및 설정

ImGuizmo는 별도의 초기화 함수가 필요하지 않지만, ImGui::NewFrame() 호출 후 ImGuizmo::BeginFrame()을 호출하여 ImGuizmo를 준비합니다. ImGuizmo의 기능을 사용하려면 카메라의 뷰 행렬, 투영 행렬, 모델 행렬을 사용하여 기즈모를 설정해야 합니다.
cpp 코드 복사 #include "ImGuizmo.h" #include "imgui.h" void SetupGizmo(const ImVec2& windowPos, const ImVec2& windowSize, float* viewMatrix, float* projectionMatrix, float* modelMatrix) { // ImGuizmo 프레임 시작 ImGuizmo::BeginFrame(); // ImGuizmo의 위치 및 크기를 설정 (윈도우 내부에 기즈모 표시) ImGuizmo::SetRect(windowPos.x, windowPos.y, windowSize.x, windowSize.y); // 기즈모 조작 모드 설정 ImGuizmo::OPERATION gizmoOperation = ImGuizmo::TRANSLATE; // 이동 모드 ImGuizmo::MODE gizmoMode = ImGuizmo::WORLD; // 세계 좌표계 모드 // 기즈모 조작 ImGuizmo::Manipulate(viewMatrix, projectionMatrix, gizmoOperation, gizmoMode, modelMatrix); }
C++
복사

4. 기즈모 모드 변경

ImGuizmo는 기본적으로 TRANSLATE 모드를 사용하지만, ROTATESCALE 모드도 지원합니다. ImGui UI에서 모드를 변경할 수 있습니다.
cpp 코드 복사 ImGuizmo::OPERATION gizmoOperation = ImGuizmo::TRANSLATE; if (ImGui::RadioButton("Translate", gizmoOperation == ImGuizmo::TRANSLATE)) gizmoOperation = ImGuizmo::TRANSLATE; if (ImGui::RadioButton("Rotate", gizmoOperation == ImGuizmo::ROTATE)) gizmoOperation = ImGuizmo::ROTATE; if (ImGui::RadioButton("Scale", gizmoOperation == ImGuizmo::SCALE)) gizmoOperation = ImGuizmo::SCALE; // 기즈모 조작 함수 호출 시 ImGuizmo::Manipulate(viewMatrix, projectionMatrix, gizmoOperation, ImGuizmo::WORLD, modelMatrix);
C++
복사

6. ImGuizmo의 결과 적용

Manipulate 함수를 통해 변형된 모델 행렬(modelMatrix)이 조작 후 변경됩니다. 이 변환된 행렬을 객체에 적용하여 이동, 회전, 스케일링이 반영되도록 하면 됩니다.
이제 ImGuizmo를 사용하여 ImGui 창 안에서 3D 객체의 위치, 회전, 스케일을 조작할 수 있습니다.