osg二维中使用osgFX::Outline设置轮廓没有用
问题描述:步骤1:
我用平行投影的方式实现osg的二维效果,如下
// 设置为正交投影
pCamera->setProjectionMatrixAsOrtho2D(-150, 150, -150, 150);
// 保证图形不变形
double dAspectRatio(1.0);
double dNewAspectRatio = double(traits->width) / double(traits->height);
double dAspectRatioChange = dNewAspectRatio / dAspectRatio;
if (dAspectRatioChange != 1.0)
{
pCamera->getProjectionMatrix() *= osg::Matrix::scale(1.0 / dAspectRatioChange, 1.0, 1.0);
}
然后使用多边形和文字绘制了一个坐标轴,坐标轴的一部分如下
步骤2:
使用osgFX::Outline显示图形节点的轮廓,如下
osg::ref_ptr<osgFX::Outline> outlineNode = new osgFX::Outline;
osg::Vec4 color(0.0, 127.0, 255.0, 255.0);
color.normalize();
outlineNode->setWidth(10.0f);
outlineNode->setColor(color);
outlineNode->addChild(pNode);
pFarNode->replaceChild(pNode, outlineNode);
//Outline类的使用需要先用0清空StencilBuffer
osg::DisplaySettings::instance()->setMinimumNumStencilBits(1);
unsigned int clearMask = _pCamera->getClearMask();
_pCamera->setClearMask(clearMask | GL_STENCIL_BUFFER_BIT);
_pCamera->setClearStencil(0);
/
结果:
但是最后显示的效果却不让人满意,如下
只在这个三角形的一边显示了轮廓,不知道是什么原因:'( ,请求各位大佬指点 对了,使用outline包裹的节点pNode就是那个三角形的节点,本来应该在这个三角形的外面有轮廓,但是却只有一边:'( 终于找到原因了,使用outline给节点添加轮廓时,在2d中绘制多边形时,绘制多边形的多个点
必须要顺时针传入,虽然逆时针传入也能绘制出来,但是这样不会正常显示轮廓。
页:
[1]