Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

# osg::LOD Class Reference

LOD - Level Of Detail group node which allows switching between children depending on distance from eye point. More...

Inheritance diagram for osg::LOD:

[legend]
List of all members.

## Public Types
typedef std::pair< float, float > | MinMaxPair
typedef std::vector< MinMaxPair > | RangeList
enum | CenterMode { USE_BOUNDING_SPHERE_CENTER, USER_DEFINED_CENTER }
| Modes which control how the center of object should be determined when computing which child is active. More...
enum | RangeMode { DISTANCE_FROM_EYE_POINT, PIXEL_SIZE_ON_SCREEN }
| Modes that control how the range values should be intepreted when computing which child is active. More...
## Public Member Functions
| LOD ()
| LOD (const LOD &, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
| Copy constructor using CopyOp to manage deep vs shallow copy.
| META_Node (osg, LOD)
virtual void | traverse (NodeVisitor &nv)
| Traverse downwards : calls children's accept method with NodeVisitor.
virtual bool | addChild (Node *child)
| Add Node to Group.
virtual bool | addChild (Node *child, float min, float max)
virtual bool | removeChild (Node *child)
| Remove Node from Group.
void | setCenterMode (CenterMode mode)
| Set how the center of object should be determined when computing which child is active.
CenterMode | getCenterMode () const
| Get how the center of object should be determined when computing which child is active.
void | setCenter (const Vec3 &center)
| Sets the object-space point which defines the center of the osg::LOD.
const Vec3 & | getCenter () const
| return the LOD center point.
void | setRadius (float radius)
| Set the object-space reference radius of the volume enclosed by the LOD.
float | getRadius () const
| Get the object-space radius of the volume enclosed by the LOD.
void | setRangeMode (RangeMode mode)
| Set how the range values should be intepreted when computing which child is active.
RangeMode | getRangeMode () const
| Get how the range values should be intepreted when computing which child is active.
void | setRange (unsigned int childNo, float min, float max)
| Sets the min and max visible ranges of range of specifiec child.
float | getMinRange (unsigned int childNo) const
| returns the min visible range for specified child.
float | getMaxRange (unsigned int childNo) const
| returns the max visible range for specified child.
unsigned int | getNumRanges () const
| returns the number of ranges currently set.
void | setRangeList (const RangeList &rangeList)
| set the list of MinMax ranges for each child.
const RangeList & | getRangeList () const
| return the list of MinMax ranges for each child.
virtual BoundingSphere | computeBound () const
| Compute the bounding sphere around Node's geometry or children.
## Protected Member Functions
virtual | ~LOD ()
virtual void | childRemoved (unsigned int pos, unsigned int numChildrenToRemove)
virtual void | childInserted (unsigned int pos)
virtual void | rangeRemoved (unsigned int, unsigned int)
virtual void | rangeInserted (unsigned int)
## Protected Attributes
CenterMode | _centerMode
Vec3 | _userDefinedCenter
float | _radius
RangeMode | _rangeMode
RangeList | _rangeList

## Detailed Description

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. The children are ordered from most detailed (for close up views) to the least (see from a distance), and a set of ranges are used to decide which LOD is used at different view distances, the criteria used is child 'i' is used when range[i]<dist<range[i+1] is true. This requires there to be n+1 range values where the number of children is n, since no maximum distance of infinity is assumed. If the number of range values (m) is insufficient then the children m through to n will be ignored, only 0..m-1 will be used during rendering.

## Member Typedef Documentation

typedef std::pair<float,float> osg::LOD::MinMaxPair

typedef std::vector<MinMaxPair> osg::LOD::RangeList

## Member Enumeration Documentation

enum osg::LOD::CenterMode

  | Modes which control how the center of object should be determined when computing which child is active. Enumeration values:
  USE_BOUNDING_SPHERE_CENTER |
  USER_DEFINED_CENTER |

enum osg::LOD::RangeMode

  | Modes that control how the range values should be intepreted when computing which child is active. Enumeration values:
  DISTANCE_FROM_EYE_POINT |
  PIXEL_SIZE_ON_SCREEN |

## Constructor & Destructor Documentation

osg::LOD::LOD | ( |  | ) |

osg::LOD::LOD | ( | const LOD & | ,
|  | const CopyOp & | copyop = CopyOp::SHALLOW_COPY
| ) |

| Copy constructor using CopyOp to manage deep vs shallow copy.

virtual osg::LOD::~LOD | ( |  | ) | `[inline, protected, virtual]`

## Member Function Documentation

virtual bool osg::LOD::addChild | ( | Node * | child,
|  | float | min,
|  | float | max
| ) | `[virtual]`

| Reimplemented in osg::PagedLOD.

virtual bool osg::LOD::addChild | ( | Node * | child | ) | `[virtual]`

| Add Node to Group. If node is not NULL and is not contained in Group then increment its reference count, add it to the child list and dirty the bounding sphere to force it to recompute on next getBound() and return true for success. Otherwise return false. Scene nodes can't be added as child nodes. Reimplemented from osg::Group. Reimplemented in osg::PagedLOD.

virtual void osg::LOD::childInserted | ( | unsigned int | pos | ) | `[protected, virtual]`

| Reimplemented from osg::Group. Reimplemented in osg::PagedLOD.

virtual void osg::LOD::childRemoved | ( | unsigned int | pos,
|  | unsigned int | numChildrenToRemove
| ) | `[protected, virtual]`

| Reimplemented from osg::Group. Reimplemented in osg::PagedLOD.

virtual BoundingSphere osg::LOD::computeBound | ( |  | ) | const`[virtual]`

| Compute the bounding sphere around Node's geometry or children. This method is automatically called by getBound() when the bounding sphere has been marked dirty via dirtyBound(). Reimplemented from osg::Group. Reimplemented in osgSim::Impostor.

const Vec3& osg::LOD::getCenter | ( |  | ) | const`[inline]`

| return the LOD center point.

CenterMode osg::LOD::getCenterMode | ( |  | ) | const`[inline]`

| Get how the center of object should be determined when computing which child is active.

float osg::LOD::getMaxRange | ( | unsigned int | childNo | ) | const`[inline]`

| returns the max visible range for specified child.

float osg::LOD::getMinRange | ( | unsigned int | childNo | ) | const`[inline]`

| returns the min visible range for specified child.

unsigned int osg::LOD::getNumRanges | ( |  | ) | const`[inline]`

| returns the number of ranges currently set. An LOD which has been fully set up will have getNumChildren()==getNumRanges().

float osg::LOD::getRadius | ( |  | ) | const`[inline]`

| Get the object-space radius of the volume enclosed by the LOD.

const RangeList& osg::LOD::getRangeList | ( |  | ) | const`[inline]`

| return the list of MinMax ranges for each child.

RangeMode osg::LOD::getRangeMode | ( |  | ) | const`[inline]`

| Get how the range values should be intepreted when computing which child is active.

osg::LOD::META_Node | ( | osg | ,
|  | LOD |
| ) |

virtual void osg::LOD::rangeInserted | ( | unsigned | int | ) | `[inline, protected, virtual]`

| Reimplemented in osg::PagedLOD.

virtual void osg::LOD::rangeRemoved | ( | unsigned | int,
|  | unsigned | int
| ) | `[inline, protected, virtual]`

| Reimplemented in osg::PagedLOD.

virtual bool osg::LOD::removeChild | ( | Node * | child | ) | `[virtual]`

| Remove Node from Group. If Node is contained in Group then remove it from the child list, decrement its reference count, and dirty the bounding sphere to force it to recompute on next getBound() and return true for success. If Node is not found then return false and do not change the reference count of the Node. Reimplemented from osg::Group. Reimplemented in osg::PagedLOD.

void osg::LOD::setCenter | ( | const Vec3 & | center | ) | `[inline]`

| 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.

void osg::LOD::setCenterMode | ( | CenterMode | mode | ) | `[inline]`

| Set how the center of object should be determined when computing which child is active.

void osg::LOD::setRadius | ( | float | radius | ) | `[inline]`

| Set the object-space reference radius of the volume enclosed by the LOD. Used to detmine the bounding sphere of the LOD in the absense of any children.

void osg::LOD::setRange | ( | unsigned int | childNo,
|  | float | min,
|  | float | max
| ) |

| Sets the min and max visible ranges of range of specifiec child. Values are floating point distance specified in local objects coordinates.

void osg::LOD::setRangeList | ( | const RangeList & | rangeList | ) | `[inline]`

| set the list of MinMax ranges for each child.

void osg::LOD::setRangeMode | ( | RangeMode | mode | ) | `[inline]`

| Set how the range values should be intepreted when computing which child is active.

virtual void osg::LOD::traverse | ( | NodeVisitor & | nv | ) | `[virtual]`

| Traverse downwards : calls children's accept method with NodeVisitor. Reimplemented from osg::Group. Reimplemented in osg::PagedLOD, and osgSim::Impostor.

## Member Data Documentation

CenterMode osg::LOD::_centerMode`[protected]`

float osg::LOD::_radius`[protected]`

RangeList osg::LOD::_rangeList`[protected]`

RangeMode osg::LOD::_rangeMode`[protected]`

Vec3 osg::LOD::_userDefinedCenter`[protected]`

The documentation for this class was generated from the following file:

- LOD