我有两个函数,一个用于进入和退出线框模式:
void enterWireFrame(const osgGA::GUIEventAdapter& ea, osgViewer::Viewer* viewer)
{
osg::Node* scene = viewer->getSceneData();
osg::Group* parent = scene->getParent(0);
osg::Node* node = parent->getChild(0);
auto scribe = new osgFX::Scribe();
scribe->addChild(node);
parent->replaceChild(node, scribe);
}然后退出:
void exitWireFrame(const osgGA::GUIEventAdapter& ea, osgViewer::Viewer* viewer)
{
osg::Node* scene = viewer->getSceneData();
osg::Group* parent = scene->getParent(0);
osg::Node* node = (dynamic_cast<osg::Group*>(scene))->getChild(0);
parent->replaceChild(parent, node);
}基本上,我是按以下顺序运行程序的:
enterWireFrame(...);
exitWireFrame(...);enterWireFrame()可以很好地渲染线框,但是尽管运行了exitWireFrame(),我还是无法恢复原来的非线框外观。
发布于 2019-01-02 16:59:48
通过向节点的状态集添加PolygonMode属性,可以轻松地进入和退出线框模式。有关实现细节,请查看osgGA::StateSetManipulator::cyclePolygonMode。实际上,'w‘键,除非已被重写,否则将为您完成此切换。
https://stackoverflow.com/questions/53186664
复制相似问题