osgViewer中的ScreenCaptureHandler、LODScaleHandler、HelpHandler事件处理器用法

news2024/11/25 23:03:14

目录

1. 前言

2. osgViewer::ScreenCaptureHandler

3. osgViewer::LODScaleHandler

4. osgViewer::HelpHandler

5. osgViewer::ThreadingHandler

1. 前言

       osg为视景器的使用和调试提供了丰富的辅助组件,它们主要是以osg::ViewerBase的成员变量或交互事件处理器(osgGA::GUIEventHandler)的形式出现。osgViewer::ScreenCaptureHandler、osgViewer::LODScaleHandler、osgViewer::HelpHandler 、osgViewer::ThreadingHandler类就是其中的4个经常用到的辅助组件。其它组件参见如下博文:

  • 浅谈osgViewer::StatsHandler、osg::Stats类的用法。
  • osgViewer中的WindowSizeHandler和osgGA中的StateSetManipulator事件处理器用法。

2. osgViewer::ScreenCaptureHandler

         该事件处理提供对屏幕三维场景画面捕获功能。说明如下:

  • 默认情况下,按下键盘c键(小写),则捕获当前帧画面并以文件名screen_shot.jpg保存到程序所在目录。
  • 默认情况下,按下键盘C键(大写),则持续捕获所有帧画面并以文件名screen_shot_N_M.jpg保存到程序所在目录,其中N >=0, M >=0,且N,M都是整数,以1递增。

osgViewer::ScreenCaptureHandler类提供了如下函数设置捕获当前帧或所有帧的键盘按键:

void setKeyEventTakeScreenShot(int key); // 设置捕获当前帧的键的虚拟键码
void setKeyEventToggleContinuousCapture(int key) // 设置捕获所有帧的键的虚拟键码

这样就可以将默认的c或C键更改为你自己想要的键。如下代码为将捕获当前帧画面、捕获所有帧画面的键改为数字0键,数字1键:

osgViewer::ScreenCaptureHandler sch;
sch.setKeyEventTakeScreenShot(osgGA::GUIEventAdapter::KEY_0);
sch.setKeyEventTakeScreenShot(osgGA::GUIEventAdapter::KEY_1);

如下代码为视景器对象添加屏幕画面捕获事件处理器:

osgViewer::Viewer viewer;
viewer.addEventHandler(new osgViewer::ScreenCaptureHandler);

3. osgViewer::LODScaleHandler

       该事件处理器为细分节点缩放处理器,实现相机对osg::LOD节点和裁剪访问器的支持。功能说明如下:

  • 默认情况下,按下键盘*键,则在上一次细分节点缩放比上扩大1.1倍。
  • 默认情况下,按下键盘/键,则在上一次细分节点缩放比上缩小1.1倍。

osgViewer::LODScaleHandler类提供了如下函数设置增加或减小缩放比按键设置:

 void setKeyEventIncreaseLODScale(int key);
 void setKeyEventDecreaseLODScale(int key);

这样就可以将默认的*、/ 键更改为你自己想要的键。如下代码为设置增加或减小缩放比按键改为数字2键,数字3键:  

osgViewer::LODScaleHandler lsh;
lsh.setKeyEventIncreaseLODScale(osgGA::GUIEventAdapter::KEY_2);
lsh.setKeyEventDecreaseLODScale(osgGA::GUIEventAdapter::KEY_3);

如下代码为视景器对象添加细分节点缩放处理器:

osgViewer viewer;
viewer.addEventHandler(new osgViewer::LODScaleHandler);

4. osgViewer::HelpHandler

该事件处理器为帮助处理器,实现帮助提示说明。功能说明如下:

  • 默认情况下,按下小写h键,则弹出帮助提示;再按一次小写h键,关闭帮助提示,如此反复。

如下为弹出帮助提示界面:

osgViewer::HelpHandler类提供了如下函数设置帮助弹出按键设置: 

void setKeyEventTogglesOnScreenHelp(int key)

 如下代码为设置帮助弹出为数字5键:  

osgViewer::HelpHandler   hh; 
hh.setKeyEventTogglesOnScreenHelp(osgGA::GUIEventAdapter::KEY_5);

