[osg-users] stateSet texture attribute override

Cedric Pinson mornifle at plopbyte.net
Wed Oct 3 01:24:23 PDT 2007


My bad you are right, sorry for the confusion...

Riccardo Corsi wrote:
> 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
>>>   
>>>     
>>>       
>>   
>>     
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>   

-- 
+33 (0) 6 63 20 03 56  Cedric Pinson mailto:mornifle at plopbyte.net http://www.plopbyte.net





More information about the osg-users mailing list