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 <[EMAIL PROTECTED]>:
> 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 <[EMAIL PROTECTED]>
> To: OpenSceneGraph Users <[email protected]>
> 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 <[EMAIL PROTECTED]>:
>
>>
>>
>> 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 <[EMAIL PROTECTED] <mailto:
>>> [EMAIL PROTECTED]>>:
>>>
>>>
>>> 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 <[EMAIL PROTECTED]
>>> <mailto:[EMAIL PROTECTED]>>
>>> To: OpenSceneGraph Users <[email protected]
>>> <mailto:[email protected]>>
>>> 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 <[EMAIL PROTECTED]
>>> <mailto:[EMAIL PROTECTED]>>:
>>>
>>>
>>> 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
>>> [email protected]
>>> <mailto:[email protected]>
>>>
>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> osg-users mailing list
>>> [email protected]
>>> <mailto:[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
>>>
>>
>> _______________________________________________
>> 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
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org