如下代码为视景器对象添加帮助事件处理器:

osgViewer viewer;
auto pHH = new osgViewer::HelpHandler();
viewer.addEventHandler(pHH); 

5. osgViewer::ThreadingHandler

    该处理器为线程处理器,说明如下:

  • 默认情况下,反复按下键盘小写m键且两次之间按键相隔1秒以上时,则三维渲染线程模式在如下线程模式枚举之间切换:          
        enum ThreadingModel
        {
            SingleThreaded,
            CullDrawThreadPerContext,
            ThreadPerContext = CullDrawThreadPerContext,
            DrawThreadPerContext,
            CullThreadPerCameraDrawThreadPerContext,
            ThreadPerCamera = CullThreadPerCameraDrawThreadPerContext,
            AutomaticSelection
        };
  • 默认按下e键,则选择结束时是在交换Buffer之前还是在交换Buffer之后之间切换。

可以通过如下代码来改变按键设置:

void setKeyEventChangeThreadingModel(int key);
void setChangeThreadingModel(bool flag);

如下代码为视景器设置线程事件处理器:

osgViewer viewer;
auto pTH = new osgViewer::ThreadingHandler();
viewer.addEventHandler(pTH); 

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

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

相关文章

风险SQL 规范及案例

一、 原则 1、程序处理优先:数据库最容易也通常是一个系统的瓶颈,因此不要给数据库加压力,能够程序处理就程序处理。 2、简单操作数据库:一个系统越简单越稳定越不容易出问题, 因此要尽量简单使用数据库, 如SQL简单,事务小 3、数据存储评估:数据库资源宝贵,是很难水平…

饮用水污染预警系统的设计与开发(前后端分离)

1.饮用水污染预警系统的介绍 随着工业化和城市化进程的加速,水污染问题越来越引起人们的关注。饮用水是人类赖以生存的重要资源之一,饮用水污染对人类健康和社会经济发展产生的影响愈加突出。近年来,我国政府高度重视饮用水污染治理工作&…

车牌识别系统Python,基于深度学习CNN卷积神经网络算法

一、介绍 车牌识别系统,基于Python实现,通过TensorFlow搭建CNN卷积神经网络模型,对车牌数据集图片进行训练最后得到模型,并基于Django框架搭建网页端平台,实现用户在网页端输入一张图片识别其结果,并基于P…

自学黑客!一般人我劝你还是算了吧!

笔者本人 17 年就读于一所普通的本科学校,20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂,现就职于某大厂安全联合实验室。 我为啥说自学黑客,一般人我还是劝你算了吧!因为我就是那个不一般的人。 首先我谈下对黑客&am…

Andriod开发 Adapter ArrayAdapter

一、Adapter Adapter 是一个非常重要的组件,用于将数据与视图进行绑定。 一般的用法是一个View中要显示多个布局相同但数据不同的item(例如论坛界面的多个帖子,购物车里的多个商品)。 可以将item的布局和数据输入Adapter&#…

Django Admin Cookbook-5如何在Django Admin后台中添加Logo

目录 后台显示文字与自定义 1.如何更改管理后台标题Django administration? 2.如何设置模型的复数文本? 3.如何创建两个独立的管理站点? 4.如何从Django管理后台中删除默认应用程序? 5.如何在Django管理后台中添加Logo&#xff…

C++语法(24) 哈希应用

C语法(23)-- 模拟实现unordered_set和unordered_map_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130449452?spm1001.2014.3001.5501 目录 1.位图 1.定义 2.实现 3.应用 4.特点 2.布隆过滤器 1.介绍 2.设计场…

STM32F407输入捕获

文章目录 F407定时器输入捕获实验支持输入捕获的定时器有哪些输入捕获工作过程输入捕获测量高电平脉宽原理滤波器设置 配置步骤开启TIM5时钟与端口时钟配置PA0为用能复用功能(AF2)初始化端口并开启下拉电阻初始化TIM5设置TIM5的输入捕获参数TIM_Channel通…

数字信号处理10:Z变换(2)

今天我就不写后面的Z变换的剩下的东西了,直接写代码: 说实话,Python的Scipy.signal里面是没有和matlab一样的ztrans和iztrans,这让我头疼了几天时间,但是后面,看文档的时候,突然发现&#xff0…

