Hi Florian

We can't really help you without know how work your multi pass system.

My guess is that osg draw your first  pass #1 - draw original with a little
offset, then transparency pass, then pass #2 - draw "tinted".
You can use osg::StateSet::RenderingHint(osg::StateSet::TRANSPARENT_BIN) in
your transparency stateSet
this will tell to osg that your geometry is transparency and have to be
draw after other drawable and from front to back order

Take a look to osg::StateSet::setRenderBinDetails and osgUtil::RenderBin
and how all of this work.

HTH
David


2013/9/25 Florian Kolbe <[email protected]>

> Hi,
>
> 1. for transparent walls we use our own node (derived from "Effect") - see
> code below
> 2. for "tinting" objects, we also use an effect node derived from "Effect"
> - see code below
>
> Used by themselves, everything works fine. But if we have a "tinted"
> object behind a "transparent" object, the "tinting" effect is gone (see
> screenshot).
>
> Code for transparency effect:
>
> Code:
>         void define_passes()
>         {
>             // implement pass #1
>             {
>                 // s.a. http://www.mail-archive.com//msg13796.html
>                 osg::ref_ptr<osg::StateSet> stateSet = new osg::StateSet;
>
>                 // mat
>                 osg::Material* mat = new osg::Material;
>                 mat->setAlpha(osg::Material::FRONT_AND_BACK, alpha);
>                 stateSet->setAttributeAndModes(mat,
> osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
>
>                 // backface culling, führt dazu dass innere Rückseiten
> nicht angezeigt werden
>                 osg::CullFace* cull = new osg::CullFace();
>                 cull->setMode(osg::CullFace::BACK);
>                 stateSet->setAttributeAndModes(cull,
> osg::StateAttribute::ON);
>
>                 // turn on blending
>                 osg::BlendFunc* bf = new
> osg::BlendFunc(osg::BlendFunc::SRC_ALPHA,
> osg::BlendFunc::ONE_MINUS_SRC_ALPHA );
>                 stateSet->setMode(GL_BLEND, osg::StateAttribute::ON |
> osg::StateAttribute::OVERRIDE);
>                 stateSet->setAttributeAndModes(bf);
>                 // rendering hints
>                 stateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
>                 // lighting
>                 stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
>
>                 addPass(stateSet.get());
>             }
>         }
>
>
>
> Code for "coloring" effect:
>
> Code:
>         void define_passes()
>         {
>             // implement pass #1 - draw original with a little offset
>             {
>                 osg::ref_ptr<osg::StateSet> ss = new osg::StateSet;
>
>                 osg::ref_ptr<osg::PolygonOffset> polyoffset = new
> osg::PolygonOffset;
>                 polyoffset->setFactor(1.0f);
>                 polyoffset->setUnits(1.0f);
>                 ss->setAttributeAndModes(polyoffset.get(),
> osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
>
>                 addPass(ss.get());
>             }
>             // implement pass #2 - draw "tinted"
>             {
>                 osg::ref_ptr<osg::StateSet> ss = new osg::StateSet;
>                 // Material überschreiben
>                 ss->setAttributeAndModes(_wf_mat.get(),
> osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
>
>                 // notwendig, damit alpha greift
>
> ss->setMode(GL_BLEND,osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
>
>                 addPass(ss.get());
>             }
>         }
>
>
>
> See attached image:
> The fire extinguisher should be all yellow, but behind the transparent
> wall - it is as if it was rendered without the effect.
>
> I hope someone can sched some light on this issue?
>
> Thank you!
>
> Florian
>
> PS sorry if the code snippets come out weird, leading space for
> indentation somehow goes wrong...[/img][/code]
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=56477#56477
>
>
>
>
> Attachments:
> http://forum.openscenegraph.org//files/transparency_bug_132.png
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to