NL3D::CLoadBalancingGroup Class Reference

#include <load_balancing_trav.h>


Detailed Description

A LoadBalancing Group. Models are owned by a group. Groups are created in CLoadBalancingTrav.

See also:
CScene CLoadBalancingTrav
Author:
Lionel Berenguier

Nevrax France

Date:
2002

Definition at line 60 of file load_balancing_trav.h.

Public Types

enum  TPolygonBalancingMode { PolygonBalancingOff = 0, PolygonBalancingOn, PolygonBalancingClamp, CountPolygonBalancing }

Public Member Functions

void addNbFacesPass0 (float v)
 CLoadBalancingGroup ()
float computeModelNbFace (float faceIn)
 Compute the number of face to be rendered for thismodel, according to the number of faces he want to draw.

float getNbFaceAsked () const
uint getNbFaceWanted () const
void setNbFaceWanted (uint nFaces)

Data Fields

std::string Name

Private Member Functions

void computeRatioAndSmooth (TPolygonBalancingMode polMode)

Private Attributes

bool _DefaultGroup
float _FaceRatio
float _NbFacePass0
uint _NbFaceWanted
TPolygonBalancingMode _PrecPolygonBalancingMode
NLMISC::CValueSmoother _ValueSmoother

Friends

class CLoadBalancingTrav


Member Enumeration Documentation

enum NL3D::CLoadBalancingGroup::TPolygonBalancingMode
 

Enumeration values:
PolygonBalancingOff 
PolygonBalancingOn 
PolygonBalancingClamp 
CountPolygonBalancing 

Definition at line 64 of file load_balancing_trav.h.


Constructor & Destructor Documentation

NL3D::CLoadBalancingGroup::CLoadBalancingGroup  ) 
 

Definition at line 54 of file load_balancing_trav.cpp.

References _DefaultGroup, _FaceRatio, _NbFacePass0, _NbFaceWanted, _PrecPolygonBalancingMode, _ValueSmoother, NLMISC::CValueSmootherTemplate< float >::init(), and NL3D_DEFAULT_LOADBALANCING_VALUE_SMOOTHER.

00055 {
00056         _PrecPolygonBalancingMode= CLoadBalancingGroup::PolygonBalancingOff;
00057         _NbFaceWanted= 20000;
00058         _ValueSmoother.init(NL3D_DEFAULT_LOADBALANCING_VALUE_SMOOTHER);
00059         _DefaultGroup= false;
00060 
00061         _NbFacePass0= 0;
00062         _FaceRatio= 1;
00063 }


Member Function Documentation

void NL3D::CLoadBalancingGroup::addNbFacesPass0 float  v  )  [inline]
 

Definition at line 80 of file load_balancing_trav.h.

References _NbFacePass0, and v.

Referenced by NL3D::CTransformShape::traverseLoadBalancingPass0().

00080 {_NbFacePass0+= v;}

float NL3D::CLoadBalancingGroup::computeModelNbFace float  faceIn  )  [inline]
 

Compute the number of face to be rendered for thismodel, according to the number of faces he want to draw.

Definition at line 83 of file load_balancing_trav.h.

References _FaceRatio.

Referenced by NL3D::CTransformShape::traverseLoadBalancingPass1().

00083 {return faceIn * _FaceRatio;}

void NL3D::CLoadBalancingGroup::computeRatioAndSmooth TPolygonBalancingMode  polMode  )  [private]
 

Definition at line 67 of file load_balancing_trav.cpp.

References _DefaultGroup, _FaceRatio, _NbFacePass0, _NbFaceWanted, _PrecPolygonBalancingMode, _ValueSmoother, NLMISC::CValueSmootherTemplate< float >::addValue(), NLMISC::clamp(), NLMISC::CValueSmootherTemplate< float >::getSmoothValue(), NLMISC::CValueSmootherTemplate< float >::init(), NLMISC::isValidDouble(), NL3D_DEFAULT_LOADBALANCING_VALUE_SMOOTHER, NL3D_LOADBALANCING_SMOOTHER_MAX_RATIO, PolygonBalancingClamp, PolygonBalancingOff, PolygonBalancingOn, and NLMISC::CValueSmootherTemplate< float >::reset().

