ImGui 学习笔记(二)—— 多视口

devtools/2025/2/6 6:00:44/

在计算机图形学中,视口(Viewport)是一个可观察的多边形区域。

将物体渲染至图像的过程中,会用两种区域表示。世界坐标窗口是用户所关注的区域(即用户想要可视化的东西),坐标系由应用程序确定。例如程序可能会使用米、厘米等单位。此处的“窗口”并非窗口管理器里的视窗,而是借用窗户进行类比,因为它能够限制你所能够观察到的场景的范围。

视口也是一个区域,通常为矩形,且等同于窗口的客户区矩形,但它的坐标系由渲染设备确定。例如将关注的物体渲染至屏幕坐标时,会使用像素为单位。渲染时,通常会先根据世界坐标窗口去裁剪对象,然后再进行窗口至视口的变换。

在 Dear ImGui 的较高版本中,实验性地允许多视口功能。可以简单地理解为允许渲染对象超出主视口(第一个创建的视口)所限定的边界。其基本原理是当检测到 ImGui 窗口超出平台窗口的客户区边界时,自动创建新的平台窗口,并在新的平台窗口下渲染该 ImGui 窗口。在不开启背景 Alpha 的模式下(多视口和背景透明混合一起使用会出现 bug,目前在等待修复),用户几乎不会观察到任何明显的变化或者闪烁。

多视口效果

多视口功能可让我们无缝地从主渲染上下文中提取 Dear ImGui 窗口。在传统游戏编程中,引擎/游戏通常会创建一个与图形上下文相关联的 OS Platform 窗口(例如使用 DirectX、OpenGL),并且所有渲染都必须在此图形上下文中进行。

借助多视口,Dear ImGui 能够根据需要创建新的操作系统平台窗口和图形上下文,以托管已移出主操作系统平台窗口边界的 Dear ImGui。这是通过一组标志和函数(ImGuiPlatformIO结构内部)实现的,这些标志和函数允许 Dear ImGui 与各个后端进行通信。backends/ 文件夹中提供的大多数后端都可以支持多视口

除此之外,多视口还方便在多台显示器上使用 Dear ImGui。

使用 ImGui 的 docking (停靠)分支,将支持多视口和停靠功能,这个分支目前受到良好的维护和测试,相对稳定。

  • 添加配置标志:
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
  • 渲染主视口后,在主循环中添加:
// 更新和渲染为多视口扩展的平台窗口
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
{ImGui::UpdatePlatformWindows();ImGui::RenderPlatformWindowsDefault();// TODO:OpenGL 需要更多操作以便于保存和恢复 GL 上下文
}

注意:在给出的示例中已经实施这些修改,只需要在 main.cpp 中注意取消 ImGuiConfigFlags_ViewportsEnable 的注释即可启用多视口。


http://www.ppmy.cn/devtools/156470.html

相关文章

图数据集整理

一. 大图数据集: 1.Big Graph Data Setshttps://lgylym.github.io/big-graph/dataset.html SNAP的数据集很不错的 2. Network Data Repository | The First Interactive Network Data Repository 可视化的的数据集 二. 图异常检测数据集和工作汇总: https://github.com/Xi…

JavaScript系列(60)--云原生应用开发详解

JavaScript云原生应用开发详解 ☁️ 今天,让我们深入探讨JavaScript的云原生应用开发。云原生是一种构建和运行应用程序的方法,充分利用云计算模型的优势,使应用具有更好的可扩展性、弹性和敏捷性。 云原生基础架构 🌟 &#x1…

【MySQL】第一弹---MySQL 在 Centos 7环境安装

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 卸载不要的环境 2. 检查系统安装包 3. 卸载这些默认安装包 4. 获取mysql官方yum源 5. 安装mysql yum 源&am…

C++多线程编程——基于策略模式、单例模式和简单工厂模式的可扩展智能析构线程

1. thread对象的析构问题 在 C 多线程标准库中,创建 thread 对象后,必须在对象析构前决定是 detach 还是 join。若在 thread 对象销毁时仍未做出决策,程序将会终止。 然而,在创建 thread 对象后、调用 join 前的代码中&#xff…

C++ Primer 算术运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

Linux 安装 RabbitMQ

Linux下安装RabbitMQ 1 、获取安装包 # 地址 https://github.com/rabbitmq/erlang-rpm/releases/download/v21.3.8.9/erlang-21.3.8.9-1.el7.x86_64.rpm erlang-21.3.8.9-1.el7.x86_64.rpmsocat-1.7.3.2-1.el6.lux.x86_64.rpm# 地址 https://github.com/rabbitmq/rabbitmq-se…

04树 + 堆 + 优先队列 + 图(D1_树(D10_决策树))

目录 一、引言 二、算法原理 三、算法实现 四、知识小结 一、引言 决策树算法是一种常用的机器学习算法,可用于分类和回归问题。它基于特征之间的条件判断来构 建一棵树,树的每个节点代表一个特征,每个叶节点代表一个类别或回归值。决策…

全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(一)

目录 cors解决跨域 依赖注入使用 分层服务注册 缓存方法使用 内存缓存使用 缓存过期清理 缓存存在问题 分布式的缓存 cors解决跨域 前后端分离已经成为一种越来越流行的架构模式,由于跨域资源共享(cors)是浏览器的一种安全机制,它会阻止前端应用…