osg官方包装的深度模板示例并没有按预期工作

时间:2016-09-27 09:12:34

标签: opengl openscenegraph

我从OSG的osgpackeddepthstencil的例子中学习。此示例首先将蒙版方形渲染到RTTI相机中,使模板缓冲区变形,同时保持颜色缓冲区不变。模板测试是:

osg::Stencil *stencil = new osg::Stencil;
stencil->setFunction(osg::Stencil::ALWAYS, 1, ~0u);
stencil->setOperation(osg::Stencil::KEEP, osg::Stencil::KEEP, osg::Stencil::REPLACE);
osg::StateSet *ss = geode->getOrCreateStateSet();
ss->setAttributeAndModes(stencil, osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
ss->setAttribute(new osg::ColorMask(false, false, false, false),osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);

然后它将一个较大的正方形渲染到同一个RTTI摄影机中,将模板测试设置为不等于1.然后使用纹理渲染一个正方形。第二个模板测试代码如下:

osg::Stencil *stencil = new osg::Stencil;
stencil->setFunction(osg::Stencil::NOTEQUAL, 1, ~0u);
stencil->setOperation(osg::Stencil::KEEP, osg::Stencil::KEEP, osg::Stencil::KEEP);
osg::StateSet *ss = geode->getOrCreateStateSet();
ss->setAttributeAndModes(stencil, osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);

一切顺利,结果如下所示。清晰的颜色是绿色。正方形的中心是绿色的,因为由于第一轮渲染,模板缓冲区值在这个小方块中为1。

enter image description here

然而,当我将第二个模板测试更改为不等于0时出现问题。根据我对模板测试的了解,结果应该是前一个的反转图像,其具有绿色边界和灰色内部广场。相当混乱,结果如下,这是一个完整的绿色:

enter image description here

我错过了什么?如何解释第二个结果?任何建议,将不胜感激。谢谢!我的OSG版本是3.4.0。我的环境是:NVIDIA GTX 750 TI,Windows 10 64bit,Visual Studio 2013。

0 个答案:

没有答案