[osg-users] Transparency on a drawable

Vincent Bourdier vincent.bourdier at gmail.com
Tue Jul 15 03:51:02 PDT 2008


Thanks a lot !

I did some changes to have the same osg file, and it work very good now !!!

It seems to be a mix of different settings.

thanks for your help.

Regards,
   Vincent.

2008/7/15 dimi christop <dimi_christop at yahoo.com>:

> Ok,
> I fixed your osg file so that it displays varrying tranparency (top
> transparent, bottom opaque).
> I assume this is what you wanted.
> Do an diff on the files and see what you did wrong.... You set the colors
> per primitive and not per vertex.
>
>
>
> ----- Original Message ----
> From: Vincent Bourdier <vincent.bourdier at gmail.com>
> To: OpenSceneGraph Users <osg-users at lists.openscenegraph.org>
> Sent: Tuesday, July 15, 2008 1:19:23 PM
> Subject: Re: [osg-users] Transparency on a drawable
>
> Hi Dimi,
>
> this is my code :
>
> osg::StateSet* state = g->getOrCreateStateSet();
>
> state->setMode(GL_BLEND,osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
>     osg::Material* mat = new osg::Material;
>     mat->setAlpha(osg::Material::FRONT_AND_BACK, alpha);
>     mat->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE);
>     state->setAttributeAndModes(mat,osg::StateAttribute::ON |
> osg::StateAttribute::OVERRIDE);
>
>     osg::BlendFunc* bf = new osg::BlendFunc(osg::BlendFunc::SRC_ALPHA,
> osg::BlendFunc::ONE_MINUS_SRC_ALPHA );
>     state->setAttributeAndModes(bf);
>
>     state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
>     state->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
>
>     g->setStateSet(state);
>
> there is no difference at all...
>
> thanks for help.
>
> Vincent.
>
>
> 2008/7/15 dimi christop <dimi_christop at yahoo.com>:
>
>> This is because when you set alpha to the vertices and attach also an
>> material
>> and a blending function you have to setColorMode (AMBIENT_DIFFUSE) on the
>> material.
>>
>> Dimi
>>
>> ----- Original Message ----
>> From: Vincent Bourdier <vincent.bourdier at gmail.com>
>> To: OpenSceneGraph Users <osg-users at lists.openscenegraph.org>
>> Sent: Tuesday, July 15, 2008 11:09:23 AM
>> Subject: Re: [osg-users] Transparency on a drawable
>>
>>
>> Hi Paul.
>>
>> Nothing changes with color's alpha changed...
>>
>>
>> 2008/7/15 Paul Speed <pspeed at progeeks.com>:
>>
>>>
>>>
>>> Vincent Bourdier wrote:
>>>
>>>> Hi
>>>>
>>>> Yes, no solutions seems to work on my problem.
>>>> Because all the propositions concern nodes, I permit to remember that I
>>>> am looking at a way to set alpha level on a osg::Geometry ...
>>>>
>>>> On node I already have a method using material : set alpha channel, and
>>>> it works good...  But on my geometry nothing look to work good...
>>>>
>>>> This is all my geometry creator code :
>>>>
>>>>    osg::ref_ptr<osg::Geometry> builtGeometry(){
>>>>
>>>>        double alpha = 0.1;
>>>>        osg::Vec4 grey(0.4,0.4,0.4,1.0);
>>>>        osg::Vec4 yellow(1.0,1.0,0.0,1.0);
>>>>
>>>
>>> What happens if you put alpha for the fourth value in your color?
>>> -Paul
>>>
>>>
>>>>        osg::Geometry* g = new osg::Geometry;
>>>>        osg::Vec3Array* vertices    = new osg::Vec3Array();
>>>>        osg::Vec3Array* normals        = new osg::Vec3Array();
>>>>        osg::Vec4Array* colors        = new osg::Vec4Array();
>>>>
>>>>        normals->push_back(osg::Vec3(0,0,1));
>>>>        colors->push_back(grey);
>>>>
>>>>        //----
>>>>        //QUAD
>>>>        vertices->push_back(osg::Vec3( _width/2.0, _height + _dist,
>>>>    _offset));
>>>>        vertices->push_back(osg::Vec3(-_width/2.0, _height + _dist,
>>>>    _offset));
>>>>        vertices->push_back(osg::Vec3(-_width/2.0, 0.0       + _dist,
>>>>    _offset));
>>>>        vertices->push_back(osg::Vec3( _width/2.0, 0.0       + _dist,
>>>>    _offset));
>>>>
>>>>        if(!_empty)
>>>>            g->addPrimitiveSet(new
>>>>    osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4));
>>>>        else
>>>>            g->addPrimitiveSet(new
>>>>    osg::DrawArrays(osg::PrimitiveSet::LINE_LOOP,0,4));
>>>>
>>>>
>>>>        //-----
>>>>        //LINE
>>>>
>>>>        vertices->push_back(osg::Vec3(0.0, 1.0, _offset));
>>>>        vertices->push_back(osg::Vec3(0.0, _dist, _offset));
>>>>        colors->push_back(grey);
>>>>        g->addPrimitiveSet(new
>>>>    osg::DrawArrays(osg::PrimitiveSet::LINES,4,2));
>>>>
>>>>
>>>>        //----
>>>>        //LINE_LOOP
>>>>
>>>>        vertices->push_back(osg::Vec3( _width/2.0, _height + _dist,
>>>>    _offset/2.0));
>>>>        vertices->push_back(osg::Vec3(-_width/2.0, _height + _dist,
>>>>    _offset/2.0));
>>>>        vertices->push_back(osg::Vec3(-_width/2.0, 0.0       + _dist,
>>>>    _offset/2.0));
>>>>        vertices->push_back(osg::Vec3( _width/2.0, 0.0       + _dist,
>>>>    _offset/2.0));
>>>>
>>>>        colors->push_back(yellow);
>>>>        g->addPrimitiveSet(new
>>>>    osg::DrawArrays(osg::PrimitiveSet::LINE_LOOP,6,4));
>>>>
>>>>        g->setNormalArray(normals);
>>>>        g->setVertexArray(vertices);
>>>>        g->setColorArray(colors);
>>>>
>>>>        g->setNormalBinding(osg::Geometry::BIND_OVERALL);
>>>>        g->setColorBinding(osg::Geometry::BIND_PER_PRIMITIVE_SET);
>>>>        g->setDataVariance(osg::Object::DYNAMIC);
>>>>
>>>>
>>>>    //TRANSPARENCY
>>>>
>>>>        osg::StateSet* state = g->getOrCreateStateSet();
>>>>
>>>>  state->setMode(GL_BLEND,osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
>>>>        osg::Material* mat = new osg::Material;
>>>>  mat->setAlpha(osg::Material::FRONT_AND_BACK, alpha);
>>>>        state->setAttributeAndModes(mat,osg::StateAttribute::ON |
>>>>    osg::StateAttribute::OVERRIDE);
>>>>
>>>>        osg::BlendFunc* bf = new
>>>>    osg::BlendFunc(osg::BlendFunc::SRC_ALPHA,
>>>>    osg::BlendFunc::ONE_MINUS_SRC_ALPHA );
>>>>        state->setAttributeAndModes(bf);
>>>>
>>>>        state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
>>>>        state->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
>>>>
>>>>        g->setStateSet(state);
>>>>
>>>>        return g;
>>>>    }
>>>>
>>>>
>>>> Thanks for your help.
>>>>
>>>> Regards,
>>>>
>>>> Vincent.
>>>>
>>>> 2008/7/15 dimi christop <dimi_christop at yahoo.com <mailto:
>>>> dimi_christop at yahoo.com>>:
>>>>
>>>>
>>>>    Hi Vincent,
>>>>    I see you still havent found a solution. So here I send you a
>>>>    complete example of transpareny.
>>>>    Its a modification of the Viewer example from the Qucik start guide.
>>>>    It loads up a cow and overrides the alpha to 0.1.
>>>>    Hope you can start from there.
>>>>
>>>>    Dimi
>>>>
>>>>    // Viewer Example, A minimal OSG viewer
>>>>    #include <osgDB/WriteFile>
>>>>    #include <osg/Notify>
>>>>    #include <osgViewer/Viewer>
>>>>    #include <osgDB/ReadFile>
>>>>    #include <osg/MatrixTransform>
>>>>    #include <osg/Geode>
>>>>    #include <osg/Geometry>
>>>>    #include <osg/StateSet>
>>>>    #include <osg/StateAttribute>
>>>>    #include <osg/CullFace>
>>>>    #include <osg/Point>
>>>>    #include <osg/Light>
>>>>    #include <osg/LightSource>
>>>>    #include <osg/BlendFunc>
>>>>    #include <osg/Material>
>>>>    #include <osg/PolygonMode>
>>>>    #include <osg/Notify>
>>>>        int
>>>>    main( int, char ** )
>>>>    {
>>>>        // Create a Viewer.
>>>>        osgViewer::Viewer viewer;
>>>>            // Load a model and add it to the Viewer.
>>>>        osg::ref_ptr<osg::Node> nde = osgDB::readNodeFile( "cow.osg" );
>>>>            // Create StateSet and Material
>>>>        osg::StateSet* state2 = nde->getOrCreateStateSet();
>>>>        osg::ref_ptr<osg::Material> mat2 = new osg::Material;
>>>>              // Set alpha to 0.1
>>>>        mat2->setAlpha(osg::Material::FRONT_AND_BACK, 0.1);
>>>>        state2->setAttributeAndModes( mat2.get() ,
>>>>    osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
>>>>               // Turn on blending
>>>>        osg::BlendFunc* bf = new
>>>>    osg::BlendFunc(osg::BlendFunc::SRC_ALPHA,
>>>>    osg::BlendFunc::ONE_MINUS_SRC_ALPHA );
>>>>        state2->setAttributeAndModes(bf);
>>>>            viewer.setSceneData(nde.get());
>>>>            if (!viewer.getSceneData())
>>>>        {
>>>>            osg::notify( osg::FATAL ) << "Unable to load data file.
>>>>    Exiting." << std::endl;
>>>>            return 1;
>>>>        }
>>>>
>>>>        // Display, and main loop.
>>>>        return viewer.run();
>>>>    }
>>>>
>>>>    ----- Original Message ----
>>>>    From: Vincent Bourdier <vincent.bourdier at gmail.com
>>>>    <mailto:vincent.bourdier at gmail.com>>
>>>>    To: OpenSceneGraph Users <osg-users at lists.openscenegraph.org
>>>>    <mailto:osg-users at lists.openscenegraph.org>>
>>>>    Sent: Tuesday, July 15, 2008 9:04:23 AM
>>>>    Subject: Re: [osg-users] Transparency on a drawable
>>>>
>>>>    Hi Ulrich
>>>>
>>>>    thanks for help.
>>>>
>>>>    I use/try this code for the moment :
>>>>
>>>>        osg::StateSet* state = g->getOrCreateStateSet();
>>>>
>>>>  state->setMode(GL_BLEND,osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
>>>>            osg::Material* mat =
>>>>
>>>>  (osg::Material*)state->getAttribute(osg::StateAttribute::MATERIAL);
>>>>            if(!mat) {
>>>>                mat = new osg::Material;                  }
>>>>            mat->setAlpha(osg::Material::FRONT_AND_BACK, alpha);
>>>>            state->setAttributeAndModes(mat,osg::StateAttribute::ON);
>>>>            state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
>>>>            state->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
>>>>
>>>>    But nothing appear transparent...
>>>>
>>>>    Regards,
>>>>       Vincent
>>>>
>>>>    2008/7/12 Ulrich Hertlein <u.hertlein at sandbox.de
>>>>    <mailto:u.hertlein at sandbox.de>>:
>>>>
>>>>
>>>>        Vincent Bourdier wrote:
>>>>
>>>>            I do exactly the same things, on Nodes...
>>>>
>>>>                stateset->setMode(GL_BLEND,
>>>>  osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON );
>>>>
>>>>
>>>>  stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
>>>>
>>>>
>>>>        Are you sure you're doing this last line?  It's not in the code
>>>>        snippet you posted initially...
>>>>
>>>>        Cheers,
>>>>        /ulrich
>>>>
>>>>
>>>>               double opacity = 0.1;
>>>>
>>>>                  osg::StateSet* state =
>>>> mygometry->getOrCreateStateSet();
>>>>                  state->setMode(GL_BLEND,osg::StateAttribute::ON|
>>>>                  osg::StateAttribute::OVERRIDE);
>>>>                  osg::Material* mat =
>>>> (osg::Material*)state->getAttribute
>>>>                  (osg::StateAttribute::MATERIAL);
>>>>                  if(!mat) {
>>>>                      mat = new osg::Material;
>>>>                      mat->setAlpha(osg::Material::FRONT_AND_BACK,
>>>> opacity);
>>>>
>>>>  state->setAttributeAndModes(mat,osg::StateAttribute::ON);
>>>>                  }
>>>>
>>>>
>>>>        _______________________________________________
>>>>        osg-users mailing list
>>>>        osg-users at lists.openscenegraph.org
>>>>        <mailto:osg-users at lists.openscenegraph.org>
>>>>
>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>>
>>>>
>>>>
>>>>
>>>>    _______________________________________________
>>>>    osg-users mailing list
>>>>    osg-users at lists.openscenegraph.org
>>>>    <mailto:osg-users at lists.openscenegraph.org>
>>>>
>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> osg-users mailing list
>>>> osg-users at lists.openscenegraph.org
>>>>
>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>>
>>>
>>> _______________________________________________
>>> osg-users mailing list
>>> osg-users at lists.openscenegraph.org
>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>
>>
>>
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20080715/d8e660f5/attachment-0003.htm>


More information about the osg-users mailing list