class SG_EXPORT osg::Impostor

Impostor - is a form of Level Of Detail group node which allows both switching between children depending on distance from eye point and image caching.

Inheritance:


Public Methods

[more] Impostor()
[more]virtual Object* clone() const
[more]virtual bool isSameKindAs(const Object* obj) const
[more]virtual const char* className() const
[more]virtual void accept(NodeVisitor& nv)
[more]inline void setImpostorThreshold(float distance)
Set the Impostor threshold distance.
[more]inline void setImpostorThresholdToBound(float ratio=1.0f)
Set the Impostor threshold distance relative to the node's bounding sphere's radius
[more]inline const float getImpostorThreshold() const
[more]inline const float getImpostorThreshold2() const
[more]ImpostorSprite* findBestImpostorSprite(const osg::Vec3& currLocalEyePoint)
Find the ImposterSprite which fits the current eye point best
[more]void addImpostorSprite(ImpostorSprite* is)
Add an ImpostorSprite to the Impostor
[more]inline ImpostorSpriteList& getImpostorSpriteList()
Get the list of ImpostorSprites attached to this Impostor
[more]inline const ImpostorSpriteList& getImpostorSpriteList() const
Get a const list of ImpostorSprites attached to this const Impostor

Protected Fields

[more]ImpostorSpriteList _impostorSpriteList
[more]float _impostorThreshold

Protected Methods

[more]virtual ~Impostor()
[more]virtual const bool computeBound() const


Inherited from LOD:

Public Methods

ovirtual void traverse(NodeVisitor& nv)
ovoid setRange(const unsigned int index, const float range)
oinline const float getRange(const unsigned int index) const
oinline const int getNumRanges() const
oinline void setCenter(const Vec3 &center)
oinline const Vec3& getCenter() const
oconst int evaluate(const Vec3& eye_local, const float bias=1.0f) const

Protected Fields

oRangeList _rangeList2
oVec3 _center

Protected Members

otypedef std::vector<float> RangeList RangeList _rangeList


Inherited from Group:

Public Methods

ovirtual bool addChild( Node* child )
ovirtual bool removeChild( Node* child )
ovirtual bool replaceChild( Node* origChild, Node* newChild )
oinline const int getNumChildren() const
oinline Node* getChild( const int i )
oinline const Node* getChild( const int i ) const
oinline bool containsNode( const Node* node ) const
oinline ChildList::iterator findNode( const Node* node )
oinline ChildList::const_iterator findNode( const Node* node ) const

Protected Fields

oChildList _children


Inherited from Node:

Public Methods

ovirtual void ascend(NodeVisitor& nv)
oinline void setName( const std::string& name )
oinline void setName( const char* name )
oinline const std::string& getName() const
oinline const ParentList& getParents() const
oinline Group* getParent(const int i)
oinline const Group* getParent(const int i) const
oinline const int getNumParents() const
oinline void setUserData(void* data, MemoryAdapter* ma=0L)
oinline void* getUserData()
oinline const void* getUserData() const
oinline MemoryAdapter* getMemoryAdapter()
oinline const MemoryAdapter* getMemoryAdapter() const
oinline void setNodeMask(const NodeMask nm)
oinline const NodeMask getNodeMask() const
oinline const DescriptionList& getDescriptions() const
oinline DescriptionList& getDescriptions()
oinline const std::string& getDescription(const int i) const
oinline std::string& getDescription(const int i)
oinline const int getNumDescriptions() const
ovoid addDescription(const std::string& desc)
oinline void setStateSet(osg::StateSet* dstate)
oinline osg::StateSet* getStateSet()
oinline const osg::StateSet* getStateSet() const
oinline const BoundingSphere& getBound() const
ovoid dirtyBound()

Public Members

otypedef std::vector<Group*> ParentList
otypedef std::vector<std::string> DescriptionList

Protected Fields

omutable BoundingSphere _bsphere
omutable bool _bsphere_computed
ostd::string _name
oParentList _parents
ovoid* _userData
oref_ptr<MemoryAdapter> _memoryAdapter
oNodeMask _nodeMask
oDescriptionList _descriptions
oref_ptr<StateSet> _dstate


Inherited from Object:


Inherited from Referenced:

Public Methods

oinline Referenced& operator = (Referenced&)
oinline void ref() const
oinline void unref() const
oinline const int referenceCount() const

Protected Fields

omutable int _refCount


Documentation

Impostor - is a form of Level Of Detail group node which allows both switching between children depending on distance from eye point and image caching.

The principle behind Imposters is that they cache an image of real geometry and then the image is drawn in subsequent frames instead of the real geometry. Its a bit like a Billboard *but* is updated at runtime and w.r.t view point. By drawing just the texture mapped quad you can cut down scene complexity and improve performance.

For more details have a look at:

http://grail.cs.washington.edu/projects/hic/

The OSG doesn't implement exactly the same technique as above, but its should be a good starting place. The OSG's impostors are much less intrusive since you don't need to restructure your whole scene to use them.

All you need to do to use Impostors is to set up the visible range values for each LOD child of the Impostor, as per osg::LOD, and set an Impostor threshold to tell the renderer at what distance the Impsotor's image caching should cut in. The osg::CullVisitor automatically handles all the setting of pre-rendering stages to calculate the required ImpostorSprites (which encapsulates the image cache and quad), and updates them as the view point changes. If you use osg::SceneView/CullVisitor all the complexity of supporting Impostor will be nicely hidden away.

TODO: Various improvements are planned for the Impostor- 1) Estimation of how many frames an ImpostorSprite will be reused, if it won't be used more often than a minimum threshold then do not create ImpostorSprite - use the real geometry. 2) Sharing of texture memory between ImpostorSprites. 3) Simple 3D geometry for ImpostorSprite's rather than Billboarding. 4) Shrinking of the ImpostorSprite size to more closely fit the underlying geometry.

o Impostor()

ovirtual Object* clone() const

ovirtual bool isSameKindAs(const Object* obj) const

ovirtual const char* className() const

ovirtual void accept(NodeVisitor& nv)

oinline void setImpostorThreshold(float distance)
Set the Impostor threshold distance. For eye points further than this threshold the Imposter is used if appropriate, otherwise the LOD children as chosen as per a standard LOD node.

oinline void setImpostorThresholdToBound(float ratio=1.0f)
Set the Impostor threshold distance relative to the node's bounding sphere's radius

oinline const float getImpostorThreshold() const

oinline const float getImpostorThreshold2() const

oImpostorSprite* findBestImpostorSprite(const osg::Vec3& currLocalEyePoint)
Find the ImposterSprite which fits the current eye point best

ovoid addImpostorSprite(ImpostorSprite* is)
Add an ImpostorSprite to the Impostor

oinline ImpostorSpriteList& getImpostorSpriteList()
Get the list of ImpostorSprites attached to this Impostor

oinline const ImpostorSpriteList& getImpostorSpriteList() const
Get a const list of ImpostorSprites attached to this const Impostor

ovirtual ~Impostor()

ovirtual const bool computeBound() const

oImpostorSpriteList _impostorSpriteList

ofloat _impostorThreshold


This class has no child classes.

Alphabetic index HTML hierarchy of classes or Java



This page was generated with the help of DOC++.