はじめに
Dear ImGuiではvisual studioのサンプルプロジェクトが提供されているが、 visual studioを使いたくないので、CMake対応させてみた。 あとImGuiのソースファイルをコピペして使うのではなくて、サブモジュール化して使いたかった。
Dear ImGuiとは
Youtubeで簡単な紹介動画(https://www.youtube.com/watch?v=LSRJ1jZq90k)がある。
簡単にまとめるとグラフィックスAPIは以下の2種類に分かれる。
-
保持モード Retained Mode
- 効率的:イベントが発生したときだけ
- 静的:はじめに構築される
- コーディングに時間かかる。設計大事。
- ユースケース:電卓とか、日常的に使うような普通のアプリ
-
即時モード Immediate Mode
- 非効率:ポーリングベース
- 動的:フレーム毎に構築される
- コーディングしやすい。プロトタイピング向き。
- ユースケース:リアルタイムシミュレーション
Microsoftの解説:https://docs.microsoft.com/en-us/windows/win32/learnwin32/retained-mode-versus-immediate-mode
今回は使うImGuiは即時モード、よくあるWPFやMFCとかは保持モード。 保持モードしか使ったことない人は即時モードのコーディングしやすさにびっくりすると思うし、びっくりした。 大学の研究するときにとか、開発の途中経過を確認するのにとても向いているはず。
CMake対応
Githubにアップしている。 https://github.com/yanofu/imgui-glfw-opengl3-cmake
このリポジトリには、example_glfw_opengl3を対象に作成したシンプルなCMakeLists.txt
をアップしている。
windows環境なら直ぐ使えるはず。
CMakeLists.txt
の内容は以下の通り。
cmake_minimum_required(VERSION 3.0.0)
project(sample VERSION 0.0.0)
find_package(OpenGL)
set(IMGUI_SOURCE_DIR ${CMAKE_SOURCE_DIR}/imgui)
set(IMGUI_BACKENDS_DIR ${IMGUI_SOURCE_DIR}/backends)
set(IMGUI_LIBS_DIR ${IMGUI_SOURCE_DIR}/examples/libs)
set(GL3W_SOURCE_DIR ${IMGUI_LIBS_DIR}/gl3w)
set(GLFW_INCLUDE_DIR ${IMGUI_LIBS_DIR}/glfw/include)
set(GLFW_LIB ${IMGUI_LIBS_DIR}/glfw/lib-vc2010-64/glfw3.lib)
set(SOURCE_FILES
${IMGUI_SOURCE_DIR}/examples/example_glfw_opengl3/main.cpp
${IMGUI_SOURCE_DIR}/imgui_demo.cpp
${IMGUI_SOURCE_DIR}/imgui_draw.cpp
${IMGUI_SOURCE_DIR}/imgui_tables.cpp
${IMGUI_SOURCE_DIR}/imgui.cpp
${IMGUI_SOURCE_DIR}/imgui_widgets.cpp
${IMGUI_BACKENDS_DIR}/imgui_impl_opengl3.cpp
${IMGUI_BACKENDS_DIR}/imgui_impl_glfw.cpp
${GL3W_SOURCE_DIR}/GL/gl3w.c
)
add_executable(sample ${SOURCE_FILES})
target_include_directories(sample PRIVATE
${IMGUI_SOURCE_DIR}
${IMGUI_BACKENDS_DIR}
${GLFW_INCLUDE_DIR}
${GL3W_SOURCE_DIR}
)
target_link_libraries(sample
OpenGL::GL
${GLFW_LIB}
)
使うときはサブモジュールごとクローンしてくる。
git clone --recursive https://github.com/yanofu/imgui-glfw-opengl3-cmake.git
vscodeで実行すると以下のように表示される。
windowsで実行する場合、ビルド環境としてvisual studioをインストールしておくこと。 cmake toolsとcmakeの拡張機能を入れると便利。
今後
- 3D Viewerを追加して、点群とか表示させたい。
- implotをつかいこなしたい