ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Dear ImGui 入门:三步搭出你的第一个 C++ 即时模式界面

Dear ImGui 入门:三步搭出你的第一个 C++ 即时模式界面 Dear ImGui 入门三步搭出你的第一个 C 即时模式界面【免费下载链接】imguiDear ImGui: Bloat-free Graphical User interface for C with minimal dependencies项目地址: https://gitcode.com/GitHub_Trending/im/imguiDear ImGui 是一个无依赖的 C GUI 库它把界面直接画在你自己的渲染帧里不需要额外的窗口系统或布局框架。它适合手里已经有一个程序游戏、工具、可视化应用想快速加一块设置面板、调试屏或数据展示的人。这篇 Dear ImGui 教程只讲一件事把它跑起来从克隆仓库到写出第一个窗口中间穿插解释关键机制。先判断场景这三类活儿适合 Dear ImGui动手前先确认场景是否匹配避免引入不必要的框架。如果你的程序是实时应用——游戏、模拟器、可视化程序——需要在渲染窗口上叠加可调参数或调试信息Dear ImGui 就是为这种场景设计的。如果你在做编辑器类工具需要树形视图、表格、颜色选择器这类控件它的内置控件集合够用。如果你希望界面嵌进自己的渲染管线、而不是弹一个独立的系统窗口即时模式的设计意味着零窗口管理成本。反过来如果你要的是完全独立、表单复杂的业务软件优先考虑 Qt、WinUI 这类重型框架更合适。克隆仓库入门先认准三个目录先执行git clone https://gitcode.com/GitHub_Trending/im/imgui把代码拉到本地。整个仓库不用全记住核心入口是根目录的 imgui.cpp、imgui_draw.cpp、imgui_widgets.cpp 三个源文件加 imgui.h 头文件backends/目录存放渲染适配层每种图形 APIOpenGL、Vulkan、DirectX、Metal 等都有一对 .cpp/.h你只需要挑自己用的那一组examples/里是可运行的完整示例每个对应一种后端组合。卡住的时候先翻docs/FAQ.md。跑通最小 demo把后端文件加进工程每帧按固定节奏调用以最常用的 GLFW OpenGL3 组合为例步骤很明确把backends/imgui_impl_glfw.cpp和backends/imgui_impl_opengl3.cpp两个文件连同根目录核心源码一起加进工程然后在 main() 里按固定顺序初始化——先建上下文、设样式最后初始化后端因为后端的初始化函数会读取上下文和样式里的状态。主循环中每帧遵循“三个 NewFrame → 画控件 → Render”的节奏骨架代码如下ImGui::CreateContext(); ImGui::StyleColorsDark(); ImGui_ImplGlfw_InitForOpenGL(window, true); ImGui_ImplOpenGL3_Init(#version 130); // 每帧主循环里 ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); ImGui::Begin(我的工具); ImGui::Text(你好Dear ImGui); ImGui::End(); ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());运行后你会看到渲染窗口左上角出现一个小暗色窗口标题“我的工具”里面一行文字能拖动、能关闭说明环境已通。#version 130参数是给旧版 GL 用的可按你项目的 GLSL 版本往上调。如果只想先看效果这是任何 ImGui 使用教程里最短的一条路。理解即时模式为什么“每帧重建界面”不是 bug第一次读代码的人多半会在这里卡住控件代码写在主循环里每帧都“画”一遍窗口状态岂不是丢了这正是即时模式 GUI 的设计UI 代码就是状态每帧重建是常态库只在那一帧内记住“谁被点了”。好处是控件代码可以放在任何地方、随时调用不需要布局文件、不需要类继承去绑定界面。要记的只有一条规矩凡是要被控件读写的值——滑块的 float、勾选框的 bool——都在外层留一个持久变量传指针进去。上手时先打开ImGui::ShowDemoWindow()那是官方自带的完整演示所有控件都有现成示例。组织界面一手控件一手样式参数界面基本由两类东西组成控件与布局。Dear ImGui 内置了一套现成控件——按钮、滑块、输入框、勾选框、树节点、表格、颜色选择器传一个地址加一个标签就能用。比如下面这段三控件的小配置面板static float speed 1.0f; static bool show_grid true; ImGui::SliderFloat(速度, speed, 0.1f, 5.0f); ImGui::Checkbox(显示网格, show_grid); ImGui::Button(应用);运行后你会看到面板里竖排出现一个滑块、一个勾选框和一个按钮全部可交互。注意变量声明成了 static——这就是即时模式保存持久状态的方式。布局上它默认自动控件按竖直方向排想横排就调用SameLine()让下一个控件接在同一行嵌套区域用BeginChild()划一块固定高度、可滚动的子面板。改样式则是拿ImGui::GetStyle()改颜色、圆角、边距改动一帧之内就能生效。日常节奏就是先把控件摆对再调外观。排障三步界面不显示、无响应、卡顿坑集中在三处。第一界面不显示十有八九是初始化顺序错了或漏了 RenderDrawData确认ImGui::Render()在提交绘制数据之前调用且每帧都调而不是只在启动时调一次。第二输入无响应确认后端 NewFrame 被调用、窗口事件有透传GLFW 和 SDL 后端会自动接管输入自建窗口系统则需要自己把事件喂给 ImGui。第三性能常见误区是“控件不能多”真正贵的是大表格和长文本的高频重建把大面板拆成页签或树节点、子面板按需打开即可。更深的问题去docs/FAQ.md和docs/BACKENDS.md的排障章节找对应条目。延伸把示例工程换成你自己的图形 API最小 demo 跑通后下一步是把examples/里的 GLFW 示例替换成你项目实际使用的 API 组合再把界面代码逐步迁移过去。需要显示中文时先读docs/FONTS.md弄清字体加载想要更精细的字形质量可以看看misc/freetype/下的 FreeType 光栅化器。一个稳妥的顺序先完整跑一遍examples/example_glfw_opengl3再按你的图形 API 选后端接入然后用 Demo 窗口当参照写自己的界面。卡住时最快的方法是照抄 Demo 窗口里对应控件的示例写法再和自己的调用对比——即时模式界面不需要从零发明先让它动起来再谈打磨。【免费下载链接】imguiDear ImGui: Bloat-free Graphical User interface for C with minimal dependencies项目地址: https://gitcode.com/GitHub_Trending/im/imgui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表