7UVcyDd.gif

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

1. ImGuizmo 다운로드

먼저, ImGuizmo GitHub 리포지토리에서 소스 코드를 다운로드합니다.

bash
코드 복사
git clone <https://github.com/CedricGuillemet/ImGuizmo.git>

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)

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);
}

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);

6. ImGuizmo의 결과 적용

Manipulate 함수를 통해 변형된 모델 행렬(modelMatrix)이 조작 후 변경됩니다. 이 변환된 행렬을 객체에 적용하여 이동, 회전, 스케일링이 반영되도록 하면 됩니다.


이제 ImGuizmo를 사용하여 ImGui 창 안에서 3D 객체의 위치, 회전, 스케일을 조작할 수 있습니다.