osgGA::StateSetManipulator:该事件响应类的功能是对渲染状态进行控制,openGL的渲染管线使用了状态机的机制,此事件响应类对状态进行控制体现在当用户按w键时,可在体线点三种模式下进行切换。按1,照明与非照明切换;b是否开启背面剔除模式切换;t在是否开启纹理的情况下切换。
osgViewer::ThreadingHandler:该事件响应的功能是改变线程模式,也可以改变线程同步点的位置。按m键对线程模式切换;e键对同步点位置进行切换。
WindowSizeHandler:对窗口的大小和分辨率进行改变,f键全屏;shift+<或者>对窗口分辨率进行调整。
HelpHandler:h键显示帮助信息。从osg::ArgumentParser类传入,可继承该类自定义帮助信息。
RecordCameraPathHandler:对当前Camera所经过的路径进行记录,实现录像与回放功能,z启动记录;拖动窗口按大写Z,回放。改变环境变量OSG_RECORD_CAMERA_PATH_FPS可以改变帧速。默认25。
LODScaleHandler:通过*与/热键(+sgift?)改变当前渲染的LOD级别。
ScreenCaptureHandler:输出当前屏幕的截屏信息到当前文件夹,c键截屏,大写C停止。生成screen_shot_*_X.jpg.
#include <Windows.h>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>
int main(int argc,char** argv)
{
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
osg::ArgumentParser arguments(&argc,argv); //帮助信息事件
arguments.getApplicationUsage()->setApplicationName(arguments.getApplicationName());
arguments.getApplicationUsage()->setDescription("Help Information");
osg::ref_ptr<osg::Node> glider = osgDB::readNodeFile("glider.osg"); //文件在当前工程目录下即和debug文件一个目录
viewer->addEventHandler(new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet())); //渲染状态事件
viewer->addEventHandler(new osgViewer::ThreadingHandler);
viewer->addEventHandler(new osgViewer::WindowSizeHandler);
viewer->addEventHandler(new osgViewer::StatsHandler);
viewer->addEventHandler(new osgViewer::HelpHandler(arguments.getApplicationUsage()));
viewer->addEventHandler(new osgViewer::RecordCameraPathHandler);
viewer->addEventHandler(new osgViewer::LODScaleHandler);
viewer->addEventHandler(new osgViewer::ScreenCaptureHandler);
viewer->setSceneData(glider);
return viewer->run();
}