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

目录

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中的ScreenCaptureHandler、LODScaleHandler、HelpHandler事件处理器用法_第1张图片

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,osg事件处理器)