您的位置:首页 > 其它

每日一练(六)多窗口显示

2014-01-19 22:54 337 查看
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 matrixm_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.结果图:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: