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

osg解析系列-[osg::osgViewer] (视景器) 1.osgViewer::View中默认有一个主相机,附属相机可以有0~N个。附属相机存在时,主相机负责视图控制,附属相机群负责渲染;附属相机不存在时,主相机即负责视图控制又负责渲染。 阅读详情

目录

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个经常用到的辅助组件。其它组件参见如下博文:

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); 

OSG图形环境、视图与相机、FBO和视景器——Part1(官方教程后补) osg学习 阅读详情

相关推荐

OSG中抓取屏幕保存为图片

由于OSG

踏月寻玉 7190

浅谈osgViewer::StatsHandler、osg::Stats类的用法

浅谈osgViewer::StatsHandler、osg::Stats类的用法

danshiming的博客 2174

OSG —— 笔记1 - 指令调用模型

效果           关注 笔者 - jxd 微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O

2298

3D进阶之OSG:最基本的显示osgviewer

项目全部源码我还在整理,所以请暂时不要问源码的问题。 原来的培训教程在这里, OSG新版教学视频(2021)— 内容篇_哔哩哔哩_bilibili 但因为我使用VS2019, 不再使用VS2010这么老的版本,所以目前还在修改整理阶段。 这是我们实现的第一个程序序,很简单,全部源码如下, #include <CommonLib/Common/Common.h> #include <osgGA/StateSetManipulator> #include <osgVie

tanmx219的博客 5912

QT+OSG/osgEarth编译之八十五:osgViewer+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5核心库osgViewer)

通过一套osgViewer代码和框架,实现osgViewer的跨平台编译。 在Qt环境下,集成osgViewer头文件、库文件,构建跨平台编译的pro文件。 通过构建的一套配置工程,基于Qt Creator IDE,完成跨平台的编译实践。 在Windows、Linux、MacOS等操作系统上进行测试,成功编译,形成的成果(头文件、库文件等)可在不同系统下调用或使用,从而更好地构建跨平台解决方案。 采用的是osg3.6.5版本。 读者可参考博客中的集成原理和pro文件,构建不同版本的osgViewe跨平台包。

LuckyHanMo的博客 961

读书笔记|智能运维系统落地方案

对于互联网公司来说,系统复杂化导致的人工运维成本激增已经是普遍现象,采用智能运维是行之有效的应对策略。智能运维的核心思想是利用算法来处理海量运维数据,积累运维经验,从而代替人工思考判断,以自动化的过程实现风险的预防、发现、定位和处理。而智能运维系统是其中的重中之重,但建设企业应用智能运维系统,不是应用运维部独立规划设计就可以完成的,它需要业务、产品、开发、基础设施运维多部门协同才能顺利实施。 那么,作为运维人员,您是否了解智能运维系统的架构?如果参与规划建设智能运维系统,该怎么着手呢?下面我们立足实际需求

xiaoshuaca的博客 685

一、osgViewer应用基础(上)

1.打开VS,选择【新建】-【visual C++】-【win32】-【win32控制台应用程序】。 2.在解决资源方案管理器中, 右击【源文件】-【添加】-【新建项】 -【C++文件.cpp】 3. 在helloworld项目中的main.cpp文件中添加,此时运行会不成功,因为缺乏头文件,可以采用【附1的方法】成功运行,也可以采用下文所采取的新建头文件,添加依赖的方式。 #in...

qq_36119499的博客 2547

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法。

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法

weixin_42960380的博客 2500

osg的加载osgb数据(一)

osgArchive: 类似于zip,可将多个.osg模型打包成一个.osga的模型压缩包;单个的osgb文件我们大概了解了,osgb的data全文件呢?osgViewer: 四个程序当中用的最多的 OSG 程序,用于查看模型;osgVersion: 查看osg库版本;前提条件是假设大家已经完成了osg的编译。osgConv: 模型格式转换与压缩;

原在路上的博客。 1451

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

本地如何安装midscene.js运行环境

手把手教你本地安装midscene.js运行环境

实践助梦想成长 2608

2、《OSG快速入门指导》详细笔记1

OSG安装目录是在编译源码时指定的,会将相关的结果向这个目录输出,方便直接获取,设置环境变量等。在bin目录中OSG提供了可以直接运行的执行程序,他们都有各自的功能。上面的代码中仅仅执行了三个步骤:1、创建了顶点、法线和颜色数据的数组。2、将osg::Geometry对象实例化,并将上述数组添加到对象中。同时还添加了一个osg::DrawArrays对象以指定数据绘制的方式。3、将osg::Geode场景图形节点实例化,并将几何信息添加到其中。1、向量与数组类。

qq_44918555的博客 4866

AI开发提效10倍:从需求到部署的全流程实战指南(附Prompt模板)

用AI开发不是“偷懒”,而是把时间花在更有价值的地方——原来花80%时间写重复代码,现在用AI搞定后,能把精力放在“优化用户体验”“提升系统性能”这些核心工作上,这才是AI给开发者的真正红利。如果你还没开始用AI做开发,建议从“写一个简单接口”“补一段注释”开始尝试,先用起来再优化方法。记住:AI是工具,不是对手,学会驾驭它,你会发现开发效率提升的同时,还能告别无效加班。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1531

【OSG学习笔记】Day 3: OSG 实用工具

