I did a IR scene by making my own cull visitor. In order to make this efficient
I had to put a virtual in front off osgUtil::CullVisitor::pushStateSet().
My cull visitor look like this
class SpectrumCullVisitor : public osgUtil::CullVisitor
{
public:
SpectrumCullVisitor()
{};
SpectrumCullVisitor(MapCullSpectrumCallBack* spectrumCallBack)
{
_Callback = spectrumCallBack;
};
virtual ~SpectrumCullVisitor()
{};
//! Get Cull Map Callback
MapCullSpectrumCallBack* Callback() const { return _Callback.get(); }
//! Set Cull Map Callback
void Callback(MapCullSpectrumCallBack* val) { _Callback = val; }
protected:
//! Try to find alternative stat set if this fails push the stat set
delivered from the graph
void pushStateSet(const osg::StateSet* ss)
{
const osg::StateSet* pushSS = NULL;
if (_Callback.get())
{
//Look if there is a alternative stat set
pushSS = _Callback->GetMapedStateSet(ss);
if (pushSS)
{
//Alternative found using it in base function
CullVisitor::pushStateSet(pushSS);
}
else
{
//No alternative found cal bas function without
switching
CullVisitor::pushStateSet(ss);
}
}
else
{
//No Callback cal base without switching
CullVisitor::pushStateSet(ss);
}
};
private:
osg::ref_ptr<MapCullSpectrumCallBack> _Callback;
};
And the callback like this:
class MapCullSpectrumCallBack : public osg::Referenced
{
public:
MapCullSpectrumCallBack(const std::string& spectrum):
_spectrum(spectrum)
{};
virtual ~MapCullSpectrumCallBack(){};
const osg::StateSet* GetMapedStateSet( const osg::StateSet* ss ) const;
bool InsertModifiedStatsetIfChanged(const osg::StateSet* ss);
int CleanUp();
protected:
osg::ref_ptr<osg::StateSet> CreateStatsetAlternative(const
osg::StateSet* ss);
std::string _spectrum;
bool SwitchToSpectrumTextures( osg::StateSet* ss );
bool SwitchToSpectrumShader( osg::StateSet* ss );
std::string getFileSpectrumName( std::string name );
typedef std::map<osg::ref_ptr<const
osg::StateSet>,osg::ref_ptr<osg::StateSet>> StateMap;
StateMap _StateMap;
};
You then have to populate the map in the callback with statset with alternative
textures(IR).
Regars Ragnar
-----Ursprungligt meddelande-----
Från: [email protected]
[mailto:[email protected]] För Steven Powers
Skickat: den 2 december 2010 21:12
Till: [email protected]
Ämne: Re: [osg-users] Need help about Night Vision Effect
The easy/cheating way is to calculate the luminance of each pixel, amplify it,
(color it green to fit the stereotype) then add electric noise.
This is easiest to do on a fragment shader.
Cheers,
Steven
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=34458#34458
_______________________________________________
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