OSG BLEND效果对比

 OSG 的BLEND效果到底怎么样,OPENGL已有人做了实际对比,在这里我也做一个小小的对比。如上图所示,同一个数据模型,做不同的BLEND模式,叠加在不同VIEWER中进行对比显示。

实现如下:

1 首先对文字进行矩阵运算:

    osg::ref_ptr<osgText::Text> pText = new osgText::Text;
    pText->setPosition(osg::Vec3(10, 0, 10));
    pText->setText(_equations_name[i]);
    osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform();
    mt->setMatrix(osg::Matrix::translate(00, 300, .00)*osg::Matrix::scale(.10, .10, .10)*osg::Matrix::rotate(osg::inDegrees(90.0f),1,0,0));
    mt->addChild(pText);
    root->addChild(mt);

2 进行多窗口的展示:

    for (int j = 0; j < 2; j++)
    for (int i = 0; i < 2; i++)
    {
        osgViewer::Viewer* pViewer = new osgViewer::Viewer;
        initViewer(pViewer,j*3+i);
        initPos(pViewer, 220+ xoff*i, 20+ yoff*j);
        viewers.addView(pViewer);
    }

3 每个窗口设置独立的gc和双缓冲:

    osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
    traits->x = x;
    traits->y = y;
    traits->width = 600;
    traits->height = 500;
    traits->doubleBuffer = true;
    traits->sharedContext = 0;
    traits->windowDecoration = true;
    osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
    
    GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;

    viewer->getCamera()->setGraphicsContext(gc);
    viewer->getCamera()->setViewport(0, 0, traits->width, traits->height);
    viewer->getCamera()->setDrawBuffer(buffer);
    viewer->getCamera()->setReadBuffer(buffer);

4 设置BLEND模式:

    osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet;
    stateset->setDataVariance(osg::Object::DYNAMIC);

    osg::BlendEquation* blendEquation = new osg::BlendEquation(_equations[i]);
    blendEquation->setDataVariance(osg::Object::DYNAMIC);

    stateset->setAttributeAndModes(blendEquation,osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);

    //tell to sort the mesh before displaying it
    stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);

    loadedModel->setStateSet(stateset);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值