Riccardo Corsi
2007-10-02 16:36:47 UTC
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
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