[osg-users] stateSet texture attribute override

Riccardo Corsi riccardo.corsi at vrmmp.it
Tue Oct 2 10:31:36 PDT 2007


Hi Cedric,

I believe the override keyword works in the other way: when you use it, 
you override the attributes of objects that are below in the graph 
hierarchy, for instance in the following scheme:

Switcher:
StateSet - tex0
- tex1 override
Geode
geom1
stateset - tex0
stateset - tex1
geom2
stateset - tex0
stateset - tex1

the tex1 from the Switcher StateSet will be used instead of the one 
specified in the geoms.
That's exactly what happens in my application when I do the override in 
the MatrixTransform.

Unfortunately, it does not work when I apply the same to the Switcher 
stateset, don't know why...

Cheers,
Ricky


Cedric Pinson wrote:
> I thouth the keywords OVERRIDE should be use when you want to override 
> the Attribute. So i would do something like that:
>
> Switcher:
> StateSet - tex0
>          - tex1
> Geode
>    geom1
>           stateset  - tex0 override
>           stateset  - tex1 override
>    geom2
>           stateset  - tex0 override
>           stateset  - tex1 override
>
> In this sceme geom 1 et 2 will use for tex0 and tex1 from the switcher
>
> you can read the code here in include/osg/State in the function  
> State::pushAttributeList
> It does not anwser directly to you questions but i hope it will help.
>
> Cedric
>
> Riccardo Corsi wrote:
>   
>> Hi all,
>>
>> I'm after overriding some texture attributes in a hierarchy, following 
>> the osgmultitexture example, from within a "MyTextureSwitcher" node 
>> derived from osg::Group.
>> I basically want to load a new texture on layer 1 and try to mix/blend 
>> it with the other existing texture on the underlying geometries.
>> The hierarchy I have is the following:
>>
>> MyTextureSwitcher
>>   |
>> MatrixTransform
>>   |
>> MatrixTransform
>>   |
>> Geode
>>   |-- geom1
>>   |-- geom2
>>
>> Now if  I try to set the values on the MyTextureSwitcher StateSet, 
>> nothing happen (the new texture file is not even loaded).
>>
>> If I change the same attributes on the MatrixTrasform instead, 
>> everything works nicely. The attributes I'm adding to override the 
>> other are as well highlighted in the attached image (thanks orhialcon).
>> Of course, I'd like to do everything in the MyTextureSwitcher 
>> stateset, as this is a node that I can add or remove to obtain 
>> different effects.
>>
>> My code is:
>>
>> MyTextureSwitcher::Setup()
>> {
>>     [...]
>>     osg::StateSet* pSS = getChild(0)->getOrCreateStateSet(); // 
>> working case
>>     //osg::StateSet* pSS = getOrCreateStateSet(); // NOT working
>>
>>     pSS->setTextureAttributeAndModes(1, mSwitchTex.get(), 
>> osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
>>
>>     osg::TexEnv* texenv = new osg::TexEnv;
>>     texenv->setMode(osg::TexEnv::BLEND);
>>     texenv->setColor(osg::Vec4(0.3f,0.3f,0.3f,0.3f));
>>
>>     pSS->setTextureAttributeAndModes(1,texenv, osg::StateAttribute::ON 
>> | osg::StateAttribute::OVERRIDE);
>> }
>>
>> Any clue why the second case is not working?
>>
>> Thank you,
>> Ricky
>>
>> ------------------------------------------------------------------------
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>   
>>     
>
>   



More information about the osg-users mailing list