#ifndef OSG_LOD #define OSG_LOD 1 #include namespace osg { /** LOD - Level Of Detail group node which allows switching between children depending on distance from eye point. Typical uses are for load balancing - objects further away from the eye point are rendered at a lower level of detail, and at times of high stress on the graphics pipeline lower levels of detail can also be chosen. */ class SG_EXPORT LOD : public Group { public : LOD() {} META_Node(LOD); virtual void traverse(NodeVisitor& nv); /** Sets the value of range list element index to range which is a floating point distance specified in world coordinates. Range list automatically expands to accommodate values beyond the current getNumRanges().*/ void setRange(const unsigned int index, const float range); /** returns the range for specified index.*/ inline const float getRange(const unsigned int index) const { return _rangeList[index]; } /** returns the number of ranges currently set.*/ inline const int getNumRanges() const { return _rangeList.size(); } /** Sets the object-space point which defines the center of the osg::LOD. center is affected by any transforms in the hierarchy above the osg::LOD.*/ inline void setCenter(const Vec3 ¢er) { _center = center; } /** return the LOD center point. */ inline const Vec3& getCenter() const { return _center; } /** return the child to traverse. Selected by the distance between the eye point in local coordinates and the LOD center, multiplied by the bias.*/ const int evaluate(const Vec3& eye_local,const float bias=1.0f) const; protected : virtual ~LOD() {} typedef std::vector RangeList; RangeList _rangeList; RangeList _rangeList2; Vec3 _center; }; }; #endif