背景:想要实现在osgEarth大场景和小场景的切换,初步尝试用view->setSceneData()函数直接把根节点替换掉,发现这样做小场景的模型需要放大数万倍才能显示出来(怀疑是空间系统的问题),并且在切换回大场景的时候,矢量拣选FeatureQueryTool也失效了,感觉到这不是一个正确切换场景的方式,于是就找到了osgViewer::CompositeViewer,这个viewer支持多个view,osg官方也有这个类的使用示例(example_osgcompositeViewer)。经过一番测试后,得出了两种实现场景切换的方法。
1.每个view的视口大小都设置成一样的大小,通过addView,removeView来控制场景的切换,实测最后addView的在最上面显示。
2.创建不同的GraphicsWindowQt上下文,和QStackedWidget结合,不同的上下文和对应的view绑定并添加到QStackedWidget中,通过控制QStackedWidget的index进行场景的切换。
第二种方法是控制的显示隐藏,第一种是控制的添加和删除,这种会更节省资源(内存)。当然第二种方法也可以通过insertWidget和removeWidget达到同样的效果