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


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.结果图:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值