ImGUI项目建立(cmake+MinGW64)

news2024/12/27 10:35:42

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,需要:

  1. 把根目录的 .cpp, .h 文件都复制到自己的项目
  2. 选择一个合适的后端组合,比如 glfwopengl

接下来将使用glfw和opengl作为后端创建一个ImGUI的示例项目(使用cmake+MinGW编译)

可以用我建立好的项目:https://gitcode.net/m0_46079750/imguitemplate

首先建立项目目录结构:

image-20230624211039887在这里插入图片描述
├─lib
│  ├─glfw  # glfw可以自己去官网下载、编译
│  └─imgui
│      └─backend
└─src
  • lib 表示需要的库文件,需要2个库,一个是glfw,一个是imgui
  • src为自己的源码文件

glfw可以自己去官网下载、编译,也可以在我的项目里直接复制过去

在lib创建imgui文件夹,然后把imgui根目录下的几个h、cpp文件均拷贝过来

lib/imgui目录如下:

image-20230624211846983

然后把imgui项目的backends里用到的几个文件复制到自己项目的lib/imgui/backend文件夹,如下:

image-20230624211931065

最后去imgui项目里复制一个例子放到src文件夹下即可使用,例如这里使用glfw+opengl组合,因此就使用下面这个例子

image-20230624212521272

把这个例子里的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构建项目即可

运行示例如下:

image-20230624213435915

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

excel数据的编排与整理——表格结构的整理(一)

excel数据的编排与整理——表格结构的整理(一) 1 快速移动一列数据到指定位置 1.1 移动到相邻行 1.1.1 题目内容 1.1.2 选中年龄列➡移动到左侧直到出现十字箭头 1.1.3 按下shift键和左键➡移动到指定位置,直到出现"T"字形 1.1.4 松开鼠标左键后,移动就完成了 1.2…

Debian 12中安装Rstudio

1.Debian 12中安装R 打开终端,执行命令:#apt search r-base (注:此图为安装r-base后再来截图的),Debian 12官方源中默认为r-base 4.2.2,如果想安装最新版(当前最新版为R-4.3.0),可参考上次写的博文“Debi…

thinkphp 反序列化漏洞

文章目录 配置xdebug反序列化漏洞利用链详细分析poc1(任意文件删除)poc2(任意命令执行) 补充代码 配置xdebug php.ini [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug.dll xdebug.modedebu…

Windows系统下安装Hadoop

文章目录 安装步骤环境验证 前面我们已经讲过了在 Linux下安装配置Hadoop环境,还没看过的可以先去了解一下安装流程。今天我们来看一下如何在Window下安装Hadoop,这其实和在Linux下的安装都是大同小异的。下面我们具体来看一下安装步骤。 安装步骤 首先…

pytorch安装教程(Ubuntu22.04.1,Anaconda3-2023.03)

本文主要讲述了在Linux系统中,通过anaconda安装pytorch的具体步骤,即需要在Ubuntu已经安装好anaconda,其安装步骤可以参考此篇博客:Ubuntu安装Anaconda详细步骤(Ubuntu22.04.1,Anaconda3-2023.03&#xff0…

数据结构期末总结

数据结构绪论 数据结构的概念 数据结构 : 数据结构是相互之间存在一种或多种特定关系的数据元素的集合数据结构研究的问题 :数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科抽象数据类型ADT&#xff1a…

JWT漏洞

JWT介绍 1.1 JWT概念 JSON Web Token(JWT) 是一个开放标准。它定义了一种紧凑而独立的方法,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用secret(HMAC算法)或使用“…

SwinTransformer细节总结

SwinTransformer可以看成是披着ResNet外壳的vision transformer,swin 就是两个关键词:patch 多尺度。下面结合code来说一些重点的细节: 总览图 这里W-MSA缩写是window-multi head self attention,SW-MSA缩写是shifted window-mu…

JDK 8到JDK 17都有哪些吸引人的特性?

从JDK 8到JDK 17,Java语言和平台经历了许多变化和改进,引入了许多吸引人的新特性和功能。在这里,给大家列举一些我认为最有趣或最有用的新特性,并会以实际使用案例为大家展示新用法。希望大家多多点赞关注!&#xff01…

C语言的switch case函数

文章目录 1 函数结构2 执行过程3 break关键字4 补充说明参考 1 函数结构 switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句,基本格式如下: switch(表达式){ case 整型数值1: 语句 1; case 整型数值2: 语句 2; …

极致呈现系列之:Echarts词云图的数据共振

目录 什么是词云图词云图的特性及应用场景词云图的特性词云图的应用场景 Echarts中词云图的常用属性vue3中创建词云图 什么是词云图 词云图(Word Cloud)是一种以文字的形式展示数据的可视化图表。它通过将各个文字按照一定的规则排列,并根据…

车载软件架构 —— 闲聊几句AUTOSAR OS(六)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标准。到最…

centos版本的EDA虚拟机搭建2

这次教程主要介绍centos的必备软件的安装。 0、参考博客 1、VMware下CentOS 7虚拟机的安装 2、搭建属于自己的数字IC EDA环境(二):搭建Centos的基本使用环境和工具 3、cenos7基本配置 1、git安装 sudo yum install -y git2、gvim安装 su…

从大型语言模型LLM走向人工通用智能AGI的改进方向(public)

从大型语言模型走向人工通用智能AGI 返回论文和资料目录 1.导读 这篇博客主要基于《Sparks of Artificial General Intelligence: Early experiments with GPT-4》文中第9和第10节、以及我自己对当前LLM和AGI的理解。给出大型语言模型走向AGI时 改进的方向。 2.14个问题及改…

详解:阿里邮箱_阿里企业邮箱_阿里邮箱企业版

阿里邮箱是阿里云自主研发的,基于飞天平台自主研发的云原生分布式邮箱系统,阿里邮箱提供免费版、标准版、尊享版和集团版,企业邮箱版本不同支持的账号数也不同,共享网盘容量和个人网盘容量均不同,阿里云百科来详细介绍…

工厂方法模式(Factory Method)

别名 虚拟构造函数(Virtual Constructor)。 定义 工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 前言 1. 问题 假设你正在开发一款物流管理应用。最初版本只能处理卡车运…

【85 backtrader-cs因子测试的一些高级技巧-2】使用cython、c语言和c++加速某些函数的计算

在上一篇文章:【85 backtrader-cs因子测试的一些高级技巧】使用numba加速某些函数的计算中,使用了numba改进某些函数,实现加速,在这一篇文章中,尝试接着上一篇文章的主题,继续尝试用cython,c语言和c++尝试改进decayliear函数的计算速度。 结论: 从图上似乎可以得到下面…

Java程序性能优化技巧

1、慎用异常 在Java软件开发中,经常使用 try-catch 进行错误捕获,但是,try-catch 语句对系统性能而言是非常糟糕的。虽然在一次 try-catch中,无法察觉到它对性能带来的损失,但是,一旦try-catch被应用于循环…

从零开始 verilog 以太网交换机(五)帧合路单元的设计与实现

从零开始 verilog 以太网交换机(五)帧合路单元的设计与实现 🔈声明: 😃博主主页:王_嘻嘻的CSDN主页 🧨 从零开始 verilog 以太网交换机系列专栏:点击这里 🔑未经作者允许…

07-歌词滚动效果

现在学习的代码工作中不一定会需要,如果有,也已经做成了产品和库, 前端重点是创造,面试官考验你的能力是会提出最刁钻的问题给你的。 项目效果 原生JS效率是最高的,框架只是提高代码的可读性 favico图标添加 两种方…