搜索
查看: 288|回复: 2

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

[复制链接]
发表于 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

只在这个三角形的一边显示了轮廓,不知道是什么原因 ,请求各位大佬指点
 楼主| 发表于 2019-3-20 17:49:16 | 显示全部楼层
对了,使用outline包裹的节点pNode就是那个三角形的节点,本来应该在这个三角形的外面有轮廓,但是却只有一边
 楼主| 发表于 2019-3-21 20:04:35 | 显示全部楼层
终于找到原因了,使用outline给节点添加轮廓时,在2d中绘制多边形时,绘制多边形的多个点
必须要顺时针传入,虽然逆时针传入也能绘制出来,但是这样不会正常显示轮廓。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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