2017-11-06 - 2019-01-05 (update) |
|
|
*imgui とは
C++でGUIを作るためのライブラリです.図1は,imguiを利用して作成したGUIの例を表します.これ以外にも様々なGUIを設計可能で,下記imguiのGitHubのページからいくつか例を見ることができます.
{{small:imgui GitHub : [link:https://github.com/ocornut/imgui] }}
[img:fcdv]
{{small:図1 imguiを利用して作成したGUIの例}}
*サンプルコード
ダウンロードしたリポジトリにVisualStudioやXcodeのプロジェクトファイルが親切に置いてあるので,そこからサンプルプログラムを起動できます.
{{small:imgui GitHub : [link:https://github.com/ocornut/imgui] }}
{{small:サンプルプログラムには様々なデモが用意されているので,それを見ながら使い方を学習できます.}}
*imgui + GLFW
GLFWを利用する場合の簡単なサンプルコードを紹介します.
{{small:下記サンプルは、2019/01/05時点で最新の「imgui v1.66」で動作確認しています。}}
{#
#include "stdio.h"
#include "imgui.h"
#include "imgui_impl_glfw.h"
#include "imgui_impl_opengl2.h"
#include "GLFW/glfw3.h"
int main() {
if (!glfwInit()) return 1;
GLFWwindow* window = glfwCreateWindow(800, 600, "sample2", NULL, NULL);
glfwMakeContextCurrent(window);
IMGUI_CHECKVERSION();
ImGui::CreateContext();
// imgui init
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL2_Init();
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
glClearColor(0.45f, 0.55f, 0.60f, 1.00f);
glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL2_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
// gui
{
ImGui::Begin("Test Window");
ImGui::Text("Hello, world %d", 123);
if (ImGui::Button("OK")) {
printf("Button\n");
}
static char buf[256] = "aaa";
if (ImGui::InputText("string", buf, 256)) {
printf("InputText\n");
}
static float f = 0.0f;
if (ImGui::SliderFloat("float", &f, 0.0f, 1.0f)) {
printf("SliderFloat\n");
}
ImGui::End();
}
ImGui::Render();
ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData());
glfwSwapBuffers(window);
}
ImGui_ImplOpenGL2_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();;
glfwTerminate();
return 0;
}
#}
上記のプログラムによって,図2の様なGUIを生成できます.
[img:wctx]
{{small:図2 GUIの例}}
*補足
フォントを設定すれば,日本語対応も可能です.
{{small:場合によっては,グリフの範囲を設定する必要があるようです.詳しくは,下記リンクをご確認ください.}}
{{small:imgui で日本語が「?」になる場合の対処(benikabocha様) [link:https://qiita.com/benikabocha/items/a25571c1b059eaf952de] }}
>> ご意見・ご質問など お気軽にご連絡ください.info