OpenSceneGraph(OSG)提供了一系列开箱即用的命令行工具,能极大提升 3D 场景开发与调试效率。本文将详细介绍 **osgViewer、osgVersion、osgArchive、osgConv** 这四个核心工具,涵盖功能、用法、实战案例,帮你快速掌握 OSG 生态的高效工作流。

u012739527的博客 791

电流镜结构实战:从零理解MOS管偏置电路设计(附吴金课程补充)

本文深入解析电流镜结构在MOS管偏置电路设计中的关键作用,从基本原理到实战应用全面覆盖。通过分析偏置电路的核心原理、破解设计难题的实用技巧,以及进阶优化策略,帮助工程师掌握这一模拟电路设计的核心技术。特别适合需要理解电流镜结构和基准电路设计的读者参考学习。

ujm5678901的博客 256

华为od 面试八股文_操作系统_01_含答案

华为od 面试八股文_操作系统_01_含答案

MISAYAONE的博客 3275

osg解析系列-需要将osg嵌入其他平台窗口时(MFC/QT/X),请使用osgViewer::GraphicsWindowEmbedded

SceneView已弃用,还保留它仅为了向后兼容。需要嵌入式渲染支持时,建议使用 osgViewer::Viewer 和 osgViewer::GraphicsWindowEmbedded组合使用,osgViewer::GraphicsWindowEmbedded提供了更大范围的功能和一致性的API。

qq_42531872的博客 857

QT5软件开发入门到项目实战PDF(配完整示例代码)(持续更新)

这是一套QT5软件开发入门到项目实战的教程,并配套了所有的案例完整代码,方便QT初学者快速入门;文章里包含了QT常用的控件使用介绍、多媒体应用、线程、网络编程、蓝牙、串口、应用发布、嵌入式设备环境部署、Android环境部署等;目前一共写了19章,627页,后续也会持续更新。

5万+

VS 2019 默认API 窗口

// Windows_API.cpp : 定义应用程序的入口点。 // #define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 // Windows 头文件 #include <windows.h> // C 运行时头文件 #include <stdlib.h> #include <mal...

TRW777 1416

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OSG一个最简单的viewer

#include"pch.h"//main.cpp #include <osgViewer/Viewer> #include <osgDB/ReadFile> using namespace std; int main() { osg::ref_ptr<osgViewer::Viewer> viewer=new osgViewer::Viewer; osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("gl

qq_40433221的博客 744

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OSG教程:场景保存类Viewer

来源:第三维度     作者:FreeSouth[杨石兴]编著     选自《OSG程序设计教程》第二章第四节     osgViewer::Viewer     类描述: 为一个单独的场景[scene]保存一个单独的view.     类中方法:     1:Viewer()     2:Viewer (osg::ArgumentParser &arguments)

TimothyFly的专栏 5867

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

osg多线程_osgViewer:: Viewer::advance() osg多线程与智能指针

void ViewerBase::frame(doublesimulationTime){if (_done) return;//OSG_NOTICE<if(_firstFrame){viewerInit();if (!isRealized()){realize();}_firstFrame= false;}advance(simulationTime);eventTraversal();u...

weixin_29491259的博客 599

1、osgViewer::Viewer,osgViewer::ViewerBase,osgGA::KeySwitchMatrixManipulator,osg::ArgumentParser的说明

一、osgViewer::Viewer类 Viewer() Viewer (osg::ArgumentParser &arguments) Viewer (const osgViewer::Viewer &viewer, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)说明:这三个函数是osgViewer::Viewer的构造函数。其中

sxj的专栏 2218

OSG3.4.0碰撞检测(下)

写在前面的话:笔者新手学习OpenSceneGraph3.4.0(OSG),并且C++的基础较差,OpenGL的基础也较差,都没有系统性科学性地学习过。由于毕业论文需要,所以突击学习,在网上各种论坛和各种博客里找不到太多有价值的参考代码,OSG本身的源码又看不懂。总之,想了很多办法,最近取得一点学习进展,现将osgViewer 碰撞检测知识点代码所学积累都公布出来,供小白使用。如果觉得有点用请留言...

Code与我 2138

osgViewer::Viewer和osgViewer::CompositeViewer

本文的目标是在向用户说明应该使用哪个Viewer。类继承关系 对比两个类的类继承图差异是对类进行分析的有用的方法,从中可以明确的是osgViewer::Viewer只是一个osgViewer::View,而osgViewer::CompositeViewer是一个osgViewer::View序列,包含多个osgViewer::View。 慨念上的差别 基本解释 中的文章 解释了二者慨念上的区别。 这篇针对CompositeViewer和Viewer的指导是从慨念和实践上的双重分析,如果没有点.

L_Andy的专栏 2149

使用osgQt源码方式实现osgViewer嵌入Qt窗体

1. 下载osgQt源码 GitHub - openscenegraph/osgQt 说明:本示例的osgQt版本下载后的src文件夹下文件列表如下 include路径下文件列表如下: 2. 把osgQt源码文件添加到Qt项目中 说明:本示例不单独编译osgQt源码,但是把全部osgQt源码以动态库的方式引入项目 ...

xuiiao的博客 2569
上一篇: Qt中以Q_DECLARE开头的几个宏的用法说明
下一篇: 离线下载VS2019及qt-vsaddin-msvc安装不上问题解决
荆楚闲人
博客等级 码龄20年 3万+粉丝 473原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值