Vue2模拟贪吃蛇小游戏

目录 一、效果展示 二、代码展示 三、原理讲解 3.1、页面创建 3.2、创建蛇与食物 3.3、移动与边界判断 3.4、吃、得分总结 二、代码展示 view的本地文件&#xff1a;可直接运行。 <template><div class"game"><div class"game-div"…

【架构基础】SOLID原则

SOLID原则是一套坚实而有效的软件设计原则&#xff0c;它由Robert C. Martin&#xff08;也称为 Uncle Bob&#xff09;在2000年提出&#xff0c;旨在帮助软件开发者设计出高内聚低耦合的软件&#xff0c;构建易于测试、可维护和可扩展的软件系统&#xff0c;降低软件后期的维护…

青春永不散场

虽然人生总是在不断的离别与相遇&#xff0c;但请相信这一次的离别是为了下次更美好的相遇。 一.毕业感想 四年的大学生活即将画上句号&#xff0c;让我不由得感慨万千。这四年里&#xff0c;我经历了无数的挑战和机遇&#xff0c;也结交了一群志同道合的朋友&#xff0c;收获…

抖音小程序+抖音矩阵系统开发:新玩法,新趋势

抖音seo优化源码&#xff0c;抖音seo矩阵系统搭建&#xff0c;抖音账号矩阵系统开发&#xff0c;企业在做账号矩阵过程中&#xff0c;最头疼的莫过于私域线索转化&#xff0c;作为开发者都知道&#xff0c;目前市面上我们了解的矩阵系统除了挂载POI信息外&#xff0c;无法挂载留…

【剑指offer】旋转数组的最小数字

文章目录 题目思路代码实现 题目 题目链接入口&#xff1a;JZ11 旋转数组的最小数字 思路 1.核心考点 &#xff08;1&#xff09;数组理解&#xff0c;二分查找&#xff0c;临界条件。 2.解题思路 &#xff08;1&#xff09;题目要求查找出一维数组的最小值&#xff0c;本…

变分模态分解(VMD)学习

目录 概述构造变分问题变分求解问题(引入拉格朗日)关于变分构造中的函数理解关于Uk(t)关于希尔伯特变换关于频谱调制 VMD算法(python) 概述 变分模态分解由Konstantin Dragomiretskiy于2014年提出&#xff0c;可以很好抑制EMD方法的模态混叠现象&#xff08;通过控制带宽来避免…

信息竞赛笔记(2)––快速幂

目录 快速幂 定义 分析 代码 递归实现 非递归实现(通用方法) 模意义下取幂 快速幂 定义 快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在的时间内计算的小技巧&#xff0c;而暴力的计算需要的时间。 这个技巧也常常用在非计算的场景&#xff0c;因为它可…

【论文】通过基准分析优化联邦人员重新识别的性能

论文链接 目录 摘要1. 绪论2. 相关工作2.1 人员重新识别2.2 联邦学习 3. 联邦 个人REID基准3.1 数据集3.2 联合方案3.3 模型结构3.4 联邦学习算法3.5 性能指标3.6 参考实现4.1 通过相机联合方案4.2 按数据集联合方案 5. 性能优化5.1 知识蒸馏5.2 权重调整5.3 知识蒸馏和体重调…

提高代码质量的秘诀:类、方法、字段和包注释

&#x1f9d1;‍&#x1f4bb;CSDN主页&#xff1a;夏志121的主页 &#x1f4cb;专栏地址&#xff1a;Java基础进阶核心技术专栏 目录 &#x1f362; 一、注释的插入 &#x1f363; 二、类注释 &#x1f364; 三、方法注释 &#x1f365; 四、字段注释 &#x1f96e; 五、…

GreenPlum集群部署之抽丝剥茧

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

【stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,喂到你嘴里】

文章目录 一、前言&#xff08;可跳过&#xff09;二、stable diffusion1.clip2.diffusion modelforward diffusion &#xff08;前向扩散&#xff09;逆向扩散&#xff08;reverse diffusion&#xff09;采样图阶段小结 3.Unet modeltimestep_embedding采用正余弦编码 三、sta…