https://github.com/zwcloud/ImGui
https://github.com/ocornut/imgui
https://usingcpp.wordpress.com/2016/12/10/vulkan-with-wxwidgets/
https://github.com/zwcloud/ImGui
https://github.com/ocornut/imgui
https://usingcpp.wordpress.com/2016/12/10/vulkan-with-wxwidgets/
转载于:https://www.cnblogs.com/lilei9110/p/9670726.html
简单介绍
因为我在写 LearnGL 系列笔记的时候,发现没有 GUI 可以用,好蛋疼,然后在 GitHub 上找到一个叫:Dear ImGui,这个IMGUI系统对我来说,太太太完美了,它是用 C++ 编写的一个 IMGUI 系统。
Unity 也有使用
看了下面的 案例截图 你会发现,原来前几年看到的一些大厂的各种 DEMO,或是一些软件原来就是用 Dear ImGui 制作的,Vulkan、OpenGL的一些示例,还有如果你使用过 Unity 的旧版的 IMGUI 系统,你就会发现 Unity 的 IMGUI 接口与 Dear ImGui 的非常类似,因为它们都是按 IMGUI 范例设计的,所以也就说,如果你用过 Unity 旧版 IMGUI 你肯定很容易接受 Dear ImGui 的接口。
现在库名字的理解
Git Hub 上 Dear ImGui 的简述:
Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies
然后我去下载 master 分支,压缩包也就 1.4 MB,基本都是纯代码,编译后更小,难怪它用 Bloat-free 来形容,非常精简的一个GUI 库。
名字历史
从 What is this library called? 中可得知,作者是从 2014 年开始编写的库,当时没想好名字,就暂时用了 ImGui 的名字。但是 IMGUI 这个术语很早之前就有提出来,IMGUI == Immediate-Mode Graphical User Interface,即时模式的图形用户接口,它是 Casey Muratori 提出来的,如果你想了解 IMGUI 范例,可以查看:http://www.johno.se/book/imgui.html,http://mollyrocket.com/861 或是在下面提到的 FAQ 中的更多的链接,或是 wiki 中的 Paradigm。Unity 用它来实例了自己的 IMGUI 范例。所以作者为了减少歧义,他在 2015.12 将库名改为 Dear ImGui(不是 ImGui,也不是IMGUI)。
入门步骤建议
后续更多功能的查阅,可以查看他的 git/wiki:https://github.com/ocornut/imgui/wiki
其中有一些不错的小部件:useful-widgets–references
也一些不错的文章:articles-about-dear-imgui
我自己粗略阅读过,也不是每个都不错,下面将一些我自己看过觉得不错的博客都列出来:
英文的视频:
英文的文章:
日语的 qiita 上的文章:
如果你想用 Dear ImGui 来制作软件,或是游戏引擎的GUI,可以使用他目前的 docking 分支的。
未来作者会合并到 master 分支,现在还在完善中。
值得一提的 Upcoming 内容:
Dear ImGui docking,可以查看:
https://ruurdsdevlog.wordpress.com/2020/03/07/c-desktop-application-with-dear-imgui/
docking 的可以再查考 wiki 上的各个推荐的 blog 或是 video
后面如果要给图片做一个资源管理,或是 材质系统管理,都需要了解如何加载图片
当然这些内容现在还没有引入到 master 分支,还在完善开发中,所以如果感兴趣可以 watch 持续关注这位大神 git。
为了提起你对 Dear ImGui 的兴趣我将一些截图放上来。
UNITY IMGUI
这几天研究OPENGL时,想找一个UI库来用,发现了IMGUI,到网上搜索评估中,突然发现它似乎和UNITY有关系。
UNITY文档中提到过IMGUI,不知道是不一个东西,仔细看了下文档,果然是。原文如下:
Legacy GUI
Unity originally had just two GUI Components. These have since been replaced by both the modern UI System, and the scripting-driven IMGUI System. The original GUI components are kept for legacy purposes but should not be used for new projects
原来情况是这样的:UNITY在UGUI出来之前,一直是自己撸的UI系统,简称【GUI】,就是我们熟悉的在OnGui()函数里写的那些东西。
GUI的API几乎就是抄IMGUI的,用法,名字都差不多,特点是效率低。
自从出了UGUI之后的某个版本,UNITY将【GUI】换为了IMGUI,如上面英文所述。
现在UGUI主要用于游戏中交互的UI,在此之前,大家都用NGUI
而IMGUI则替代了GUI原来的作用:用于游戏调试和自定义Inspector面板
1:IMGUI的字符编码只支持tuf8,所以使用一些代码前需要先转换字符编码
2:切换输入法时, 控制台提示LookupAccountName()failed. Error 1332 可以无视
3:有个过时的IMG:Begin会在内部用I到一个枚举mGuiCond_FirstUserEver,导致设置窗口一次属性保存到ini之后就不能再用代码设置属性了而是直接读取之前保存的ini内的属性,
而且不设置ImGuiWindowFlags_NoSavedSettings的话或者改动ImGui::Shutdown内的代码, imgui默认就会每次执行都生成ini。这是imgui设计的有点坑人的地方