Dear ImGui 交互式手册教程
项目介绍
Dear ImGui 是一个为 C++ 设计的即时模式图形用户界面库。它以其高效、简洁和易用性在游戏开发和实时应用领域广受欢迎。本项目 imgui_manual
提供了一个在线的交互式手册,帮助开发者快速学习和使用 Dear ImGui。
项目快速启动
环境准备
确保你有一个支持 C++ 的开发环境。推荐使用 Visual Studio 或 CLion。
克隆项目
git clone https://github.com/pthom/imgui_manual.git
cd imgui_manual
构建项目
使用 CMake 进行构建:
mkdir build
cd build
cmake ..
make -j 4
运行示例
构建完成后,运行生成的可执行文件:
./imgui_manual
示例代码
以下是一个简单的示例代码,展示如何在 Dear ImGui 中创建一个按钮和一个计数器:
#include "imgui.h"
#include "imgui_impl_glfw.h"
#include "imgui_impl_opengl3.h"
#include <GLFW/glfw3.h>
int main() {
// 初始化 GLFW
if (!glfwInit())
return -1;
// 创建窗口
GLFWwindow* window = glfwCreateWindow(1280, 720, "Dear ImGui Example", nullptr, nullptr);
if (window == nullptr)
return -1;
glfwMakeContextCurrent(window);
glfwSwapInterval(1); // 启用垂直同步
// 初始化 ImGui
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
ImGui::StyleColorsDark();
// 设置 GLFW 和 OpenGL 后端
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init("#version 130");
// 主循环
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
// 开始新帧
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
// 创建 ImGui 窗口
ImGui::Begin("Hello, world!");
static int counter = 0;
if (ImGui::Button("Click me"))
counter++;
ImGui::SameLine();
ImGui::Text("counter = %d", counter);
ImGui::End();
// 渲染
ImGui::Render();
int display_w, display_h;
glfwGetFramebufferSize(window, &display_w, &display_h);
glViewport(0, 0, display_w, display_h);
glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
glfwSwapBuffers(window);
}
// 清理
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
应用案例和最佳实践
应用案例
Dear ImGui 广泛应用于游戏开发、实时数据可视化和嵌入式系统。例如,许多游戏开发者使用它来创建游戏内的调试工具和用户界面。
最佳实践
- 模块化设计:将界面逻辑与业务逻辑分离,便于维护和扩展。
- 性能优化:避免在每一帧中进行昂贵的计算,尽量使用缓存和预计算。
- 自定义风格:通过修改 ImGui 的样式和主题,使其更符合你的应用风格。
典型生态项目
ImPlot
ImPlot 是一个基于 Dear ImGui 的实时绘图库,提供了丰富的绘图功能,如折线图、柱状图和散点图等。它与 Dear ImGui 无缝集成,适用于需要实时数据可视化的应用。
Hello ImGui
Hello ImGui 是一个辅助库,提供了对 Dear ImGui 的封装和扩展,简化了窗口管理和平台集成。