[osg-users] Transparency on a drawable

Vincent Bourdier vincent.bourdier at gmail.com
Tue Jul 15 01:09:23 PDT 2008


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20080715/59e54234/attachment-0003.htm>


More information about the osg-users mailing list