1. 创建两个视图
bool WindowImpl::Init() { m_offx = 40; m_offy = 40; // window one { osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits(); traits->x = m_offx + 0; traits->y = m_offy + 0; traits->width = 680; traits->height = 400; traits->doubleBuffer = true; traits->sharedContext = 0; traits->windowDecoration = true; osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get()); osg::ref_ptr<osg::Camera> camera = new osg::Camera(); camera->setGraphicsContext(gc.get()); camera->setViewport(new osg::Viewport(0,0,traits->width,traits->height)); GLenum dBuffer = traits->doubleBuffer? GL_BACK:GL_FRONT; camera->setDrawBuffer(dBuffer); camera->setReadBuffer(dBuffer); // add this slave camera to the viewer, with a shift left of the projection matrix m_Viewer.addSlave(camera.get(),osg::Matrixd::translate(1.0,0.0,0.0),osg::Matrixd()); } // window two { osg::ref_ptr<osg::GraphicsContext::Traits> trait = new osg::GraphicsContext::Traits(); trait->x = m_offx + 600; trait->y = m_offy + 0; trait->width = 600; trait->height = 480; trait->doubleBuffer = true; trait->sharedContext = 0; trait->windowDecoration = true; osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(trait.get()); osg::ref_ptr<osg::Camera> camera = new osg::Camera(); camera->setGraphicsContext(gc.get()); camera->setViewport(0,0,trait->width,trait->height); GLenum dBuffer = trait->doubleBuffer? GL_BACK: GL_FRONT; camera->setReadBuffer(dBuffer); camera->setDrawBuffer(dBuffer); m_Viewer.addSlave(camera.get(),osg::Matrixd::translate(-1,0.0,0.0),osg::Matrixd()); } return true; }
2. showWindow
bool WindowImpl::ShowWindow(osg::Node* node) { m_optimizer.optimize(node); m_Viewer.setSceneData(node); m_Viewer.realize(); return m_Viewer.run(); }
3.结果图: