我有2种功能,一种可以进入和退出线框模式:
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()
,但我无法恢复原始的非线框外观。
答案 0 :(得分:0)
通过将PolygonMode属性添加到节点的状态集,可以轻松实现进入和退出线框模式。检查osgGA :: StateSetManipulator :: cyclePolygonMode以了解实现的详细信息。实际上,“ w”键(除非已被覆盖)会为您进行此切换。