00068 {
00069         // If Default group, disable load balancing
00070         if(_DefaultGroup)
00071                 polMode= PolygonBalancingOff;
00072 
00073         // Compute ratio
00074         switch(polMode)
00075         {
00076         case PolygonBalancingOff:
00077                 _FaceRatio= 1;
00078                 break;
00079         case PolygonBalancingOn :
00080                 if(_NbFacePass0!=0)
00081                         _FaceRatio= (float)_NbFaceWanted / _NbFacePass0;
00082                 else
00083                         _FaceRatio= 1;
00084                 break;
00085         case PolygonBalancingClamp:
00086                 if(_NbFacePass0!=0)
00087                         _FaceRatio= (float)_NbFaceWanted / _NbFacePass0;
00088                 else
00089                         _FaceRatio= 1;
00090                 clamp(_FaceRatio, 0, 1);
00091                 break;
00092                 default: break;
00093         };
00094 
00095         // smooth the value.
00096         // if change of PolygonBalancingMode, reset the _ValueSmoother.
00097         if(polMode!=_PrecPolygonBalancingMode)
00098         {
00099                 _ValueSmoother.init(NL3D_DEFAULT_LOADBALANCING_VALUE_SMOOTHER);
00100                 _PrecPolygonBalancingMode= polMode;
00101         }
00102         // if not PolygonBalancingOff, smooth the ratio.
00103         if(polMode!=PolygonBalancingOff)
00104         {
00105                 // FIX: If the _FaceRatio is not a float (NaN or +-oo), don't add it!!
00106                 if(isValidDouble(_FaceRatio))
00107                         _ValueSmoother.addValue(_FaceRatio);
00108                 float   fSmooth= _ValueSmoother.getSmoothValue();
00109 
00110                 // If after smoothing, the number of faces is still too big, reduce smooth effect! (frustrum clip effect)
00111                 if(fSmooth*_NbFacePass0 > _NbFaceWanted*NL3D_LOADBALANCING_SMOOTHER_MAX_RATIO)
00112                 {
00113                         // reset the smoother
00114                         _ValueSmoother.reset();
00115                         // reduce smooth effect
00116                         fSmooth= _FaceRatio*NL3D_LOADBALANCING_SMOOTHER_MAX_RATIO;
00117                         _ValueSmoother.addValue(fSmooth);
00118                 }
00119 
00120                 // take the smoothed value.
00121                 _FaceRatio= fSmooth;
00122         }
00123 
00124 
00125 }

float NL3D::CLoadBalancingGroup::getNbFaceAsked  )  const [inline]
 

Definition at line 76 of file load_balancing_trav.h.

References _NbFacePass0.

00076 {return _NbFacePass0;}

uint NL3D::CLoadBalancingGroup::getNbFaceWanted  )  const [inline]
 

Definition at line 74 of file load_balancing_trav.h.

References _NbFaceWanted, and uint.

Referenced by NL3D::CLoadBalancingTrav::getGroupNbFaceWanted().

00074 {return _NbFaceWanted;}

void NL3D::CLoadBalancingGroup::setNbFaceWanted uint  nFaces  )  [inline]
 

Definition at line 73 of file load_balancing_trav.h.

References _NbFaceWanted, and uint.

Referenced by NL3D::CLoadBalancingTrav::setGroupNbFaceWanted().

00073 {_NbFaceWanted= nFaces;}


Friends And Related Function Documentation

friend class CLoadBalancingTrav [friend]
 

Definition at line 86 of file load_balancing_trav.h.


Field Documentation

bool NL3D::CLoadBalancingGroup::_DefaultGroup [private]
 

Definition at line 89 of file load_balancing_trav.h.

Referenced by CLoadBalancingGroup(), and computeRatioAndSmooth().

float NL3D::CLoadBalancingGroup::_FaceRatio [private]
 

Definition at line 98 of file load_balancing_trav.h.

Referenced by CLoadBalancingGroup(), computeModelNbFace(), and computeRatioAndSmooth().

float NL3D::CLoadBalancingGroup::_NbFacePass0 [private]
 

Definition at line 92 of file load_balancing_trav.h.

Referenced by addNbFacesPass0(), CLoadBalancingGroup(), computeRatioAndSmooth(), and getNbFaceAsked().

uint NL3D::CLoadBalancingGroup::_NbFaceWanted [private]
 

Definition at line 95 of file load_balancing_trav.h.

Referenced by CLoadBalancingGroup(), computeRatioAndSmooth(), getNbFaceWanted(), and setNbFaceWanted().

TPolygonBalancingMode NL3D::CLoadBalancingGroup::_PrecPolygonBalancingMode [private]
 

Definition at line 103 of file load_balancing_trav.h.

Referenced by CLoadBalancingGroup(), and computeRatioAndSmooth().

NLMISC::CValueSmoother NL3D::CLoadBalancingGroup::_ValueSmoother [private]
 

Definition at line 101 of file load_balancing_trav.h.

Referenced by CLoadBalancingGroup(), and computeRatioAndSmooth().

std::string NL3D::CLoadBalancingGroup::Name
 

Definition at line 68 of file load_balancing_trav.h.

Referenced by NL3D::CTransform::getLoadBalancingGroup().


The documentation for this class was generated from the following files:
Generated on Tue Mar 16 06:49:40 2004 for NeL by doxygen 1.3.6