ImGuizmo는 ImGui와 함께 사용되는 3D 기즈모 도구로, 모델의 위치, 회전, 스케일을 조작하는 데 유용합니다. ImGuizmo를 프로젝트에 추가하고 사용하는 기본적인 방법을 안내하겠습니다.
1. ImGuizmo 다운로드
bash
코드 복사
git clone https://github.com/CedricGuillemet/ImGuizmo.git
Shell
복사
2. 프로젝트에 ImGuizmo 추가
ImGuizmo의 ImGuizmo.h와 ImGuizmo.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 모드를 사용하지만, ROTATE 및 SCALE 모드도 지원합니다. 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 객체의 위치, 회전, 스케일을 조작할 수 있습니다.