osg中主要使用osgGA库来处理用户的交互动作的,通常使用GUIEventAdapter类作为系统交互事件和OSG交互事件的适配接口。
通过一个示例,通过键盘来控制模型的显隐:
#pragma once
#include "osgInc.h"
class KeyboardHandler : public osgGA::GUIEventHandler {
public:
KeyboardHandler();
~KeyboardHandler();
virtual bool handle(const osgGA::GUIEventAdapter&, osgGA::GUIActionAdapter&)override;
};
#pragma once
#include "osgInc.h"
class KeyboardHandler : public osgGA::GUIEventHandler {
public:
KeyboardHandler();
~KeyboardHandler();
virtual bool handle(const osgGA::GUIEventAdapter&, osgGA::GUIActionAdapter&)override;
};
void createKeyDown() {
osg::ref_ptr<osg::Switch> root = new osg::Switch;
osg::ref_ptr<osg::Node> node1 = osgDB::readNodeFile("cessna.osg");
osg::ref_ptr<osg::Node> node2 = osgDB::readNodeFile("cessnafire.osg");
root->addChild(node1);
root->addChild(node2);
root->setValue(0, false);
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
viewer->addEventHandler(new osgViewer::WindowSizeHandler());
viewer->addEventHandler(new osgViewer::StatsHandler());
viewer->addEventHandler(new KeyboardHandler());
viewer->setSceneData(root.get());
viewer->realize();
viewer->run();
}
aaa