osgWidget.CameraSwitchHandler是一个OpenSceneGraph的用户交互处理程序,它允许用户使用键盘或鼠标来切换相机。
要使用osgWidget.CameraSwitchHandler,您需要创建一个CameraSwitchHandler实例并将其附加到osgViewer.Viewer的事件处理程序中:
#include <osgViewer/Viewer>
#include <osgWidget/CameraSwitchHandler>
#include <osgWidget/WindowManager>
int main(int argc, char** argv)
{
    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
    
    // 创建窗口管理器
    osg::ref_ptr<osgWidget::WindowManager> wm = new osgWidget::WindowManager(viewer->getCamera(0)->getGraphicsContext());
    
    // 创建CameraSwitchHandler
    osg::ref_ptr<osgWidget::CameraSwitchHandler> handler = new osgWidget::CameraSwitchHandler(wm.get());
    // 将处理程序添加到视图器中
    viewer->addEventHandler(handler.get());
    
    // 运行视图器
    viewer->run();
    
    return 0;
}
osgWidget.CameraSwitchHandler可以使用一些配置选项进行自定义:
| 参数 | 说明 | 
|---|---|
| delay | 视图器在响应相机切换事件之前等待的时间(以毫秒为单位) | 
| scrollDelta | 滚动鼠标滚轮时相机的缩放因子 | 
| zoomInKey | 将相机拉近的键码,默认为‘+’(请注意,该值只能是一个ASCII字符) | 
| zoomOutKey | 将相机拉远的键码,默认为‘-’(请注意,该值只能是一个ASCII字符) | 
要设置这些选项,请在创建CameraSwitchHandler时将它们传递给构造函数:
osg::ref_ptr<osgWidget::CameraSwitchHandler> handler = new osgWidget::CameraSwitchHandler(wm.get(),
                                                                                               500,   // 延迟500毫秒
                                                                                               0.1,   // 缩放因子为0.1
                                                                                               'w',   // 按w键向前移动相机
                                                                                               's');  // 按s键向后移动相机
在使用osgWidget.CameraSwitchHandler时,请注意以下事项: