查看: 2960|回复: 2

osg二维中使用osgFX::Outline设置轮廓没有用

[复制链接]
  • TA的每日心情
    郁闷
    2020-5-12 17:32
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2019-3-20 17:46:53 | 显示全部楼层 |阅读模式
    问题描述:

    步骤1:
            我用平行投影的方式实现osg的二维效果,如下


    1.         // 设置为正交投影
    2.         pCamera->setProjectionMatrixAsOrtho2D(-150, 150, -150, 150);

    3.         // 保证图形不变形
    4.         double dAspectRatio(1.0);
    5.         double dNewAspectRatio = double(traits->width) / double(traits->height);
    6.         double dAspectRatioChange = dNewAspectRatio / dAspectRatio;
    7.         if (dAspectRatioChange != 1.0)
    8.         {
    9.                 pCamera->getProjectionMatrix() *= osg::Matrix::scale(1.0 / dAspectRatioChange, 1.0, 1.0);
    10.         }
    复制代码


    然后使用多边形和文字绘制了一个坐标轴,坐标轴的一部分如下
    Snipaste_2019-03-20_17-31-25.png

    步骤2:
    使用osgFX::Outline显示图形节点的轮廓,如下

    1.         osg::ref_ptr<osgFX::Outline> outlineNode = new osgFX::Outline;
    2.         osg::Vec4 color(0.0, 127.0, 255.0, 255.0);
    3.         color.normalize();

    4.         outlineNode->setWidth(10.0f);
    5.         outlineNode->setColor(color);

    6.         outlineNode->addChild(pNode);
    7.         pFarNode->replaceChild(pNode, outlineNode);
    8.                                
    9.         //Outline类的使用需要先用0清空StencilBuffer
    10.         osg::DisplaySettings::instance()->setMinimumNumStencilBits(1);
    11.         unsigned int clearMask = _pCamera->getClearMask();
    12.         _pCamera->setClearMask(clearMask | GL_STENCIL_BUFFER_BIT);
    13.         _pCamera->setClearStencil(0);

    14. /
    复制代码


    结果:
    但是最后显示的效果却不让人满意,如下
    Snipaste_2019-03-20_17-37-46.png

    只在这个三角形的一边显示了轮廓,不知道是什么原因 ,请求各位大佬指点
  • TA的每日心情
    郁闷
    2020-5-12 17:32
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2019-3-20 17:49:16 | 显示全部楼层
    对了,使用outline包裹的节点pNode就是那个三角形的节点,本来应该在这个三角形的外面有轮廓,但是却只有一边
  • TA的每日心情
    郁闷
    2020-5-12 17:32
  • 签到天数: 2 天

    [LV.1]初来乍到

     楼主| 发表于 2019-3-21 20:04:35 | 显示全部楼层
    终于找到原因了,使用outline给节点添加轮廓时,在2d中绘制多边形时,绘制多边形的多个点
    必须要顺时针传入,虽然逆时针传入也能绘制出来,但是这样不会正常显示轮廓。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表