Dear ImGUI
ImGui是一个轻量级的C++图形界面库,它可以用于创建各种交互式的工具和编辑器。具有跨平台、高性能的特点。
ImGUI自身不能创建窗口,需要使用Win32API或glfw或SDL等工具来创建窗口,另外需要使用OpenGL或DirectX、vulkan用于渲染图形等,SDL、OpenGL等均被称为后端(backends)
- SDL负责创建窗口对象,处理用户输入等
- OpenGL负责绘制图形,设置着色器,更新uniform变量等
- imgui负责创建和渲染GUI元素,如文本,按钮,颜色选择器等
ImGui的使用方法很简单,只需要将ImGui的源码文件添加到自己的项目中,然后选择一个合适的后端(例如glfw或SDL,OpenGL或DirectX),就可以开始绘制各种控件和窗口了。
下载
前往GitHub下载https://github.com/ocornut/imgui
下载完成后,你会看到ImGui的目录结构如下:
imgui/
-
backends/ 后端文件夹,包含了不同平台和渲染器的实现代码
-
examples/ 示例文件夹,包含了各种使用ImGui的示例程序
-
misc/ 杂项文件夹,包含了一些辅助工具和扩展模块
-
imconfig.h 配置文件,可以用来修改ImGui的一些默认设置
-
imgui.cpp/imgui.h ImGui的核心源码文件,必须添加到你的项目中
-
imgui_demo.cpp/imgui_demo.h ImGui的演示源码文件,包含了各种控件和窗口的示例代码
-
imgui_draw.cpp/imgui_draw.h ImGui的绘制源码文件,负责渲染各种图形元素
-
imgui_internal.h ImGui的内部头文件,包含了一些高级功能和实现细节
-
imgui_tables.cpp/imgui_tables.h ImGui的表格源码文件,提供了创建和管理表格的功能
-
imgui_widgets.cpp/imgui_widgets.h ImGui的控件源码文件,提供了创建和管理各种控件的功能
-
imstb_rectpack.h/imstb_textedit.h/imstb_truetype.h 第三方库文件,用于矩形打包、文本编辑和字体渲染
使用
要在自己的项目使用ImGUI,需要:
- 把根目录的
.cpp
,.h
文件都复制到自己的项目 - 选择一个合适的后端组合,比如
glfw
和opengl
接下来将使用glfw和opengl作为后端创建一个ImGUI的示例项目(使用cmake+MinGW编译)
可以用我建立好的项目:https://gitcode.net/m0_46079750/imguitemplate
首先建立项目目录结构:
├─lib
│ ├─glfw # glfw可以自己去官网下载、编译
│ └─imgui
│ └─backend
└─src
- lib 表示需要的库文件,需要2个库,一个是glfw,一个是imgui
- src为自己的源码文件
glfw可以自己去官网下载、编译,也可以在我的项目里直接复制过去
在lib创建imgui文件夹,然后把imgui根目录下的几个h、cpp文件均拷贝过来
lib/imgui目录如下:
然后把imgui项目的backends里用到的几个文件复制到自己项目的lib/imgui/backend
文件夹,如下:
最后去imgui项目里复制一个例子放到src文件夹下即可使用,例如这里使用glfw+opengl组合,因此就使用下面这个例子
把这个例子里的main.cpp文件复制到src文件夹即可,最后的项目结构如下:
ImGUITemplate
├─lib
│ ├─glfw
│ └─imgui
│ │ imconfig.h
│ │ imgui.cpp
│ │ imgui.h
│ │ imgui_demo.cpp
│ │ imgui_draw.cpp
│ │ imgui_internal.h
│ │ imgui_tables.cpp
│ │ imgui_widgets.cpp
│ │ imstb_rectpack.h
│ │ imstb_textedit.h
│ │ imstb_truetype.h
│ │ LICENSE.txt
│ │
│ └─backend
│ imgui_impl_glfw.cpp
│ imgui_impl_glfw.h
│ imgui_impl_opengl3.cpp
│ imgui_impl_opengl3.h
│ imgui_impl_opengl3_loader.h
│
└─src
main.cpp
然后编写cmakelists.txt
cmake_minimum_required(VERSION 3.10)
project(imguiTmpl)
set(CMAKE_CXX_STANDARD 11)
include_directories(lib/glfw/include
lib/imgui
lib/imgui/backend
)
link_directories(
lib/glfw/lib
)
file(GLOB_RECURSE IMGUI_SRCS lib/imgui/*.cpp)
add_executable(imguiTmpl WIN32 src/main.cpp ${IMGUI_SRCS}) #添加WIN32参数就不会显示控制台界面了
target_link_libraries(imguiTmpl glfw3.a opengl32) # 链接库文件
最后使用cmake构建项目即可
运行示例如下: