NL3D::CParticleSystemModel Class Reference

#include <particle_system_model.h>

Inheritance diagram for NL3D::CParticleSystemModel:

NL3D::CTransformShape NL3D::CTransform NLMISC::CRefCount NL3D::ITransformable NL3D::IAnimatable

Detailed Description

A particle system model : it is built using a CParticleSystemShape. You should forgot to call the animate() method of the CScene it is part of if you want motion to be performed

Definition at line 63 of file particle_system_model.h.

User params / animation

enum  TAnimValues {
  OwnerBit = CTransformShape::AnimValueLast, PSParam0, PSParam1, PSParam2,
  PSParam3, PSTrigger, AnimValueLast
}
 for now, we have 4 animatables value in a system More...

void bypassGlobalUserParamValue (uint userParamIndex, bool byPass=true)
 for now, we have 4 animatables value in a system

virtual ITrackgetDefaultTrack (uint valueId)
 =====================================================================================

virtual IAnimatedValuegetValue (uint valueId)
 =====================================================================================

virtual const char * getValueName (uint valueId) const
 =====================================================================================

bool isGlobalUserParamValueBypassed (uint userParamIndex) const
 for now, we have 4 animatables value in a system

virtual void registerToChannelMixer (CChannelMixer *chanMixer, const std::string &prefix="")
 =====================================================================================

const char * getPSParamName (uint valueId)
 =====================================================================================


Object

 CParticleSystemModel ()
 ctor

 ~CParticleSystemModel ()
 =====================================================================================

void registerBasic ()
 =====================================================================================


Skinning Behavior.

virtual const std::vector<
NLMISC::CBSphere > * 
getSkinBoneSphere () const
virtual const std::vector<
sint32 > * 
getSkinBoneUsage () const
virtual bool isSkinnable () const
 Deriver must change this method if the model can be skinned. called rarely.

virtual sint renderShadowSkinGeom (uint remainingVertices, uint8 *vbDest)
virtual void renderShadowSkinPrimitives (CMaterial &castMat, IDriver *drv, uint baseVertex)
virtual void renderSkin (float alphaMRM)
virtual sint renderSkinGroupGeom (float alphaMRM, uint remainingVertices, uint8 *dest)
virtual void renderSkinGroupPrimitives (uint baseVertex, std::vector< CSkinSpecularRdrPass > &specularRdrPasses, uint skinIndex)
virtual void renderSkinGroupSpecularRdrPass (uint rdrPass)
 Render a specific specular renderPass returned by renderSkinGroupPrimitives.

virtual void setApplySkin (bool state)
virtual bool supportShadowSkinGrouping () const
 Special Skinning For ShadowMapping.

virtual bool supportSkinGrouping () const
uint _FatherBoneId
CSkeletonModel_FatherSkeletonModel

[NOHEADER]

uint32 isNeedUpdateFrozenStaticLightSetup () const
 non-zero if the object has a FrozenStaticLightSetup not correclty updated.

uint32 isNeedUpdateLighting () const
 non-zero if the object needs to updatelighting.

CLightContribution _LightContribution
 The contribution of all lights. This enlarge the struct only of approx 15%.

CLightingManager::CQGItLightedModel _LightedModelIt
 each transform may be in a quadGird of lighted models (see CLightingManager)


Hrc Traversal

void updateClipTravForAncestorSkeleton ()
void updateWorld ()
 Update the world state according to the parent world state and the local states.

CSkeletonModel_AncestorSkeletonModel
bool _ClipLinkedInSonsOfAncestorSkeletonModelGroup
bool _DontUnfreezeChildren
bool _Frozen
sint64 _LocalDate
CMatrix _LocalMatrix
 Hrc IN variables.

CHrcTrav::TVisibility _LocalVis
sint64 _WorldDate
CMatrix _WorldMatrix
 Hrc OUT variables.

bool _WorldVis

Public Types

enum  TTransformMode { DirectMatrix = 0, RotEuler, RotQuat, TransformModeCount }

Public Member Functions

void activateEmitters (bool active)
virtual bool canStartStop ()
 Test if there is a start/stop caps in the objects (some fxs such as remanence).

bool compareMatrixDate (uint64 callerDate) const
void forceInstanciate ()
void forceSetUserMatrix (const NLMISC::CMatrix &userMatrix)
void freeze ()
void freezeHRC ()
virtual void getAABBox (NLMISC::CAABBox &bbox) const
 =====================================================================================

CSkeletonModelgetAncestorSkeletonModel () const
bool getChannelMixerOwnerShip () const
CInstanceGroupgetClusterSystem ()
float getDistMax () const
bool getForceClipRoot () const
CLightContributiongetLightContribution ()
virtual void getLightHotSpotInWorld (CVector &modelPos, float &modelRadius) const
virtual CMaterialgetMaterial (uint materialId)
virtual const CMaterialgetMaterial (uint materialId) const
const CMatrixgetMatrix () const
 Get the matrix, compute her if necessary (work in all modes).

uint64 getMatrixDate () const
virtual uint getNumMaterial () const
virtual float getNumTriangles (float distance)
 =====================================================================================

uint getOrderingLayer () const
 Get the ordering layer.

CScenegetOwnerScene () const
 get the scene which has created us

const sintgetRefCount () const
CSkeletonModelgetSkeletonModel () const
 Get the skeleton model. Returnr NULL in normal mode.

bool getUserClipping () const
 Return the user clipping state.

NLMISC::CRGBA getUserColor () const
const NLMISC::CMatrixgetUserMatrix () const
CHrcTrav::TVisibility getVisibility ()
 Get the local visibility state.

const CMatrixgetWorldMatrix () const
bool hasActiveEmitters () const
void heritVisibility ()
 herit the visibility from his father. (default behavior).

void hide ()
 Hide the object and his sons.

bool isClipVisible () const
bool isHrcVisible () const
bool isLinkToQuadCluster () const
 true if the model is linked to a quadCluster

uint32 isOpaque ()
uint32 isQuadGridClipEnabled () const
virtual bool isStarted () const
uint32 isTransparent ()
void setChannelMixerOwnerShip (bool enable=true)
void setClusterSystem (CInstanceGroup *pCS)
void setDistMax (float distMax)
void setDontUnfreezeChildren (bool val)
void setForceClipRoot (bool forceClipRoot)
void setLogicInfo (ILogicInfo *logicInfo)
void setOpacity (bool v)
void setOrderingLayer (uint layer)
void setTransparency (bool v)
void setUserClipping (bool enable)
void setUserColor (NLMISC::CRGBA userColor)
void setUserMatrix (const NLMISC::CMatrix &userMatrix)
void setWorldMatrix (const CMatrix &mat)
void setZBias (float value)
void show ()
 Show the objet and his sons.

virtual void start ()
virtual void stop ()
void unfreezeHRC ()
void updateLightingInfos (void)
 =====================================================================================

void updateOpacityInfos (void)
 =====================================================================================

CTransform traverse specialisation
virtual bool clip ()
 clip method called by traverseClip(). deafult is always visible

virtual void traverseAnimDetail ()
 =====================================================================================

virtual void traverseClip ()
virtual void traverseRender ()
 no-op by default

void enableAutoGetEllapsedTime (bool enable=true)
TAnimationTime getEllapsedTime (void) const
 get the ellapsed time used for animation

float getEllapsedTimeRatio () const
bool isAutoGetEllapsedTimeEnabled (void) const
 tells wether the model will querry himself for the ellapsed time

void setEllapsedTime (TAnimationTime ellapsedTime)
 set the ellapsed time (in second) used for animation.

void setEllapsedTimeRatio (float value)
Edition related methods
void enableDisplayTools (bool enable=true)
 activate the display of tool (for edition purpose)

bool getEditionMode (void) const
 test if edition mode is activated

bool isToolDisplayEnabled (void) const
 activate the display of tool (for edition purpose)

void setEditionMode (bool enable=true)
 =====================================================================================

void touchLightableState (void)
 edition purpose : touch the system to tell that the lightable state of the system has changed (added/removed lightable faces )

void touchTransparencyState (void)
 edition purpose : touch the system to tell that the transparency state of the system has changed (added/removed opaque/tansparent faces )

Embedded particle system
const CParticleSystemgetPS (void) const
CParticleSystemgetPS (void)
void setParticleSystem (CParticleSystem *ps)
Life managment
bool isInvalid (void) const
bool isPSModelObserver (IPSModelObserver *obs)
 =====================================================================================

void registerPSModelObserver (IPSModelObserver *obs)
 =====================================================================================

void removePSModelObserver (IPSModelObserver *obs)
 =====================================================================================


Static Public Member Functions

CTransformcreator ()
 create an instance of this class

const char * getPivotValueName ()
const char * getPosValueName ()
const char * getRotEulerValueName ()
const char * getRotQuatValueName ()
const char * getScaleValueName ()

Data Fields

sint crefs
CPtrInfo * pinfo
CSmartPtr< IShapeShape
 The shape, the object instancied.


Static Public Attributes

CPtrInfo NullPtrInfo

Protected Member Functions

sint addValue (CChannelMixer *chanMixer, uint valueId, uint ownerValueId, const std::string &prefix, bool detail)
void clearFlag (uint valueId)
 This method clear a bit in the bitset.

void forceCompute ()
CChannelMixergetChannelMixer () const
bool getShowWhenLODSticked () const
 Test if obj must be displayed when sticked to an object displayed as a LOD (example: sword in hand of a character displayed as a LOD state).

void setFlag (uint valueId)
 This method set a bit in the bitset.

void setupCurrentLightContribution (CLightContribution *lightContrib, bool useLocalAtt)
virtual void unlinkFromQuadCluster ()
 special feature for CQuadGridClipManager. remove from it.


Protected Attributes

uint32 _RenderFilterType

Private Member Functions

bool checkAgainstPyramid (const std::vector< CPlane > &worldFrustumPyramid) const
 =========================================================================================

bool checkDestroyCondition (CParticleSystem *ps)
void doAnimate ()
 =====================================================================================

void insertInVisibleList ()
void invalidateAutoAnimatedHandle ()
void reallocRsc ()
 Called when the resource (attached system) for this system must be reallocated.

void refreshRscDeletion (const std::vector< CPlane > &worldFrustumPyramid, const NLMISC::CVector &viewerPos)
 =====================================================================================

void releasePSPointer ()
 =====================================================================================

void releaseRsc ()
 =====================================================================================

void releaseRscAndInvalidate ()
 =====================================================================================


Private Attributes

CParticleSystemManager::TAlwaysAnimatedModelHandle _AnimatedModelHandle
CParticleSystem::TAnimType _AnimType
bool _AutoGetEllapsedTime: 1
uint8 _BypassGlobalUserParam
bool _EditionMode: 1
TAnimationTime _EllapsedTime
float _EllapsedTimeRatio
bool _EmitterActive: 1
bool _InClusterAndVisible: 1
bool _InsertedInVisibleList: 1
 if false, system should be recreated

bool _Invalidated: 1
bool _LightableStateTouched: 1
CParticleSystemManager::TModelHandle _ModelHandle
std::vector< IPSModelObserver * > _Observers
NLMISC::CSmartPtr< CParticleSystem_ParticleSystem
CScene_Scene
bool _ToolDisplayEnabled: 1
bool _TransparencyStateTouched: 1
CAnimatedValueBool _TriggerAnimatedValue
NLMISC::CRGBA _UserColor
NLMISC::CMatrix _UserMatrix
CAnimatedValueFloat _UserParam [MaxPSUserParam]
 user params of the system

float _ZBias

Friends

class CParticleSystemManager
class CParticleSystemShape
struct CPtrInfo


Member Enumeration Documentation

enum NL3D::CParticleSystemModel::TAnimValues
 

for now, we have 4 animatables value in a system

Enumeration values:
OwnerBit 
PSParam0 
PSParam1 
PSParam2 
PSParam3 
PSTrigger 
AnimValueLast 

Reimplemented from NL3D::ITransformable.

Definition at line 210 of file particle_system_model.h.

00211                 {
00212                         OwnerBit= CTransformShape::AnimValueLast,
00213                         PSParam0,
00214                         PSParam1,
00215                         PSParam2,
00216                         PSParam3,
00217                         PSTrigger, // trigger the instanciation of the system
00218                         AnimValueLast,
00219                 };

enum NL3D::ITransformable::TTransformMode [inherited]
 

Enumeration values:
DirectMatrix 
RotEuler 
RotQuat 
TransformModeCount 

Definition at line 58 of file transformable.h.

Referenced by NL3D::ITransformable::getTransformMode().

00059         {
00060                 DirectMatrix=0,         // DirectMatrixMode.
00061                 RotEuler,                       // Matrix is computed from sperated composantes, with euler rotation.
00062                 RotQuat,                        // Matrix is computed from sperated composantes, with quat rotation (default).
00063 
00064                 TransformModeCount
00065         };


Constructor & Destructor Documentation

NL3D::CParticleSystemModel::CParticleSystemModel  ) 
 

ctor

===================================================================================== ctor

Definition at line 117 of file particle_system_model.cpp.

References _TriggerAnimatedValue, NL3D::CTransform::setOpacity(), NL3D::CTransform::setTransparency(), and NL3D::CAnimatedValueNotBlendable< bool >::Value.

00117                                            : _AutoGetEllapsedTime(true),
00118                                                                                            _ParticleSystem(NULL),
00119                                                                                            _Scene(NULL),
00120                                                                                            _EllapsedTime(0.01f),
00121                                                                                            _EllapsedTimeRatio(1.f),
00122                                                                                            _ToolDisplayEnabled(false),
00123                                                                                            _TransparencyStateTouched(true),
00124                                                                                            _LightableStateTouched(true),
00125                                                                                            _EditionMode(false),
00126                                                                                            _Invalidated(false),
00127                                                                                            _InsertedInVisibleList(false),
00128                                                                                            _InClusterAndVisible(false),
00129                                                                                            _EmitterActive(true),
00130                                                                                            _BypassGlobalUserParam(0),
00131                                                                                            _AnimType(CParticleSystem::AnimVisible),
00132                                                                                            _UserColor(CRGBA::White),
00133                                                                                            _ZBias(0.f)
00134 {
00135         setOpacity(false);
00136         setTransparency(true);
00137         IAnimatable::resize(AnimValueLast);
00138         _TriggerAnimatedValue.Value = true;
00139 
00140         // AnimDetail behavior: Must be traversed in AnimDetail, even if no channel mixer registered
00141         CTransform::setIsForceAnimDetail(true);
00142 
00143         // RenderFilter: We are a Landscape
00144         _RenderFilterType= UScene::FilterPS;    
00145 }

NL3D::CParticleSystemModel::~CParticleSystemModel  ) 
 

=====================================================================================

Definition at line 232 of file particle_system_model.cpp.

References NL3D::CSkeletonModel::detachSkeletonSon(), nlassert, and releaseRsc().

00233 {       
00234         nlassert(_Scene);
00235         releaseRsc();
00236         // Auto detach me from skeleton. Must do it here, not in ~CTransform().
00237         if(_FatherSkeletonModel)
00238         {
00239                 // detach me from the skeleton.
00240                 // clip and hrc hierarchy is modified.
00241                 _FatherSkeletonModel->detachSkeletonSon(this);
00242                 nlassert(_FatherSkeletonModel==NULL);
00243         }
00244 }


Member Function Documentation

void NL3D::CParticleSystemModel::activateEmitters bool  active  ) 
 

Definition at line 1040 of file particle_system_model.cpp.

References _EmitterActive, and _ParticleSystem.

01041 {
01042         if (active == _EmitterActive) return;
01043         _EmitterActive = active;
01044         if (_ParticleSystem) _ParticleSystem->activateEmitters(active);
01045 }

sint NL3D::IAnimatable::addValue CChannelMixer chanMixer,
uint  valueId,
uint  ownerValueId,
const std::string &  prefix,
bool  detail
[protected, inherited]
 

This is a tool function which add a given value to a channel.

Returns:
-1 if the track was not found in the animationSet, else it return the channelId as if returned by CAnimationSet::getChannelIdByName(channelName).

Definition at line 37 of file animatable.cpp.

References NL3D::CChannelMixer::addChannel(), NL3D::IAnimatable::getDefaultTrack(), NL3D::IAnimatable::getValue(), NL3D::IAnimatable::getValueName(), nlassert, sint, and uint.

Referenced by NL3D::CTransform::registerToChannelMixer(), registerToChannelMixer(), NL3D::CCamera::registerToChannelMixer(), NL3D::CBone::registerToChannelMixer(), NL3D::CAnimatedMorph::registerToChannelMixer(), NL3D::CAnimatedMaterial::registerToChannelMixer(), and NL3D::CAnimatedLightmap::registerToChannelMixer().

00038 {
00039         nlassert(chanMixer);
00040         return chanMixer->addChannel(prefix+getValueName(valueId), this, getValue(valueId), getDefaultTrack(valueId), valueId, ownerValueId, detail);
00041 }

void NL3D::CParticleSystemModel::bypassGlobalUserParamValue uint  userParamIndex,
bool  byPass = true
 

for now, we have 4 animatables value in a system

Definition at line 1009 of file particle_system_model.cpp.

References NL3D::MaxPSUserParam, nlassert, nlctassert, and uint.

Referenced by NL3D::CParticleSystemInstanceUser::bypassGlobalUserParamValue().

01010 {
01011         nlctassert(MaxPSUserParam < 8); // there should be less than 8 parameters because of mask stored in a byte
01012         nlassert(userParamIndex < MaxPSUserParam);
01013         if (byPass) _BypassGlobalUserParam |= (1 << userParamIndex);
01014         else _BypassGlobalUserParam &= ~(1 << userParamIndex);
01015 }

bool NL3D::CTransform::canCastShadowMap  )  const [inline, inherited]
 

true if the instance cast shadow. By default false

Definition at line 470 of file transform.h.

References NL3D::CTransform::getStateFlag(), and NL3D::CTransform::IsFinalShadowMapCaster.

Referenced by NL3D::CClipTrav::clipSkeletonShadowMaps(), NL3D::CTransform::enableCastShadowMap(), NL3D::CTransform::setGeneratingShadowMap(), and NL3D::CMeshInstance::traverseRender().

00470 {return getStateFlag(IsFinalShadowMapCaster)!=0;}

bool NL3D::CTransform::canReceiveShadowMap  )  const [inline, inherited]
 

true if the instance receive shadow. By default false

Definition at line 477 of file transform.h.

References NL3D::CTransform::getStateFlag(), and NL3D::CTransform::IsFinalShadowMapReceiver.

Referenced by NL3D::CLandscapeUser::canReceiveShadowMap(), and NL3D::CLandscapeModel::traverseRender().

00477 {return getStateFlag(IsFinalShadowMapReceiver)!=0;}

virtual bool NL3D::CTransformShape::canStartStop  )  [inline, virtual, inherited]
 

Test if there is a start/stop caps in the objects (some fxs such as remanence).

Reimplemented in NL3D::CSegRemanence.

Definition at line 126 of file transform_shape.h.

Referenced by NL3D::CInstanceUser::canStartStop().

00126 { return false; }

void NL3D::CTransformShape::changeLightSetup CRenderTrav rdrTrav  )  [inherited]
 

setup lighting for this instance into driver. The traverseRender().

Definition at line 105 of file transform_shape.cpp.

References NL3D::CTransformShape::_CurrentLightContribution, NL3D::CTransformShape::_CurrentUseLocalAttenuation, and NL3D::CRenderTrav::changeLightSetup().

Referenced by NL3D::CMeshMRMGeom::activeInstance(), NL3D::CMeshGeom::activeInstance(), NL3D::CSkeletonModel::renderSkins(), and NL3D::CTransformShape::traverseRender().

00106 {
00107         // setup the instance lighting.
00108         rdrTrav->changeLightSetup(_CurrentLightContribution, _CurrentUseLocalAttenuation);
00109 }

bool NL3D::CParticleSystemModel::checkAgainstPyramid const std::vector< CPlane > &  worldFrustumPyramid  )  const [private]
 

=========================================================================================

Definition at line 490 of file particle_system_model.cpp.

References _ParticleSystem, NLMISC::CAABBox::clipBack(), NL3D::CTransform::getWorldMatrix(), MINI_TIMER, nlassert, NL3D::PSStatsCheckAgainstPyramid, and sint.

Referenced by refreshRscDeletion(), and traverseClip().

00491 {               
00492         MINI_TIMER(PSStatsCheckAgainstPyramid)
00493         nlassert(_ParticleSystem);
00494         NLMISC::CAABBox bbox;
00495         _ParticleSystem->computeBBox(bbox);             
00496         const CMatrix           &mat = getWorldMatrix();
00497                 
00498         // Transform the pyramid in Object space.       
00499         for(sint i=0; i < (sint) pyramid.size(); i++)
00500         {       
00501                 // test wether the bbox is entirely in the neg side of the plane
00502                 if (!bbox.clipBack(pyramid[i]  * mat  )) 
00503                 {
00504                         return false;                   
00505                 }
00506         }
00507         return true;
00508 
00509 }

bool NL3D::CParticleSystemModel::checkDestroyCondition CParticleSystem ps  )  [private]
 

Definition at line 987 of file particle_system_model.cpp.

References _EditionMode, NL3D::CParticleSystem::getAnimType(), NL3D::CParticleSystem::isDestroyConditionVerified(), MINI_TIMER, nlassert, NL3D::PSStatsCheckDestroyCondition, and releaseRscAndInvalidate().

Referenced by traverseClip().

00988 {
00989         MINI_TIMER(PSStatsCheckDestroyCondition)
00990         nlassert(ps);
00991         if (!_EditionMode)
00992         {
00996                 if (ps->getAnimType() != CParticleSystem::AnimAlways)
00997                 {
00998                         if (ps->isDestroyConditionVerified())
00999                         {
01000                                 releaseRscAndInvalidate();
01001                                 return true;
01002                         }                       
01003                 }
01004         }
01005         return false;
01006 }

void NL3D::IAnimatable::clearFlag uint  valueId  )  [inline, protected, inherited]
 

This method clear a bit in the bitset.

Definition at line 233 of file animatable.h.

References NL3D::IAnimatable::_BitSet, and uint.

Referenced by NL3D::ITransformable::clearTransformFlags(), doAnimate(), and NL3D::CAnimatedMaterial::update().

00234         {
00235                 _BitSet&= ~(1<<valueId);
00236         }

bool NL3D::CParticleSystemModel::clip  )  [virtual]
 

clip method called by traverseClip(). deafult is always visible

Reimplemented from NL3D::CTransformShape.

Definition at line 979 of file particle_system_model.cpp.

00980 {
00981         // no-op clip() because all done in special traverse()
00982         return true;
00983 }

void NL3D::CTransform::clipAddChild CTransform son  )  [inherited]
 

Definition at line 1217 of file transform.cpp.

References NL3D::CTransform::_ClipParents, NL3D::CTransform::_ClipSons, NL3D::CTransform::clipHasParent(), NL3D::CTransform::CClipNode::ClipNode, NL3D::CFastPtrList< CTransform >::insert(), and NL3D::CTransform::CClipNode::Parent.

Referenced by NL3D::CScene::createModel(), NL3D::CSkeletonModel::detachSkeletonSon(), NL3D::CLandscapeModel::initModel(), NL3D::CScene::initQuadGridClipManager(), NL3D::CQuadGridClipClusterListDist::resetSons(), NL3D::CClipTrav::traverse(), and NL3D::CTransform::updateClipTravForAncestorSkeleton().

01218 {
01219         if(!son)
01220                 return;
01221 
01222         // if already linked, no-op.
01223         if(son->clipHasParent(this))
01224                 return;
01225 
01226         // add a new parent entry for our son.
01227         CClipNode       *clipNode= new CClipNode;
01228         son->_ClipParents.push_back(clipNode);
01229 
01230         // link the son to us
01231         clipNode->Parent= this;
01232 
01233         // link us to the son 
01234         _ClipSons.insert(son, &clipNode->ClipNode);
01235 }

void NL3D::CTransform::clipDelChild CTransform son  )  [inherited]
 

Definition at line 1238 of file transform.cpp.

References NL3D::CTransform::clipDelFromParent().

Referenced by NL3D::CScene::initDefaultRoots(), NL3D::CLandscapeModel::initModel(), NL3D::CClipTrav::traverse(), and NL3D::CTransform::~CTransform().

01239 {
01240         if(!son)
01241                 return;
01242 
01243         // try to remove from me from my parent
01244         son->clipDelFromParent(this);
01245 }

CTransform * NL3D::CTransform::clipGetChild uint  index  )  const [inherited]
 

Definition at line 1265 of file transform.cpp.

References NL3D::CTransform::_ClipSons, index, nlassert, NL3D::CFastPtrList< CTransform >::size(), and uint.

Referenced by NL3D::CCluster::recursTraverseClip(), NL3D::CTransform::traverseClip(), NL3D::CRootModel::traverseClip(), traverseClip(), and NL3D::CTransform::~CTransform().

01266 {
01267         nlassert(index < _ClipSons.size());
01268         return (const_cast<CTransform*>(this))->_ClipSons.begin()[index];
01269 }

uint NL3D::CTransform::clipGetNumChildren  )  const [inline, inherited]
 

Definition at line 237 of file transform.h.

References NL3D::CTransform::_ClipSons, NL3D::CFastPtrList< CTransform >::size(), and uint.

Referenced by NL3D::CCluster::recursTraverseClip(), NL3D::CTransform::traverseClip(), NL3D::CRootModel::traverseClip(), traverseClip(), and NL3D::CTransform::~CTransform().

00237 {return _ClipSons.size();}

uint NL3D::CTransform::clipGetNumParents  )  const [inline, inherited]
 

Definition at line 234 of file transform.h.

References NL3D::CTransform::_ClipParents, and uint.

Referenced by NL3D::CTransform::clipUnlinkFromAll(), NL3D::CClipTrav::traverse(), and NL3D::CTransform::updateClipTravForAncestorSkeleton().

00234 {return _ClipParents.size();}

CTransform * NL3D::CTransform::clipGetParent uint  index  )  const [inherited]
 

Definition at line 1258 of file transform.cpp.

References NL3D::CTransform::_ClipParents, index, nlassert, and uint.

Referenced by NL3D::CTransform::clipUnlinkFromAll(), NL3D::CClipTrav::traverse(), and NL3D::CTransform::updateClipTravForAncestorSkeleton().

01259 {
01260         nlassert(index < _ClipParents.size());
01261         return _ClipParents[index]->Parent;
01262 }

void NL3D::CTransform::clipUnlinkFromAll  )  [inherited]
 

Definition at line 1248 of file transform.cpp.

References NL3D::CTransform::clipDelFromParent(), NL3D::CTransform::clipGetNumParents(), and NL3D::CTransform::clipGetParent().

Referenced by NL3D::CSkeletonModel::bindSkin(), NL3D::CScene::initQuadGridClipManager(), NL3D::CTransform::updateClipTravForAncestorSkeleton(), and NL3D::CTransform::~CTransform().

01249 {
01250         // unlink from all parent clip
01251         while( clipGetNumParents() )
01252         {
01253                 clipDelFromParent( clipGetParent(0) );
01254         }
01255 }

bool NL3D::ITransformable::compareMatrixDate uint64  callerDate  )  const [inline, inherited]
 

Tells if the LocalMatrix is newer than what caller except. This return true either if the matrix components (pos/rot etc...) are touched, or if matrix is newer than caller date.

Definition at line 82 of file transformable.h.

References NL3D::ITransformable::_LocalMatrixDate, NL3D::ITransformable::needCompute(), and uint64.

Referenced by NL3D::CWaterModel::updateDiffuseMapMatrix().

00083         {
00084                 return callerDate<_LocalMatrixDate || needCompute();
00085         }

virtual bool NL3D::CTransform::computeWorldBBoxForShadow NLMISC::CAABBox worldBB  )  [inline, virtual, inherited]
 

Special For Skeleton Caster. When Skeletons cast shadows, they first compute the WorldBBox. The model should compute its bbox in World (best fit).

Returns:
false if the model don't support it (default), or if hidden in HRC!!

Reimplemented in NL3D::CMeshInstance, and NL3D::CSkeletonModel.

Definition at line 521 of file transform.h.

Referenced by NL3D::CSkeletonModel::computeWorldBBoxForShadow().

00521 {return false;}

virtual void NL3D::CTransform::createShadowMap  )  [inline, protected, virtual, inherited]
 

To implement for ShadowCaster support. typically allocate a CShadowMap and store NB: the texture doesn't have to be inited at this time. Update it each frame in generateShadowMap()

Reimplemented in NL3D::CMeshInstance, and NL3D::CSkeletonModel.

Definition at line 902 of file transform.h.

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

00902 {}

CTransform* NL3D::CParticleSystemModel::creator  )  [inline, static]
 

create an instance of this class

Reimplemented from NL3D::CTransformShape.

Definition at line 242 of file particle_system_model.h.

00243         {
00244                 return new CParticleSystemModel;
00245         }

virtual void NL3D::CTransform::deleteShadowMap  )  [inline, protected, virtual, inherited]
 

To implement for ShadowCaster support. typically free the shadowMap.

Reimplemented in NL3D::CMeshInstance, and NL3D::CSkeletonModel.

Definition at line 904 of file transform.h.

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

00904 {}

void NL3D::CParticleSystemModel::doAnimate  )  [private]
 

=====================================================================================

Definition at line 619 of file particle_system_model.cpp.

References NL3D::CParticleSystem::_BypassGlobalUserParam, _UserMatrix, NL3D::IAnimatable::clearFlag(), NL3D::CScene::getClipTrav(), getEllapsedTime(), NL3D::CScene::getEllapsedTime(), getEllapsedTimeRatio(), NL3D::CTransformShape::getNumTrianglesAfterLoadBalancing(), NL3D::CTransform::getOwnerScene(), getPS(), NL3D::CParticleSystem::getScene(), NL3D::CTransform::getWorldMatrix(), NL3D::CParticleSystem::hide(), isAutoGetEllapsedTimeEnabled(), NL3D::IAnimatable::isTouched(), NL3D::MaxPSUserParam, MINI_TIMER, nlassert, nlctassert, NL3D::PSStatsDoAnimate, NL3D::PSStatsDoAnimatePart1, NL3D::PSStatsDoAnimatePart2, NL3D::PSStatsDoAnimatePart3, NL3D::PSStatsNumDoAnimateCalls, setEllapsedTime(), NL3D::CParticleSystem::setNumTris(), NL3D::CParticleSystem::setSysMat(), NL3D::CParticleSystem::setUserMatrix(), NL3D::CParticleSystem::setUserParam(), NL3D::CParticleSystem::setViewMat(), NL3D::CParticleSystem::step(), NL3D::TAnimationTime, uint, updateLightingInfos(), updateOpacityInfos(), and NL3D::CTravCameraScene::ViewMatrix.

Referenced by NL3D::CParticleSystemManager::processAnimate(), and traverseAnimDetail().

00620 {
00621         ++ PSStatsNumDoAnimateCalls;
00622         MINI_TIMER(PSStatsDoAnimate)
00623         nlassert(!_Invalidated);
00624         CParticleSystem         *ps = getPS();
00625         CClipTrav                       &clipTrav= getOwnerScene()->getClipTrav();
00626         const CMatrix           &mat= getWorldMatrix();  
00627         //
00628         {       
00629                 MINI_TIMER(PSStatsDoAnimatePart1)
00630                         
00631                 // Set the 'hide' flag. This prevent trails from being created is the system is hidden, moved, and then showed in the next frame.                 
00632                 ps->hide(!this->isHrcVisible());
00633                 ps->setSysMat(&mat);    
00634                 ps->setUserMatrix(&_UserMatrix);
00635                 ps->setViewMat(clipTrav.ViewMatrix);
00636                 updateOpacityInfos();
00637                 updateLightingInfos();
00638         }
00639         //ps->setSysMat(getWorldMatrix());
00640         nlassert(ps->getScene());       
00641 
00642 
00643         {
00644                 MINI_TIMER(PSStatsDoAnimatePart2)
00645                         
00646                 // setup the number of faces we allow
00647                 ps->setNumTris((uint) getNumTrianglesAfterLoadBalancing());
00648 
00649 
00650                 // set the global user param that are bypassed
00651                 nlctassert(MaxPSUserParam < 8); // there should be less than 8 parameters because of mask stored in a byte
00652                 ps->_BypassGlobalUserParam = _BypassGlobalUserParam;
00653 
00654                 // setup system user parameters for parameters that have been touched
00655                 for (uint k = 0; k < MaxPSUserParam; ++k)
00656                 {
00657                         if (isTouched((uint)CParticleSystemModel::PSParam0 + k))
00658                         {
00659                                 ps->setUserParam(k, _UserParam[k].Value);
00660                                 clearFlag((uint)CParticleSystemModel::PSParam0 + k);
00661                         }
00662                 }       
00663                 if (isAutoGetEllapsedTimeEnabled())
00664                 {
00665                         setEllapsedTime(ps->getScene()->getEllapsedTime() * getEllapsedTimeRatio());
00666                 }
00667         }
00668         {
00669                 MINI_TIMER(PSStatsDoAnimatePart3)                       
00670                 TAnimationTime delay = getEllapsedTime();
00671                 // animate particles                            
00672                 ps->step(CParticleSystem::Anim, delay);
00673         }
00674 }

void NL3D::CParticleSystemModel::enableAutoGetEllapsedTime bool  enable = true  )  [inline]
 

when called with true, this force the model to querry himself the ellapsed time to the scene. This is the default. Otherwise, setEllapsedTime must be called

Definition at line 141 of file particle_system_model.h.

References _AutoGetEllapsedTime.

00142                 { 
00143                         _AutoGetEllapsedTime = enable; 
00144                 }

void NL3D::CTransform::enableCastShadowMap bool  state  )  [inherited]
 

By default, map shadow casting is disabled. This enabled shadow for this model. Fails if the model don't support dynamic Map Shadow Casting (eg landscape) Dervier note: createShadowMap() and deleteShadowMap() is called here.

Definition at line 1335 of file transform.cpp.

References NL3D::CTransform::canCastShadowMap(), NL3D::CTransform::createShadowMap(), NL3D::CTransform::deleteShadowMap(), NL3D::CTransform::getShadowMap(), NL3D::CTransform::IsFinalShadowMapCaster, NL3D::CTransform::modelCanCastShadowMap(), nlassert, and NL3D::CTransform::setStateFlag().

01336 {
01337         bool    precState= canCastShadowMap();
01338 
01339         if(modelCanCastShadowMap()) 
01340                 setStateFlag(IsFinalShadowMapCaster, state);
01341         else
01342                 setStateFlag(IsFinalShadowMapCaster, false);
01343 
01344         // if just enabled, create the shadowMap
01345         if(canCastShadowMap() && !precState)
01346         {
01347                 createShadowMap();
01348                 // The user must have created it.
01349                 nlassert(getShadowMap());
01350         }
01351         // if just disabled, free ressource
01352         else if(!canCastShadowMap() && precState)
01353         {
01354                 deleteShadowMap();
01355         }
01356 }

void NL3D::CParticleSystemModel::enableDisplayTools bool  enable = true  ) 
 

activate the display of tool (for edition purpose)

Definition at line 1026 of file particle_system_model.cpp.

References _ToolDisplayEnabled, touchLightableState(), and touchTransparencyState().

01027 {        
01028         _ToolDisplayEnabled = enable; 
01029         touchTransparencyState();
01030         touchLightableState();
01031 }

void NL3D::CTransform::enableReceiveShadowMap bool  state  )  [inline, inherited]
 

By default, map shadow receiving is disabled. This enabled shadow for this model. Fails if the model don't support dynamic Map Shadow Receiving (eg Particle system)

Definition at line 475 of file transform.h.

References NL3D::CTransform::IsFinalShadowMapReceiver, NL3D::CTransform::modelCanReceiveShadowMap(), and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CLandscapeUser::enableReceiveShadowMap().

00475 {if(modelCanReceiveShadowMap()) setStateFlag(IsFinalShadowMapReceiver, state);}

void NL3D::CTransform::forceCompute  )  [protected, inherited]
 

Definition at line 1359 of file transform.cpp.

References NL3D::CTransform::_FatherBoneId, NL3D::CTransform::_FatherSkeletonModel, NL3D::CTransform::_HrcParent, NL3D::CSkeletonModel::forceComputeBone(), NL3D::CTransform::update(), and NL3D::CTransform::updateWorldMatrixFromFather().

Referenced by NL3D::CParticleSystemManager::processAnimate().

01360 {
01361         // if father is a skeleton, force to compute the bone we are sticked to
01362         if (_FatherSkeletonModel)
01363         {
01364                 _FatherSkeletonModel->forceComputeBone(_FatherBoneId);
01365         }
01366         else
01367         {
01368                 // force to compûte the father
01369                 if (_HrcParent)
01370                 {
01371                         _HrcParent->forceCompute();
01372                 }
01373         }
01374         // compute
01375         update();
01376         updateWorldMatrixFromFather();
01377 }

void NL3D::CParticleSystemModel::forceInstanciate  ) 
 

Definition at line 1070 of file particle_system_model.cpp.

References _ParticleSystem, MINI_TIMER, NL3D::PSStatsForceInstanciate, and reallocRsc().

01071 {
01072         MINI_TIMER(PSStatsForceInstanciate)
01073         if (_Invalidated) return;
01074         if (_ParticleSystem) return;
01075         reallocRsc();
01076 }

void NL3D::CParticleSystemModel::forceSetUserMatrix const NLMISC::CMatrix userMatrix  ) 
 

Definition at line 1087 of file particle_system_model.cpp.

References _UserMatrix, getPS(), and NL3D::CParticleSystem::setUserMatrix().

01088 {
01089         _UserMatrix = userMatrix;
01090         if (getPS())
01091         {
01092                 getPS()->setUserMatrix(&_UserMatrix);
01093         }
01094 }

void NL3D::CTransform::freeze  )  [inherited]
 

freeze the preceding position of the model. Do not use, special code for cluster. This inform the scene that preceding position setuped by user is "frozen". ie at next render(), this object won't be added to the "object moving list" (usefull for cluster mgt). The "frozen" state is disabled (at render() time) if:

  • change in position (directly or indireclty, such as animation) is performed after the freeze().
  • the "frozen" state of a father is not enabled (or disabled by a change in position of him :) ).

Definition at line 367 of file transform.cpp.

References NL3D::CTransform::_Frozen, and NL3D::CTransform::update().

Referenced by NL3D::CInstanceGroup::addToSceneWhenAllShapesLoaded(), and NL3D::CScene::initDefaultRoots().

00368 {
00369         // First, update the model
00370         // _Frozen state is disabled here (in CTransform::update()).
00371         update();
00372 
00373         // Then flag the frozen state.
00374         _Frozen= true;
00375 }

void NL3D::CTransform::freezeHRC  )  [inherited]
 

freeze the HRC so the WorldMatrix computed at next render() will be kept for long, and the model won't either be tested in HRC (which is still expensive, even if the worldmatrix doesn't need to be recomputed). The model won't either be validated. It is suposed to not change at all. Also, if it is not a son of a CCluster, it may be accelerated during Cliping (with CQuadGridClipManager).

NB: the model won't be tested in HRC anymore. calling freezeHRC() on a model in a hierarchy without calling it to the root of the hierarchy will result in that the model won't be validated nor be HRC traversed. To be simplier, you should freezeHRC() all the models of a hierarchy, from base root to leaves.

NB: if the hierarchy of this object must change, or if the object must moves, you must call unfreezeHRC() first, and you should do this for all the parents of this model.

Definition at line 385 of file transform.cpp.

References NL3D::CTransform::_FreezeHRCState, NL3D::CTransform::_Frozen, NL3D::CTransform::_TransformDirty, NL3D::CTransform::FreezeHRCStateDisabled, NL3D::CTransform::FreezeHRCStateRequest, NL3D::CTransform::QuadGridClipEnabled, and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CInstanceGroup::freezeHRC().

00386 {
00387         // if disabled, say we are ready to validate our worldMatrix for long.
00388         if(_FreezeHRCState==FreezeHRCStateDisabled)
00389         {
00390                 _FreezeHRCState= FreezeHRCStateRequest;
00391                 setStateFlag(QuadGridClipEnabled, true);
00392 
00393                 /* If the transform is not frozen (ie staticaly inserted in a cluster),
00394                         We must be sure it will be tested against QuadGridClipManager at next ClipTrav pass.
00395                         => must make this object a "moving object" at next render=> dirt _LocalMatrixDate.
00396                 */
00397                 if(!_Frozen)
00398                 {
00399                         _TransformDirty= true;
00400                 }
00401         }
00402 }

void NL3D::CTransform::freezeStaticLightSetup CPointLight pointLight[NL3D_MAX_LIGHT_CONTRIBUTION],
uint  numPointLights,
uint8  sunContribution,
CPointLight frozenAmbientlight
[inherited]
 

Freeze and set the Static Light Setup. Called by CInstanceGroup::addToScene() NB: it calls resetLighting() first. NB: nlassert(numPointLights<=NL3D_MAX_LIGHT_CONTRIBUTION)

Definition at line 1028 of file transform.cpp.

References NL3D::CTransform::_LightContribution, NL3D::CLightContribution::Factor, NL3D::CLightContribution::FrozenAmbientLight, NL3D::CLightContribution::FrozenStaticLightSetup, NL3D::CTransform::IsNeedUpdateFrozenStaticLightSetup, NL3D_MAX_LIGHT_CONTRIBUTION, nlassert, NL3D::CLightContribution::NumFrozenStaticLight, NL3D::CLightContribution::PointLight, NL3D::CTransform::resetLighting(), NL3D::CTransform::setStateFlag(), NL3D::CLightContribution::SunContribution, uint, and uint8.

01030 {
01031         nlassert(numPointLights <= NL3D_MAX_LIGHT_CONTRIBUTION);
01032 
01033         // resetLighting() first.
01034         resetLighting();
01035 
01036         // Enable StaticLightSetup.
01037         _LightContribution.FrozenStaticLightSetup= true;
01038         _LightContribution.NumFrozenStaticLight= numPointLights;
01039         _LightContribution.SunContribution= sunContribution;
01040         // setup the FrozenAmbientLight
01041         _LightContribution.FrozenAmbientLight= frozenAmbientlight;
01042         // Setup other pointLights
01043         uint i;
01044         for(i=0;i<numPointLights;i++)
01045         {
01046                 // set the light
01047                 _LightContribution.PointLight[i]= pointLight[i];
01048                 // Enable at max.
01049                 _LightContribution.Factor[i]= 255;
01050                 // Compute static AttFactor Later because don't have WorlPosition of the model here!!
01051                 setStateFlag(IsNeedUpdateFrozenStaticLightSetup, true);
01052 
01053                 // Do NOT set the iterator, because it is a staticLight.
01054         }
01055         // End the list
01056         if(i<NL3D_MAX_LIGHT_CONTRIBUTION)
01057                 _LightContribution.PointLight[i]= NULL;
01058 }

virtual void NL3D::CTransform::generateShadowMap const CVector lightDir  )  [inline, virtual, inherited]
 

For Casters. Display the Shadow to the "Auxiliary Driver". This method should only write to AlphaBuffer (since RGB may be the current rendered scene!), with Alpha==1 when pixel is shadowed. The ShadowMapManager has already cleared the AlphaBuffer to black, and has already enabled alpha write only. The ShadowMapManager has already setuped Viewport/Scissor as its convenience. The extra blurring is a work of the ShadowMapManager (which blurs multiple shadows in a same pass) NB: you can overwrite the current driver frustum/ViewMatrix/modelMatrix without backuping it (ShadowMapManager work)

Reimplemented in NL3D::CMeshInstance, and NL3D::CSkeletonModel.

Definition at line 492 of file transform.h.

Referenced by NL3D::CShadowMapManager::renderGenerate().

00492 {}

void NL3D::CParticleSystemModel::getAABBox NLMISC::CAABBox bbox  )  const [virtual]
 

=====================================================================================

Reimplemented from NL3D::CTransformShape.

Definition at line 218 of file particle_system_model.cpp.

References _ParticleSystem, MINI_TIMER, and NL3D::PSStatsGetAABBox.

00219 {
00220         MINI_TIMER(PSStatsGetAABBox)
00221         if (_ParticleSystem)
00222         {
00223                 _ParticleSystem->computeBBox(bbox);
00224         }
00225         else
00226         {
00227                 NLMISC::safe_cast<CParticleSystemShape *>((IShape *) Shape)->getAABBox(bbox);
00228         }
00229 }

CSkeletonModel* NL3D::CTransform::getAncestorSkeletonModel  )  const [inline, inherited]
 

Definition at line 207 of file transform.h.

References NL3D::CTransform::_AncestorSkeletonModel.

Referenced by NL3D::CParticleSystemManager::processAnimate().

00207 { return _AncestorSkeletonModel; }

CChannelMixer* NL3D::CTransform::getChannelMixer  )  const [inline, protected, inherited]
 

get the channelMixer owned by the transform. return result of a refPtr => may be NULL.

Definition at line 641 of file transform.h.

Referenced by NL3D::CSkeletonModel::computeCurrentBBox(), NL3D::CMeshBaseInstance::traverseHrc(), and NL3D::CSkeletonModel::updateBoneToCompute().

00641 {return _ChannelMixer;}

bool NL3D::CTransform::getChannelMixerOwnerShip  )  const [inline, inherited]
 

Definition at line 257 of file transform.h.

References NL3D::CTransform::getStateFlag(), and NL3D::CTransform::IsDeleteChannelMixer.

Referenced by NL3D::CTransform::registerToChannelMixer(), and NL3D::CTransform::~CTransform().

00257 { return getStateFlag(IsDeleteChannelMixer)!=0; }

CInstanceGroup* NL3D::CTransform::getClusterSystem  )  [inline, inherited]
 

Definition at line 320 of file transform.h.

References NL3D::CTransform::_ClusterSystem.

Referenced by NL3D::CScene::findCameraClusterSystemFromRay(), and NL3D::CClipTrav::traverse().

00320 { return _ClusterSystem; }

ITrack * NL3D::CParticleSystemModel::getDefaultTrack uint  valueId  )  [virtual]
 

=====================================================================================

Reimplemented from NL3D::CTransform.

Definition at line 446 of file particle_system_model.cpp.

References NL3D::CParticleSystemShape::getDefaultPos(), NL3D::CParticleSystemShape::getDefaultRotQuat(), NL3D::CParticleSystemShape::getDefaultScale(), NL3D::CParticleSystemShape::getDefaultTriggerTrack(), NL3D::CParticleSystemShape::getUserParamDefaultTrack(), nlassert, PSParam0, PSTrigger, and uint.

00447 {
00448         nlassert(valueId < AnimValueLast);
00449         nlassert(Shape);
00450 
00451         CParticleSystemShape *pss = NLMISC::safe_cast<CParticleSystemShape *>((IShape *) Shape);
00452 
00453         switch (valueId)
00454         {
00455                 case PosValue:                  return pss->getDefaultPos();            
00456                 case RotQuatValue:              return pss->getDefaultRotQuat();
00457                 case ScaleValue:                return pss->getDefaultScale();          
00458         }
00459         if (valueId < OwnerBit) return CTransformShape::getDefaultTrack(valueId); // delegate to parent
00460 
00461         // this value belong to us
00462         if (valueId < PSTrigger) 
00463         {
00464                 return pss->getUserParamDefaultTrack(valueId - (uint) PSParam0);
00465         }
00466         return pss->getDefaultTriggerTrack();
00467 }

float NL3D::CTransformShape::getDistMax  )  const [inline, inherited]
 

Definition at line 135 of file transform_shape.h.

Referenced by NL3D::CQuadGridClipCluster::addModel(), NL3D::CTransformShape::clip(), and NL3D::CInstanceUser::getDistMax().

00135 { return _DistMax; }    

bool NL3D::CParticleSystemModel::getEditionMode void   )  const [inline]
 

test if edition mode is activated

Definition at line 191 of file particle_system_model.h.

References _EditionMode.

Referenced by NL3D::CParticleSystemManager::processAnimate().

00192                 { 
00193                         return _EditionMode; 
00194                 }

TAnimationTime NL3D::CParticleSystemModel::getEllapsedTime void   )  const [inline]
 

get the ellapsed time used for animation

Definition at line 167 of file particle_system_model.h.

References _EllapsedTime, and NL3D::TAnimationTime.

Referenced by doAnimate(), and NL3D::CParticleSystemShape::render().

00168                 { 
00169                         return _EllapsedTime; 
00170                 }

float NL3D::CParticleSystemModel::getEllapsedTimeRatio  )  const [inline]
 

when called with true, this force the model to querry himself the ellapsed time to the scene. This is the default. Otherwise, setEllapsedTime must be called

Definition at line 155 of file particle_system_model.h.

References _EllapsedTimeRatio.

Referenced by doAnimate().

00155 { return _EllapsedTimeRatio; }                  

bool NL3D::CTransform::getForceClipRoot  )  const [inline, inherited]
 

Definition at line 538 of file transform.h.

References NL3D::CTransform::ForceClipRoot, and NL3D::CTransform::getStateFlag().

Referenced by NL3D::CTransformUser::getForceClipRoot().

00538 { return getStateFlag(ForceClipRoot) != 0; }    

const CLightContribution& NL3D::CTransform::getLightContribution  )  const [inline, inherited]
 

Return the current light contribution of this model

Definition at line 373 of file transform.h.

References NL3D::CTransform::_LightContribution.

Referenced by NL3D::CShadowMapManager::computeShadowColors(), and NL3D::CShadowMapManager::computeShadowDirection().

00373 { return _LightContribution; }  

CLightContribution& NL3D::CTransformShape::getLightContribution  )  [inline, inherited]
 

Reimplemented in NL3D::CMeshMultiLodInstance.

Definition at line 155 of file transform_shape.h.

Referenced by NL3D::CTransformShape::traverseRender(), and traverseRender().

00155 { return _LightContribution;}

void NL3D::CTransformShape::getLightHotSpotInWorld CVector modelPos,
float &  modelRadius
const [virtual, inherited]
 

get the HotSpot of the model for Light computation. For models with global attenuation, this is the point taken for attenuation computes. NB: should return the current world position. NB: return also the modelRadius (only for bigLightable) Default to NULL.

Reimplemented from NL3D::CTransform.

Reimplemented in NL3D::CSkeletonModel.

Definition at line 316 of file transform_shape.cpp.

References NL3D::CTransformShape::getAABBox(), NLMISC::CMatrix::getPos(), NLMISC::CAABBox::getRadius(), NL3D::CTransform::getWorldMatrix(), and NL3D::CTransform::isBigLightable().

00317 {
00318         /*
00319         // get the untransformed bbox from the model.
00320         CAABBox         bbox;
00321         getAABBox(bbox);
00322         // get transformed center pos of bbox
00323         modelPos= getWorldMatrix() * bbox.getCenter();
00324         // If the model is a big lightable, must take radius from aabbox, else suppose 0 radius.
00325         if(isBigLightable())
00326         {
00327                 // get size of the bbox (bounding sphere)
00328                 modelRadius= bbox.getRadius();
00329         }
00330         else
00331         {
00332                 // Assume 0 radius => faster computeLinearAttenuation()
00333                 modelRadius= 0;
00334         }
00335         */
00336 
00337         // This method works well for Big Trees.
00338         // TODO: generalize, saving a LightHotSpot per shape.
00339 
00340         // get pos of object. Ie the hotSpot is the pivot.
00341         modelPos= getWorldMatrix().getPos();
00342         // If the model is a big lightable, must take radius from aabbox, else suppose 0 radius.
00343         if(isBigLightable())
00344         {
00345                 // get the untransformed bbox from the model.
00346                 CAABBox         bbox;
00347                 getAABBox(bbox);
00348                 // get size of the bbox (bounding sphere)
00349                 modelRadius= bbox.getRadius();
00350         }
00351         else
00352         {
00353                 // Assume 0 radius => faster computeLinearAttenuation()
00354                 modelRadius= 0;
00355         }
00356 
00357 }

const std::string & NL3D::CTransform::getLoadBalancingGroup  )  const [inherited]
 

Get the load Balancing group of a model. see setLoadBalancingGroup().

Definition at line 532 of file transform.cpp.

References NL3D::CTransform::_LoadBalancingGroup, and NL3D::CLoadBalancingGroup::Name.

00533 {
00534         // get the group name
00535         return _LoadBalancingGroup->Name;
00536 }

CMaterial * NL3D::CTransformShape::getMaterial uint  materialId  )  [virtual, inherited]
 

Get a material of the transform shape

Reimplemented in NL3D::CMeshBaseInstance.

Definition at line 127 of file transform_shape.cpp.

References uint.

00128 {
00129         return NULL;
00130 }

const CMaterial * NL3D::CTransformShape::getMaterial uint  materialId  )  const [virtual, inherited]
 

Get a material of the transform shape

Reimplemented in NL3D::CMeshBaseInstance.

Definition at line 120 of file transform_shape.cpp.

References uint.

00121 {
00122         return NULL;
00123 }

const CMatrix& NL3D::ITransformable::getMatrix  )  const [inline, inherited]
 

Get the matrix, compute her if necessary (work in all modes).

Definition at line 76 of file transformable.h.

References NL3D::ITransformable::updateMatrix().

Referenced by NL3D::CInstanceGroup::addToSceneWhenAllShapesLoaded(), NL3D::CCamera::buildCameraPyramid(), NL3D::CBone::compute(), NL3D::CWaterShape::createInstance(), NL3D::CWaterModel::getAttenuatedHeight(), NL3D::CTransformableUser::getMatrix(), NL3D::CCloudScape::render(), NL3D::CMeshMultiLod::renderCoarseMesh(), and NL3D::CTransform::update().

00076 {updateMatrix(); return _LocalMatrix;}

uint64 NL3D::ITransformable::getMatrixDate  )  const [inline, inherited]
 

return the last date of computed matrix. updateMatrix() if necessary.

Definition at line 90 of file transformable.h.

References NL3D::ITransformable::_LocalMatrixDate, uint64, and NL3D::ITransformable::updateMatrix().

Referenced by NL3D::CWaterModel::updateDiffuseMapMatrix().

00091         {
00092                 updateMatrix();
00093                 return _LocalMatrixDate;
00094         }

CRGBA NL3D::CTransform::getMeanColor  )  const [inline, inherited]
 

see setMeanColor()

Definition at line 437 of file transform.h.

References NL3D::CTransform::_MeanColor.

00437 {return _MeanColor;}

virtual const CMRMLevelDetail* NL3D::CTransformShape::getMRMLevelDetail  )  const [inline, virtual, inherited]
 

If the model support MRM, return the level detail setup. default is return NULL.

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 114 of file transform_shape.h.

Referenced by NL3D::CSkeletonModel::updateSkinRenderLists().

00114 {return NULL;}

uint NL3D::CTransformShape::getNumMaterial  )  const [virtual, inherited]
 

Get the count of material in this transform shape

Reimplemented in NL3D::CMeshBaseInstance.

Definition at line 113 of file transform_shape.cpp.

References uint.

00114 {
00115         return 0;
00116 }

float NL3D::CParticleSystemModel::getNumTriangles float  distance  )  [virtual]
 

=====================================================================================

Reimplemented from NL3D::CTransformShape.

Definition at line 482 of file particle_system_model.cpp.

References _ParticleSystem, MINI_TIMER, and NL3D::PSStatsGetNumTriangles.

00483 {
00484         MINI_TIMER(PSStatsGetNumTriangles)
00485         if (!_ParticleSystem) return 0;
00486         return (float) _ParticleSystem->getWantedNumTris(distance);
00487 }

float NL3D::CTransformShape::getNumTrianglesAfterLoadBalancing  )  [inline, inherited]
 

get an approximation of the number of triangles this instance should render. This method is valid only for IShape classes (in render()), after LoadBalancing traversal is performed. NB: It is not guaranted that this instance will render those number of triangles.

Definition at line 111 of file transform_shape.h.

References NL3D::CTransformShape::_NumTrianglesAfterLoadBalancing.

Referenced by doAnimate(), NL3D::CMeshMRMSkinned::profileSceneRender(), NL3D::CMeshMRM::profileSceneRender(), NL3D::CMeshMRMSkinned::render(), NL3D::CMeshMRM::render(), NL3D::CSkeletonModel::renderSkins(), NL3D::CMeshMRM::supportMeshBlockRendering(), and NL3D::CMeshMultiLodInstance::traverseLoadBalancing().

00111 {return _NumTrianglesAfterLoadBalancing;}

uint NL3D::CTransform::getOrderingLayer  )  const [inline, inherited]
 

Get the ordering layer.

Definition at line 187 of file transform.h.

References NL3D::CTransform::_OrderingLayer, and uint.

Referenced by NL3D::CTransformUser::getOrderingLayer(), and NL3D::CRenderTrav::traverse().

00187 { return _OrderingLayer; }

CScene* NL3D::CTransform::getOwnerScene  )  const [inline, inherited]
 

get the scene which has created us

Definition at line 105 of file transform.h.

References NL3D::CTransform::_OwnerScene.

Referenced by NL3D::CLandscape::addZone(), NL3D::CWaterModel::clip(), NL3D::CTransformShape::clip(), NL3D::CLandscapeModel::clipAndRenderLandscape(), NL3D::CWaterModel::computeClippedPoly(), NL3D::CSkeletonModel::computeDisplayLodCharacterPriority(), NL3D::CSkeletonModel::computeLodTexture(), NL3D::CWaterModel::computeSimpleClippedPoly(), NL3D::CSkeletonModel::createShadowMap(), NL3D::CMeshInstance::createShadowMap(), NL3D::CSkeletonModel::detachSkeletonSon(), doAnimate(), NL3D::CWaterModel::doSimpleRender(), NL3D::CTargetAnimCtrl::execute(), NL3D::CSkeletonModel::generateShadowMap(), NL3D::CMeshInstance::generateShadowMap(), NL3D::CMeshMultiLodInstance::getCoarseMeshLighting(), NL3D::CTransform::initModel(), NL3D::CSkeletonModel::initModel(), NL3D::CPointLightModel::initModel(), NL3D::CLandscapeModel::initModel(), insertInVisibleList(), NL3D::CMeshMultiLod::instanciateCoarseMeshSpace(), NL3D::CQuadGridClipManager::linkModel(), NL3D::CQuadGridClipManager::profile(), NL3D::CTransformShape::profileRender(), NL3D::CLandscapeModel::receiveShadowMap(), NL3D::CCluster::recursTraverseClip(), NL3D::CMeshBaseInstance::releaseCurrentAsyncTextures(), NL3D::CSegRemanence::render(), NL3D::CMeshMultiLod::render(), NL3D::CMeshMRMSkinnedGeom::render(), NL3D::CMeshMRMGeom::render(), NL3D::CMeshGeom::render(), NL3D::CSkeletonModel::renderCLod(), NL3D::CMeshMultiLod::renderCoarseMesh(), NL3D::CSkeletonModel::renderIntoSkeletonShadowMap(), NL3D::CMeshInstance::renderIntoSkeletonShadowMap(), NL3D::CSkeletonModel::renderShadowSkins(), NL3D::CMeshMRMGeom::renderSkin(), NL3D::CMeshGeom::renderSkin(), NL3D::CMeshMRMSkinnedGeom::renderSkinGroupGeom(), NL3D::CMeshMRMGeom::renderSkinGroupGeom(), NL3D::CMeshMRMSkinnedGeom::renderSkinGroupPrimitives(), NL3D::CMeshMRMGeom::renderSkinGroupPrimitives(), NL3D::CMeshMRMSkinnedGeom::renderSkinGroupSpecularRdrPass(), NL3D::CMeshMRMGeom::renderSkinGroupSpecularRdrPass(), NL3D::CSkeletonModel::renderSkinList(), NL3D::CSkeletonModel::renderSkins(), NL3D::CQuadGridClipManager::reset(), NL3D::CTransform::setLoadBalancingGroup(), NL3D::CSkeletonModel::setLodCharacterShape(), NL3D::CMeshBaseInstance::startAsyncTextureLoading(), NL3D::CWaveMakerModel::traverseAnimDetail(), NL3D::CSkeletonModel::traverseAnimDetail(), NL3D::CSegRemanence::traverseAnimDetail(), traverseAnimDetail(), NL3D::CMeshBaseInstance::traverseAnimDetail(), NL3D::CTransform::traverseAnimDetailWithoutUpdateWorldMatrix(), NL3D::CTransform::traverseClip(), NL3D::CQuadGridClipManager::traverseClip(), traverseClip(), NL3D::CLandscapeModel::traverseClip(), NL3D::CMeshBaseInstance::traverseHrc(), NL3D::CLandscapeModel::traverseHrc(), NL3D::CTransform::traverseLight(), NL3D::CPointLightModel::traverseLight(), NL3D::CTransformShape::traverseLoadBalancing(), NL3D::CMeshMultiLodInstance::traverseLoadBalancing(), NL3D::CTransformShape::traverseLoadBalancingPass0(), NL3D::CWaterModel::traverseRender(), NL3D::CVegetableBlendLayerModel::traverseRender(), NL3D::CTransformShape::traverseRender(), NL3D::CMeshInstance::traverseRender(), NL3D::CLandscapeModel::traverseRender(), NL3D::CFlareModel::traverseRender(), NL3D::CTransform::unfreezeHRC(), NL3D::CTransform::update(), NL3D::CTransform::updateClipTravForAncestorSkeleton(), NL3D::CQuadGridClipManager::updateClustersFromCamera(), NL3D::CSkeletonModel::updateShadowMap(), NL3D::CMeshInstance::updateShadowMap(), NL3D::CTransform::updateWorld(), NL3D::CSkeletonModel::~CSkeletonModel(), and NL3D::CTransform::~CTransform().

00105 {return _OwnerScene;}

CVector NL3D::ITransformable::getPivot  )  [inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 255 of file transformable.h.

References NL3D::ITransformable::_Pivot, nlassert, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, and NL3D::CAnimatedValueBlendable< T >::Value.

00256         {
00257                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00258                 return _Pivot.Value;
00259         }

void NL3D::ITransformable::getPivot CVector pivot  )  [inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 224 of file transformable.h.

References NL3D::ITransformable::_Pivot, nlassert, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CTransformableUser::getPivot().

00225         {
00226                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00227                 pivot= _Pivot.Value;
00228         }

const char * NL3D::ITransformable::getPivotValueName  )  [static, inherited]
 

Definition at line 117 of file transformable.cpp.

Referenced by NL3D::ITransformable::getValueName().

00118 {
00119         return "pivot";
00120 }

CVector NL3D::ITransformable::getPos void   )  [inline, inherited]
 

Work only in Rot* mode(nlassert).

Definition at line 231 of file transformable.h.

References nlassert, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CSkeletonModel::generateShadowMap(), NL3D::CWaterModel::getHeight(), NL3D::CSkeletonModel::renderIntoSkeletonShadowMap(), NL3D::CMeshInstance::renderIntoSkeletonShadowMap(), and NL3D::CPointLightModel::traverseLight().

00232         {
00233                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00234                 return _Pos.Value;
00235         }

void NL3D::ITransformable::getPos CVector pos  )  [inline, inherited]
 

Work only in Rot* mode(nlassert).

Definition at line 200 of file transformable.h.

References nlassert, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CTransformableUser::getPos(), NL3D::CInstanceGroup::getPos(), and NL3D::CPSLight::step().

00201         {
00202                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00203                 pos= _Pos.Value;
00204         }

const char * NL3D::ITransformable::getPosValueName  )  [static, inherited]
 

Definition at line 97 of file transformable.cpp.

Referenced by NL3D::ITransformable::getValueName().

00098 {
00099         return "pos";
00100 }

const CParticleSystem* NL3D::CParticleSystemModel::getPS void   )  const [inline]
 

Get the particle system (NB : This is shared by a smart ptr) contained in this transform shape. This may be null if the model is not visible.

Definition at line 92 of file particle_system_model.h.

References _ParticleSystem.

00093                 {               
00094                         return _ParticleSystem;
00095                 }

CParticleSystem* NL3D::CParticleSystemModel::getPS void   )  [inline]
 

Get the particle system contained in this transform shape. (NB: This is shared by a smart ptr)

Returns:
pointer to the system, or NULL if no system is currently hold by this model. this may happen when the system is not visible and that it has been deleted

Definition at line 84 of file particle_system_model.h.

References _ParticleSystem.

Referenced by doAnimate(), forceSetUserMatrix(), NL3D::CParticleSystemInstanceUser::getSystemBBox(), NL3D::CParticleSystemInstanceUser::isSystemPresent(), NL3D::CParticleSystemManager::processAnimate(), NL3D::CParticleSystemManager::reactivateSound(), NL3D::CParticleSystemShape::render(), NL3D::CParticleSystemManager::stopSound(), and traverseAnimDetail().

00085                 {
00086                         return _ParticleSystem;
00087                 }

const char * NL3D::CParticleSystemModel::getPSParamName uint  valueId  )  [static]
 

=====================================================================================

Definition at line 429 of file particle_system_model.cpp.

References nlassert, PSParam0, and uint.

Referenced by getValueName().

00430 {       
00431         nlassert(valueId < AnimValueLast);
00432         const char *name[] = { "PSParam0", "PSParam1", "PSParam2", "PSParam3" };        
00433         return name[valueId - (uint) PSParam0];
00434 }

void NL3D::CTransform::getReceiverBBox CAABBox bbox  )  [virtual, inherited]
 

For receivers. get the World Instance bbox that includes the receiver.

Reimplemented in NL3D::CLandscapeModel.

Definition at line 1328 of file transform.cpp.

References NLMISC::CAABBox::setCenter(), and NLMISC::CAABBox::setHalfSize().

Referenced by NL3D::CShadowMapManager::addShadowReceiver().

01329 {
01330         bbox.setCenter(CVector::Null);
01331         bbox.setHalfSize(CVector::Null);
01332 }

virtual const CMatrix& NL3D::CTransform::getReceiverRenderWorldMatrix  )  const [inline, virtual, inherited]
 

For receivers. Retrieve the WorldMatrix of the model used for IDriver::render(). By default it returns getWorldMatrix(). The exception is the Landscape and his "ZBuffer Problem" management.

Reimplemented in NL3D::CLandscapeModel.

Definition at line 511 of file transform.h.

References NL3D::CTransform::getWorldMatrix().

Referenced by NL3D::CShadowMapManager::renderProject().

00511 {return getWorldMatrix();}

const sint& NLMISC::CRefCount::getRefCount  )  const [inline, inherited]
 

Definition at line 70 of file smart_ptr.h.

References NLMISC::CRefCount::crefs, and sint.

00071         {
00072                 return  crefs;
00073         }

CVector NL3D::ITransformable::getRotEuler  )  [inline, inherited]
 

Work only in RotEuler mode(nlassert).

Definition at line 237 of file transformable.h.

References NL3D::ITransformable::_RotEuler, nlassert, NL3D::ITransformable::RotEuler, and NL3D::CAnimatedValueBlendable< T >::Value.

00238         {
00239                 nlassert(_Mode==RotEuler);
00240                 return _RotEuler.Value;
00241         }

void NL3D::ITransformable::getRotEuler CVector rot  )  [inline, inherited]
 

Work only in RotEuler mode(nlassert).

Definition at line 206 of file transformable.h.

References NL3D::ITransformable::_RotEuler, nlassert, NL3D::ITransformable::RotEuler, and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CTransformableUser::getRotEuler().

00207         {
00208                 nlassert(_Mode==RotEuler);
00209                 rot= _RotEuler.Value;
00210         }

const char * NL3D::ITransformable::getRotEulerValueName  )  [static, inherited]
 

Definition at line 102 of file transformable.cpp.

Referenced by NL3D::ITransformable::getValueName().

00103 {
00104         return "roteuler";
00105 }

CMatrix::TRotOrder NL3D::ITransformable::getRotOrder  )  [inline, inherited]
 

get the current rotorder (information vlaid only when RotEuler mode).

Definition at line 194 of file transformable.h.

References NL3D::ITransformable::_RotOrder.

Referenced by NL3D::CTransformableUser::getRotOrder().

00195         {
00196                 return _RotOrder;
00197         }

CQuat NL3D::ITransformable::getRotQuat  )  [inline, inherited]
 

Work only in RotQuat mode (nlassert).

Definition at line 243 of file transformable.h.

References NL3D::ITransformable::_RotQuat, nlassert, NL3D::ITransformable::RotQuat, and NL3D::CAnimatedValueBlendable< T >::Value.

00244         {
00245                 nlassert(_Mode==RotQuat);
00246                 return _RotQuat.Value;
00247         }

void NL3D::ITransformable::getRotQuat CQuat quat  )  [inline, inherited]
 

Work only in RotQuat mode (nlassert).

Definition at line 212 of file transformable.h.

References NL3D::ITransformable::_RotQuat, nlassert, NL3D::ITransformable::RotQuat, and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CTransformableUser::getRotQuat(), and NL3D::CInstanceGroup::getRotQuat().

00213         {
00214                 nlassert(_Mode==RotQuat);
00215                 quat= _RotQuat.Value;
00216         }

const char * NL3D::ITransformable::getRotQuatValueName  )  [static, inherited]
 

Definition at line 107 of file transformable.cpp.

Referenced by NL3D::ITransformable::getValueName().

00108 {
00109         return "rotquat";
00110 }

CVector NL3D::ITransformable::getScale void   )  [inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 249 of file transformable.h.

References nlassert, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, and NL3D::CAnimatedValueBlendable< T >::Value.

00250         {
00251                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00252                 return _Scale.Value;
00253         }

void NL3D::ITransformable::getScale CVector scale  )  [inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 218 of file transformable.h.

References nlassert, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CBone::compute(), and NL3D::CTransformableUser::getScale().

00219         {
00220                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00221                 scale= _Scale.Value;
00222         }

const char * NL3D::ITransformable::getScaleValueName  )  [static, inherited]
 

Definition at line 112 of file transformable.cpp.

Referenced by NL3D::ITransformable::getValueName().

00113 {
00114         return "scale";
00115 }

virtual CShadowMap* NL3D::CTransform::getShadowMap  )  [inline, virtual, inherited]
 

get The shadow Map result for receveing. If NULL, nothing is displayed.

Reimplemented in NL3D::CMeshInstance, and NL3D::CSkeletonModel.

Definition at line 495 of file transform.h.

Referenced by NL3D::CClipTrav::clipSkeletonShadowMaps(), NL3D::CTransform::enableCastShadowMap(), NL3D::CShadowMapManager::renderGenerate(), NL3D::CShadowMapManager::renderProject(), and NL3D::CShadowMapManager::selectShadowMapsToGenerate().

00495 {return NULL;}

bool NL3D::CTransform::getShowWhenLODSticked  )  const [inline, protected, inherited]
 

Test if obj must be displayed when sticked to an object displayed as a LOD (example: sword in hand of a character displayed as a LOD state).

Definition at line 680 of file transform.h.

References NL3D::CTransform::_ForceCLodSticked.

Referenced by traverseClip().

00680 { return _ForceCLodSticked; }

CSkeletonModel* NL3D::CTransform::getSkeletonModel  )  const [inline, inherited]
 

Get the skeleton model. Returnr NULL in normal mode.

Definition at line 205 of file transform.h.

References NL3D::CTransform::_FatherSkeletonModel.

Referenced by NL3D::CMeshMRMSkinnedGeom::render(), NL3D::CMeshMRMGeom::render(), NL3D::CMeshGeom::render(), NL3D::CMeshMRMSkinnedGeom::renderShadowSkinGeom(), NL3D::CMeshMRMGeom::renderShadowSkinGeom(), NL3D::CMeshMRMGeom::renderSkin(), NL3D::CMeshGeom::renderSkin(), NL3D::CMeshMRMSkinnedGeom::renderSkinGroupGeom(), NL3D::CMeshMRMGeom::renderSkinGroupGeom(), and NL3D::CTransformShape::traverseLoadBalancingPass0().

00205 {return _FatherSkeletonModel;}

virtual const std::vector<NLMISC::CBSphere>* NL3D::CTransform::getSkinBoneSphere  )  const [inline, protected, virtual, inherited]
 

Deriver must change this method if isSkinnable(). It return a list of sphere relative to each bone of the father skeleton. Use with getSkinBoneUsage() to know to wich bone this sphere apply NB: if a sphere radius is -1, it means that the bone is not used (for any reason...) default is to return NULL.

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 584 of file transform.h.

Referenced by NL3D::CSkeletonModel::updateSkinRenderLists().

00584 {return NULL;}

virtual const std::vector<sint32>* NL3D::CTransform::getSkinBoneUsage  )  const [inline, protected, virtual, inherited]
 

Deriver must change this method if isSkinnable(). It return the list of bone (correct skeleton index) used by the skins (NB: without the parents of the bone). NB: if an index is -1, it means that the skin bone has not been found in the skeleton (skip it) default is to return NULL.

Reimplemented in NL3D::CMeshInstance, NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 578 of file transform.h.

Referenced by NL3D::CSkeletonModel::computeCLodVertexAlpha(), and NL3D::CSkeletonModel::updateSkinRenderLists().

00578 {return NULL;}

TTransformMode NL3D::ITransformable::getTransformMode  )  [inline, inherited]
 

get the current transform mode.

Definition at line 189 of file transformable.h.

References NL3D::ITransformable::TTransformMode.

Referenced by NL3D::CTargetAnimCtrl::execute(), and NL3D::CTransformableUser::getTransformMode().

00190         {
00191                 return _Mode;
00192         }

bool NL3D::CTransform::getUserClipping  )  const [inherited]
 

Return the user clipping state.

Definition at line 1316 of file transform.cpp.

References NL3D::CTransform::getStateFlag(), and NL3D::CTransform::UserClipping.

Referenced by NL3D::CTransformUser::getUserClipping().

01317 {
01318         return getStateFlag(UserClipping) != 0;
01319 }

NLMISC::CRGBA NL3D::CParticleSystemModel::getUserColor  )  const [inline]
 

Definition at line 271 of file particle_system_model.h.

00271 { return _UserColor; }  

bool NL3D::CTransform::getUserLightable  )  const [inline, inherited]
 

Get the UserLightable flag.

Definition at line 347 of file transform.h.

References NL3D::CTransform::getStateFlag(), and NL3D::CTransform::IsUserLightable.

Referenced by NL3D::CTransformUser::getUserLightable().

00347 {return getStateFlag(IsUserLightable)!=0;}

const NLMISC::CMatrix& NL3D::CParticleSystemModel::getUserMatrix  )  const [inline]
 

Definition at line 284 of file particle_system_model.h.

References _UserMatrix.

Referenced by NL3D::CParticleSystemShape::render().

00284 { return _UserMatrix; }

IAnimatedValue * NL3D::CParticleSystemModel::getValue uint  valueId  )  [virtual]
 

=====================================================================================

Reimplemented from NL3D::ITransformable.

Definition at line 416 of file particle_system_model.cpp.

References _TriggerAnimatedValue, nlassert, PSParam0, PSTrigger, and uint.

Referenced by NL3D::CParticleSystemInstanceUser::getUserParam(), and NL3D::CParticleSystemInstanceUser::setUserParam().

00417 {
00418         nlassert(valueId < AnimValueLast);
00419         if (valueId < OwnerBit) return CTransformShape::getValue(valueId);      
00420         if (valueId < PSTrigger)
00421         {
00422         
00423                 return &_UserParam[valueId - (uint)  PSParam0];
00424         }
00425         return &_TriggerAnimatedValue;
00426 }

const char * NL3D::CParticleSystemModel::getValueName uint  valueId  )  const [virtual]
 

=====================================================================================

Reimplemented from NL3D::ITransformable.

Definition at line 437 of file particle_system_model.cpp.

References getPSParamName(), nlassert, PSTrigger, and uint.

00438 { 
00439         nlassert(valueId < AnimValueLast);
00440         if (valueId < OwnerBit) return CTransformShape::getValueName(valueId);
00441         if (valueId < PSTrigger) return getPSParamName(valueId); 
00442         return "PSTrigger";
00443 }

CHrcTrav::TVisibility NL3D::CTransform::getVisibility  )  [inline, inherited]
 

Get the local visibility state.

Definition at line 203 of file transform.h.

References NL3D::CTransform::Visibility.

Referenced by NL3D::CTransformUser::getVisibility(), NL3D::CParticleSystemManager::processAnimate(), NL3D::CMeshMRMSkinnedInstance::renderSkin(), NL3D::CMeshMRMInstance::renderSkin(), NL3D::CMeshInstance::renderSkin(), traverseAnimDetail(), and NL3D::CSkeletonModel::updateSkinRenderLists().

00203 {return Visibility;}

const CMatrix& NL3D::CTransform::getWorldMatrix  )  const [inline, inherited]
 

Get the worldMatrix that is computed at last Hrc pass

Definition at line 299 of file transform.h.

Referenced by NL3D::CMeshMRMGeom::activeInstance(), NL3D::CMeshGeom::activeInstance(), NL3D::CLightingManager::addDynamicLight(), NL3D::CCamera::buildCameraPyramid(), checkAgainstPyramid(), NL3D::CTransformShape::clip(), NL3D::CClipTrav::clipSkeletonShadowMaps(), NL3D::CWaterModel::computeClippedPoly(), NL3D::CSkeletonModel::computeDisplayLodCharacterPriority(), NL3D::CShadowMapManager::computeShadowDirection(), NL3D::CWaterModel::computeSimpleClippedPoly(), NL3D::CMeshInstance::computeWorldBBoxForShadow(), doAnimate(), NL3D::CWaterModel::doSimpleRender(), NL3D::CTargetAnimCtrl::execute(), NL3D::CSkeletonModel::generateShadowMap(), NL3D::CMeshInstance::generateShadowMap(), NL3D::CTransformShape::getLightHotSpotInWorld(), NL3D::CTransform::getReceiverRenderWorldMatrix(), NL3D::CLightingManager::insertStaticLightedModel(), NL3D::CQuadGridClipManager::linkModel(), NL3D::CParticleSystemManager::processAnimate(), refreshRscDeletion(), NL3D::CParticleSystemShape::render(), NL3D::CMeshMRMSkinnedGeom::render(), NL3D::CMeshMRMGeom::render(), NL3D::CMeshGeom::render(), NL3D::CSkeletonModel::renderCLod(), NL3D::CSkeletonModel::renderIntoSkeletonShadowMap(), NL3D::CMeshInstance::renderIntoSkeletonShadowMap(), NL3D::CMeshMultiLod::renderMeshGeom(), NL3D::CShadowMapManager::renderProject(), NL3D::CMeshMRMGeom::renderSkin(), NL3D::CMeshGeom::renderSkin(), NL3D::CSkeletonModel::renderSkins(), NL3D::CSegRemanence::samplePos(), NL3D::CShadowMapManager::selectShadowMapsToGenerate(), NL3D::CMeshVPWindTree::setupPerInstanceConstants(), NL3D::CRenderTrav::traverse(), NL3D::CClipTrav::traverse(), NL3D::CWaveMakerModel::traverseAnimDetail(), NL3D::CSkeletonModel::traverseAnimDetail(), traverseClip(), NL3D::CTransform::traverseLight(), NL3D::CPointLightModel::traverseLight(), NL3D::CTransformShape::traverseLoadBalancingPass0(), NL3D::CWaterModel::traverseRender(), NL3D::CFlareModel::traverseRender(), and NL3D::CWaterModel::updateDiffuseMapMatrix().

00299 {return _WorldMatrix;}

bool NL3D::CParticleSystemModel::hasActiveEmitters  )  const
 

Definition at line 1048 of file particle_system_model.cpp.

References _EmitterActive, _ParticleSystem, and nlassert.

01049 {
01050         #ifdef NL_DEBUG
01051                 if (_ParticleSystem)
01052                 {
01053                         if (_ParticleSystem->hasEmittersTemplates())
01054                         {                       
01055                                 nlassert(_ParticleSystem->hasActiveEmitters() == _EmitterActive);
01056                         }
01057                 }
01058         #endif
01059         return _EmitterActive;
01060 }

void NL3D::CTransform::heritVisibility  )  [inherited]
 

herit the visibility from his father. (default behavior).

Definition at line 287 of file transform.cpp.

References NL3D::CTransform::_FatherSkeletonModel, NL3D::CTransform::_TransformDirty, NL3D::CSkeletonModel::dirtSkinRenderLists(), NL3D::CTransform::isSkinned(), nlassert, and NL3D::CTransform::Visibility.

Referenced by NL3D::CTransformUser::heritVisibility().

00288 {
00289         // Optim: do nothing if already set
00290         if(Visibility!= CHrcTrav::Herit)
00291         {
00292                 _TransformDirty= true;
00293                 Visibility= CHrcTrav::Herit;
00294                 // If skinned, then must inform skeleton parent that it must recompute skin render/animDetail lists
00295                 if(isSkinned())
00296                 {
00297                         nlassert(_FatherSkeletonModel);
00298                         _FatherSkeletonModel->dirtSkinRenderLists();
00299                 }
00300         }
00301 }

void NL3D::CTransform::hide  )  [inherited]
 

Hide the object and his sons.

Definition at line 223 of file transform.cpp.

References NL3D::CTransform::_FatherSkeletonModel, NL3D::CTransform::_TransformDirty, NL3D::CSkeletonModel::dirtSkinRenderLists(), NL3D::CTransform::isSkinned(), nlassert, and NL3D::CTransform::Visibility.

Referenced by NL3D::CTransformUser::hide(), NL3D::CLandscapeUser::hide(), NL3D::CPSMesh::newElement(), and NL3D::CPSMesh::updatePos().

00224 {
00225         // Optim: do nothing if already set
00226         if(Visibility!= CHrcTrav::Hide)
00227         {
00228                 _TransformDirty= true;
00229                 Visibility= CHrcTrav::Hide;
00230                 // If skinned, then must inform skeleton parent that it must recompute skin render/animDetail lists
00231                 if(isSkinned())
00232                 {
00233                         nlassert(_FatherSkeletonModel);
00234                         _FatherSkeletonModel->dirtSkinRenderLists();
00235                 }
00236         }
00237 }

CTransform * NL3D::CTransform::hrcGetChild uint  index  )  const [inherited]
 

Definition at line 1202 of file transform.cpp.

References NL3D::CTransform::_HrcSons, index, nlassert, NL3D::CFastPtrList< CTransform >::size(), and uint.

Referenced by NL3D::CTransform::traverseHrc(), NL3D::CRootModel::traverseHrc(), NL3D::CAnimDetailTrav::traverseHrcRecurs(), and NL3D::CTransform::~CTransform().

01203 {
01204         nlassert(index < _HrcSons.size());
01205         return (const_cast<CTransform*>(this))->_HrcSons.begin()[index];
01206 }

uint NL3D::CTransform::hrcGetNumChildren  )  const [inline, inherited]
 

Definition at line 220 of file transform.h.

References NL3D::CTransform::_HrcSons, NL3D::CFastPtrList< CTransform >::size(), and uint.

Referenced by NL3D::CTransform::traverseHrc(), NL3D::CRootModel::traverseHrc(), NL3D::CAnimDetailTrav::traverseHrcRecurs(), and NL3D::CTransform::~CTransform().

00220 {return _HrcSons.size();}

CTransform* NL3D::CTransform::hrcGetParent  )  const [inline, inherited]
 

Definition at line 218 of file transform.h.

References NL3D::CTransform::_HrcParent.

Referenced by NL3D::CMeshBaseInstance::traverseHrc(), and NL3D::CTransform::updateWorldMatrixFromFather().

00218 {return _HrcParent;}

void NL3D::CTransform::hrcLinkSon CTransform son  )  [inherited]
 

link son to this in Hierarchy traversal NB: link does nothing if the son node is HRC frozen

Definition at line 1151 of file transform.cpp.

References NL3D::CTransform::_FreezeHRCState, NL3D::CTransform::_HrcNode, NL3D::CTransform::_HrcParent, NL3D::CTransform::_HrcParentUnfreeze, NL3D::CTransform::_HrcSons, NL3D::CTransform::_WorldDate, NL3D::CTransform::hrcUnlink(), and NL3D::CFastPtrList< CTransform >::insert().

Referenced by NL3D::CInstanceGroup::addToSceneWhenAllShapesLoaded(), NL3D::CScene::createModel(), NL3D::CSkeletonModel::detachSkeletonSon(), NL3D::CInstanceGroup::linkRoot(), NL3D::CTransform::setForceClipRoot(), NL3D::CSkeletonModel::stickObjectEx(), and NL3D::CTransform::unfreezeHRC().

01152 {
01153         if(!son)
01154                 return;
01155 
01156         // If not unfrozen, can't link
01157         if (son->_FreezeHRCState != CTransform::FreezeHRCStateDisabled)
01158                 return;
01159 
01160         // no-op if already me.
01161         if(son->_HrcParent==this)
01162                 return;
01163 
01164         // unlink from anyone
01165         son->hrcUnlink();
01166 
01167         // link son to me
01168         _HrcSons.insert(son, &son->_HrcNode);
01169         
01170         // link me to son
01171         son->_HrcParent= this;
01172         
01173         // Backup parent
01174         son->_HrcParentUnfreeze= this;
01175         
01176         // my son should recompute his worldMatrix!
01177         son->_WorldDate= -1;
01178 }

void NL3D::CTransform::hrcUnlink  )  [inherited]
 

unlink this from any Father in Hrc. No-op if no parent NB: unlink does nothing if the node is HRC frozen

Definition at line 1181 of file transform.cpp.

References NL3D::CTransform::_HrcNode, NL3D::CTransform::_HrcParent, NL3D::CTransform::_HrcParentUnfreeze, NL3D::CTransform::_WorldDate, NL3D::CTransform::ForceClipRoot, NL3D::CTransform::getStateFlag(), nlassert, and NL3D::CFastPtrListNode::unlink().

Referenced by NL3D::CSkeletonModel::bindSkin(), NL3D::CTransform::hrcLinkSon(), NL3D::CScene::initDefaultRoots(), NL3D::CScene::initQuadGridClipManager(), NL3D::CTransform::setForceClipRoot(), NL3D::CTransform::update(), and NL3D::CTransform::~CTransform().

01182 {
01183         // no-op if already NULL
01184         if(_HrcParent==NULL)
01185                 return;
01186 
01187         // if ForceClipRoot flag is set, then the fx can't be linked elsewhere in the hierarchy
01188         nlassert(!getStateFlag(ForceClipRoot));
01189 
01190         // unlink my parent from me.
01191         _HrcNode.unlink();
01192 
01193         // unlink me from parent
01194         _HrcParent= NULL;
01195         _HrcParentUnfreeze= NULL;
01196 
01197         // I should recompute my worldMatrix (well not usefull since not linked, but still do it...)
01198         _WorldDate= -1;
01199 }

void NL3D::CTransform::initModel  )  [virtual, inherited]
 

Extra init for a model. this method is called by the framework at the very end of CScene::createModel() Warning! if the model is a CTransformShape, then when initModel() is called, Shape and other related member/setup of IShape::createInstance() are not yet done (because createModel() is called at the begining in createInstance()).

Because initModel() is called at the very end, deriver could implement anything like creating other models, but not deleting this model...

Default behavior is to do nothing.

Reimplemented in NL3D::CLandscapeModel, NL3D::CPointLightModel, and NL3D::CSkeletonModel.

Definition at line 214 of file transform.cpp.

References NL3D::CTransform::_LoadBalancingGroup, NL3D::CLoadBalancingTrav::getDefaultGroup(), NL3D::CScene::getLoadBalancingTrav(), and NL3D::CTransform::getOwnerScene().

Referenced by NL3D::CScene::createModel().

00215 {
00216         // assign me to the default group
00217         _LoadBalancingGroup= getOwnerScene()->getLoadBalancingTrav().getDefaultGroup();
00218 }

void NL3D::CParticleSystemModel::insertInVisibleList  )  [inline, private]
 

Definition at line 315 of file particle_system_model.h.

References _InsertedInVisibleList, NL3D::CLoadBalancingTrav::addVisibleModel(), NL3D::CAnimDetailTrav::addVisibleModel(), NL3D::CClipTrav::addVisibleModel(), NL3D::CScene::getAnimDetailTrav(), NL3D::CScene::getClipTrav(), NL3D::CScene::getLoadBalancingTrav(), and NL3D::CTransform::getOwnerScene().

Referenced by traverseClip().

00316         {               
00317                 // if not already not inserted
00318                 if (!_InsertedInVisibleList)
00319                 {
00320                         _Visible = true;
00321                         _InsertedInVisibleList = true;
00322                         // add to clip/anim/load Trav.
00323                         getOwnerScene()->getClipTrav().addVisibleModel(this);
00324                         // NB: no need to test isAnimDetailable()... for PS, always add them
00325                         getOwnerScene()->getAnimDetailTrav().addVisibleModel(this);
00326                         getOwnerScene()->getLoadBalancingTrav().addVisibleModel(this);
00327                 }
00328         }

void NL3D::CParticleSystemModel::invalidateAutoAnimatedHandle  )  [private]
 

Definition at line 1034 of file particle_system_model.cpp.

References _AnimatedModelHandle, and NL3D::CParticleSystemManager::TAlwaysAnimatedModelHandle::Valid.

Referenced by NL3D::CParticleSystemManager::processAnimate().

01035 {
01036         _AnimatedModelHandle.Valid  = false;
01037 }

uint32 NL3D::CTransform::isAnimDetailable  )  const [inline, inherited]
 

non-zero if the model is animDetailable (ie added to the animDetail list if visible)

Definition at line 440 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsAnimDetailable, and uint32.

Referenced by NL3D::CClipTrav::clipSkeletonShadowMaps(), NL3D::CTransform::traverseClip(), and NL3D::CSkeletonModel::updateSkinRenderLists().

00440 {return getStateFlag(IsAnimDetailable);}

bool NL3D::CParticleSystemModel::isAutoGetEllapsedTimeEnabled void   )  const [inline]
 

tells wether the model will querry himself for the ellapsed time

Definition at line 157 of file particle_system_model.h.

References _AutoGetEllapsedTime.

Referenced by doAnimate().

00158                 { 
00159                         return _AutoGetEllapsedTime; 
00160                 }

uint32 NL3D::CTransform::isBigLightable  )  const [inline, inherited]
 

non-zero if the lighting Manager must take into account the bbox of the transform. Default behavior is false. Deriver must call setIsBigLightable() at initialisation to change it.

Definition at line 365 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsBigLightable, and uint32.

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

00365 {return getStateFlag(IsBigLightable);}

bool NL3D::CTransform::isClipVisible  )  const [inline, inherited]
 

tells if the transform has been clipped in the clip traversal.

Definition at line 313 of file transform.h.

References NL3D::CTransform::_Visible.

Referenced by NL3D::CClipTrav::clipSkeletonShadowMaps(), NL3D::CSkeletonModel::computeDisplayLodCharacterPriority(), NL3D::CSkeletonModel::computeRenderedBBox(), NL3D::CTransformUser::getLastClippedState(), NL3D::CSkeletonModel::isBoneComputed(), NL3D::CParticleSystemManager::processAnimate(), NL3D::CTransform::traverseClip(), traverseClip(), and NL3D::CPointLightModel::traverseLight().

00314         {
00315                 return _Visible;
00316         }

uint32 NL3D::CTransform::isCluster  )  const [inline, inherited]
 

non-zero if the CTransform can be casted to a CCluster

Definition at line 451 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsCluster, and uint32.

Referenced by NL3D::CClipTrav::traverse().

00451 {return getStateFlag(IsCluster);}

bool NL3D::CTransform::isGeneratingShadowMap  )  const [inline, inherited]
 

true if the instance cast shadow. By default false

Definition at line 515 of file transform.h.

References NL3D::CTransform::getStateFlag(), and NL3D::CTransform::IsGeneratingShadowMap.

Referenced by NL3D::CClipTrav::clipSkeletonShadowMaps(), and NL3D::CSkeletonModel::traverseAnimDetail().

00515 {return getStateFlag(IsGeneratingShadowMap)!=0;}

bool NL3D::CParticleSystemModel::isGlobalUserParamValueBypassed uint  userParamIndex  )  const
 

for now, we have 4 animatables value in a system

Definition at line 1018 of file particle_system_model.cpp.

References NL3D::MaxPSUserParam, nlassert, nlctassert, and uint.

01019 {
01020         nlctassert(MaxPSUserParam < 8); // there should be less than 8 parameters because of mask stored in a byte
01021         nlassert(userParamIndex < MaxPSUserParam);
01022         return (_BypassGlobalUserParam & (1 << userParamIndex)) != 0;
01023 }

bool NL3D::CTransform::isHrcVisible  )  const [inline, inherited]
 

tells if the transform has been determined as visible in the hrc traversal

Reimplemented in NL3D::CPointLightModel.

Definition at line 306 of file transform.h.

References NL3D::CTransform::_WorldVis.

Referenced by NL3D::CClipTrav::clipSkeletonShadowMaps(), NL3D::CSkeletonModel::computeWorldBBoxForShadow(), NL3D::CMeshInstance::computeWorldBBoxForShadow(), NL3D::CTransformUser::getLastWorldVisState(), NL3D::CSkeletonModel::renderIntoSkeletonShadowMap(), NL3D::CMeshInstance::renderIntoSkeletonShadowMap(), and NL3D::CSkeletonModel::traverseAnimDetail().

00307         {
00308                 return _WorldVis;
00309         }

bool NL3D::CParticleSystemModel::isInvalid void   )  const [inline]
 

test wether the system has become invalid. The condition for a system to be invalid are encoded in the system itself (no more particles for example). When a system has become invalid, you may want to remove it most of the time

Definition at line 114 of file particle_system_model.h.

00114 { return _Invalidated; }

uint32 NL3D::CTransform::isLightable  )  const [inline, inherited]
 

true if the model can be lighted (such as CMeshBaseInstance) Default behavior is false. Deriver must use setIsLightable(true) method if the instance can be lighted.

Returns:
0 if getUserLightable() is false, or if the model can't be lighted at all. else return a non-zero value

Definition at line 337 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsFinalLightable, and uint32.

Referenced by NL3D::CClipTrav::clipSkeletonShadowMaps(), NL3D::CTransform::traverseClip(), NL3D::CTransformShape::traverseRender(), NL3D::CTransform::unfreezeHRC(), NL3D::CTransform::update(), and NL3D::CTransform::updateWorld().

00337 {return getStateFlag(IsFinalLightable);}

bool NL3D::CTransformShape::isLinkToQuadCluster  )  const [inline, inherited]
 

true if the model is linked to a quadCluster

Definition at line 141 of file transform_shape.h.

References NL3D::CTransformShape::_QuadClusterListNode, and NL3D::CFastPtrListNode::isLinked().

00141 {return _QuadClusterListNode.isLinked();}

uint32 NL3D::CTransform::isLoadBalancable  )  const [inline, inherited]
 

non-zero if the model is loadBalancable (ie added to the loadBalancing list if visible)

Definition at line 442 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsLoadBalancable, and uint32.

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

00442 {return getStateFlag(IsLoadBalancable);}

uint32 NL3D::CTransform::isMeshBaseInstance  )  const [inline, inherited]
 

non-zero if the CTransform can be casted to a CMeshBaseInstance

Definition at line 447 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsMeshBaseInstance, and uint32.

Referenced by NL3D::CInstanceUser::enableAsyncTextureMode(), NL3D::CInstanceUser::getAsyncTextureDistance(), NL3D::CInstanceUser::getAsyncTextureMode(), NL3D::CInstanceUser::isAsyncTextureDirty(), NL3D::CInstanceUser::isAsyncTextureReady(), NL3D::CInstanceUser::setAsyncTextureDirty(), NL3D::CInstanceUser::setAsyncTextureDistance(), and NL3D::CInstanceUser::startAsyncTextureLoading().

00447 {return getStateFlag(IsMeshBaseInstance);}

uint32 NL3D::CTransform::isNeedUpdateFrozenStaticLightSetup  )  const [inline, protected, inherited]
 

non-zero if the object has a FrozenStaticLightSetup not correclty updated.

Definition at line 631 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsNeedUpdateFrozenStaticLightSetup, and uint32.

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

00631 {return getStateFlag(IsNeedUpdateFrozenStaticLightSetup);}

uint32 NL3D::CTransform::isNeedUpdateLighting  )  const [inline, protected, inherited]
 

non-zero if the object needs to updatelighting.

Definition at line 629 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsNeedUpdateLighting, and uint32.

Referenced by NL3D::CTransform::resetLighting(), and NL3D::CTransform::traverseLight().

00629 {return getStateFlag(IsNeedUpdateLighting);}

uint32 NL3D::CTransform::isOpaque  )  [inline, inherited]
 

Definition at line 173 of file transform.h.

References NL3D::CTransform::getStateFlag(), and uint32.

Referenced by NL3D::CTransformUser::isOpaque(), NL3D::CRenderTrav::traverse(), and NL3D::CSkeletonModel::updateSkinRenderLists().

00173 { return getStateFlag(IsOpaque); }

bool NL3D::CParticleSystemModel::isPSModelObserver IPSModelObserver obs  ) 
 

=====================================================================================

Definition at line 182 of file particle_system_model.cpp.

Referenced by registerPSModelObserver(), and removePSModelObserver().

00183 {
00184         return std::find(_Observers.begin(), _Observers.end(), obs) != _Observers.end();
00185 }

uint32 NL3D::CTransform::isQuadGridClipEnabled  )  const [inline, inherited]
 

special feature for CQuadGridClipManager. return a non-zero value if true

Definition at line 294 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::QuadGridClipEnabled, and uint32.

Referenced by NL3D::CClipTrav::traverse().

00294 {return getStateFlag(QuadGridClipEnabled);}

uint32 NL3D::CTransform::isRenderable  )  const [inline, inherited]
 

non-zero if the model is renderable (ie something may appear on screen)

Definition at line 444 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsRenderable, and uint32.

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

00444 {return getStateFlag(IsRenderable);}

uint32 NL3D::CTransform::isSkeleton  )  const [inline, inherited]
 

return non-zero if I am a skeleton. if yes, static_cast<CSkeletonModel*> may be used

Definition at line 421 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsSkeleton, and uint32.

Referenced by NL3D::CSkeletonModel::forceComputeBone(), and NL3D::CAnimDetailTrav::traverse().

00421 {return getStateFlag(IsSkeleton);}

virtual bool NL3D::CTransform::isSkinnable  )  const [inline, protected, virtual, inherited]
 

Deriver must change this method if the model can be skinned. called rarely.

Reimplemented in NL3D::CMeshInstance, NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 567 of file transform.h.

Referenced by NL3D::CSkeletonModel::bindSkin().

00567 {return false;}

uint32 NL3D::CTransform::isSkinned  )  const [inline, inherited]
 

non-zero if the model is skinned onto a skeleton.

Definition at line 423 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsSkinned, and uint32.

Referenced by NL3D::CSkeletonModel::detachSkeletonSon(), NL3D::CTransform::heritVisibility(), NL3D::CTransform::hide(), NL3D::CTransform::registerToChannelMixer(), NL3D::CMeshMRMSkinnedGeom::render(), NL3D::CMeshMRMGeom::render(), NL3D::CMeshGeom::render(), NL3D::CMeshMRMGeom::renderSkin(), NL3D::CMeshGeom::renderSkin(), NL3D::CMeshMRMSkinnedGeom::renderSkinGroupGeom(), NL3D::CMeshMRMGeom::renderSkinGroupGeom(), NL3D::CTransform::setIsForceAnimDetail(), NL3D::CTransform::setOpacity(), NL3D::CTransform::setTransparency(), NL3D::CTransform::show(), NL3D::CTransform::updateWorldMatrixFromFather(), and NL3D::CTransform::~CTransform().

00423 {return getStateFlag(IsSkinned);}

virtual bool NL3D::CTransformShape::isStarted  )  const [inline, virtual, inherited]
 

Reimplemented in NL3D::CSegRemanence.

Definition at line 132 of file transform_shape.h.

Referenced by NL3D::CInstanceUser::isStarted().

00132 { return false; }

bool NL3D::CParticleSystemModel::isToolDisplayEnabled void   )  const [inline]
 

activate the display of tool (for edition purpose)

Definition at line 179 of file particle_system_model.h.

References _ToolDisplayEnabled.

Referenced by NL3D::CParticleSystemShape::render().

00180                 { 
00181                         return _ToolDisplayEnabled; 
00182                 }                       

uint32 NL3D::IAnimatable::isTouched uint  valueId  )  const [inline, inherited]
 

Return non 0 int if the value as been touched else 0.

Parameters:
valueId is the animated value ID in the object we want to test the touch flag. or it may be an OwnerBit.

Definition at line 184 of file animatable.h.

References NL3D::IAnimatable::_BitSet, uint, and uint32.

Referenced by doAnimate(), NL3D::ITransformable::needCompute(), NL3D::IAnimatable::propagateTouch(), and NL3D::CAnimatedMaterial::update().

00185         {
00186                 return _BitSet&(1<<valueId);
00187         }

uint32 NL3D::CTransform::isTransformShape  )  const [inline, inherited]
 

non-zero if the CTransform can be casted to a CTransformShape

Definition at line 449 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsTransformShape, and uint32.

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

00449 {return getStateFlag(IsTransformShape);}

uint32 NL3D::CTransform::isTransparent  )  [inline, inherited]
 

Definition at line 174 of file transform.h.

References NL3D::CTransform::getStateFlag(), and uint32.

Referenced by NL3D::CTransformUser::isTransparent(), NL3D::CRenderTrav::traverse(), and NL3D::CSkeletonModel::updateSkinRenderLists().

00174 { return getStateFlag(IsTransparent); }

void NL3D::ITransformable::lookAt const CVector eye,
const CVector target,
float  roll = 0.f
[inherited]
 

Setup Matrix by the lookAt method. Work only in DirectMatrix mode and RotQuat mode (not euler...).

Parameters:
eye is the coordinate of the object.
target is the point the object look at.
roll is the roll angle in radian along the object's Y axis.

Definition at line 169 of file transformable.cpp.

References NL3D::ITransformable::DirectMatrix, NLMISC::CMatrix::getPos(), NLMISC::CMatrix::getRot(), NLMISC::CMatrix::identity(), nlassert, NLMISC::CVector::normalize(), NLMISC::CMatrix::rotateY(), NL3D::ITransformable::RotQuat, NL3D::ITransformable::setMatrix(), NL3D::ITransformable::setPivot(), NL3D::ITransformable::setPos(), NLMISC::CMatrix::setPos(), NLMISC::CMatrix::setRot(), NL3D::ITransformable::setRotQuat(), and NL3D::ITransformable::setScale().

Referenced by NL3D::CTransformableUser::lookAt(), and NL3D::CCamera::update().

00170 {
00171         nlassert(_Mode==RotQuat || _Mode==DirectMatrix);
00172 
00173         // Roll matrix
00174         CMatrix rollMT;
00175         rollMT.identity();
00176         if (roll!=0.f)
00177                 rollMT.rotateY (roll);
00178 
00179         // Make the target base
00180         CVector j=target;
00181         j-=eye;
00182         j.normalize();
00183         CVector i=j^CVector (0,0,1.f);
00184         CVector k=i^j;
00185         k.normalize();
00186         i=j^k;
00187         i.normalize();
00188 
00189         // Make the target matrix
00190         CMatrix targetMT;
00191         targetMT.identity();
00192         targetMT.setRot (i, j, k);
00193         targetMT.setPos (eye);
00194 
00195         // Compose matrix
00196         targetMT*=rollMT;
00197 
00198         // Set the matrix
00199         if(_Mode==DirectMatrix)
00200                 setMatrix (targetMT);
00201         else
00202         {
00203                 // transfrom to quaternion mode.
00204                 setScale(CVector(1,1,1));
00205                 setPivot(CVector::Null);
00206                 setPos(targetMT.getPos());
00207                 setRotQuat(targetMT.getRot());
00208         }
00209 }

uint32 NL3D::CTransform::modelCanCastShadowMap  )  const [inline, inherited]
 

true if the model provide a method to support shadowMap generation

Definition at line 480 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsShadowMapCaster, and uint32.

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

00480 {return getStateFlag(IsShadowMapCaster);}

uint32 NL3D::CTransform::modelCanReceiveShadowMap  )  const [inline, inherited]
 

true if the model provide a method to support shadowMap receiving

Definition at line 482 of file transform.h.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsShadowMapReceiver, and uint32.

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

00482 {return getStateFlag(IsShadowMapReceiver);}

void NL3D::CTransformShape::profileRender  )  [virtual, inherited]
 

Called at RenderTrav to profile current render. no-op per default.

Reimplemented from NL3D::CTransform.

Definition at line 248 of file transform_shape.cpp.

References NL3D::CTransform::getOwnerScene(), NL3D::CScene::getRenderTrav(), NL3D::CRenderTrav::isCurrentPassOpaque(), and NL3D::CTransformShape::Shape.

00249 {
00250         // profile the shape.
00251         if(Shape)
00252         {
00253                 CRenderTrav                     &rdrTrav= getOwnerScene()->getRenderTrav();
00254                 bool                            currentPassOpaque= rdrTrav.isCurrentPassOpaque();
00255 
00256                 Shape->profileSceneRender( &rdrTrav, this, currentPassOpaque );
00257         }
00258 }

void NL3D::CParticleSystemModel::reallocRsc  )  [private]
 

Called when the resource (attached system) for this system must be reallocated.

===================================================================================== Called when the resource (attached system) for this system must be reallocated

Definition at line 249 of file particle_system_model.cpp.

References _AnimatedModelHandle, _EmitterActive, _ModelHandle, _ParticleSystem, NL3D::CParticleSystemManager::addPermanentlyAnimatedSystem(), NL3D::CParticleSystemManager::addSystemModel(), NL3D::CScene::getParticleSystemManager(), NL3D::CParticleSystemShape::instanciatePS(), NL3D::CParticleSystemShape::isShared(), NL3D::MaxPSUserParam, nlassert, NL3D::IAnimatable::touch(), and uint.

Referenced by forceInstanciate(), setEditionMode(), and traverseAnimDetail().

00250 {
00251         //MINI_TIMER(PSStatsReallocRsc)
00252         nlassert(_ParticleSystem == NULL);
00253         #ifdef PS_FAST_ALLOC
00254                 CParticleSystemShape            *shape = NLMISC::safe_cast<CParticleSystemShape *>((IShape *) Shape);
00255                 if (shape->isShared())
00256                 {
00257                         // there's a single CparticleSystemInstance even if there are several models
00258                         _ParticleSystem = shape->instanciatePS(*_Scene, &shape->Allocator);
00259                 }
00260                 else
00261                 {                       
00262                         _ParticleSystem = shape->instanciatePS(*_Scene, &_Allocator);
00263                 }               
00264         #else
00265                 _ParticleSystem = NLMISC::safe_cast<CParticleSystemShape *>((IShape *) Shape)->instanciatePS(*_Scene);
00266         #endif
00267         nlassert(_ParticleSystem);
00268         nlassert(_Scene);
00269         CParticleSystemManager &psmgt = _Scene->getParticleSystemManager();
00270         _ModelHandle = psmgt.addSystemModel(this);
00271         _AnimType = _ParticleSystem->getAnimType();
00272         if (_ParticleSystem->getAnimType() == CParticleSystem::AnimAlways)
00273         {
00274                 _AnimatedModelHandle = psmgt.addPermanentlyAnimatedSystem(this);
00275         }
00276         // touch user params animated value. If the system rsc have been released before, this force to restore them
00277         for (uint k = 0; k < MaxPSUserParam; ++k)
00278         {               
00279                 touch((uint)CParticleSystemModel::PSParam0 + k, OwnerBit);
00280         }
00281         _ParticleSystem->setUserColor(_UserColor);
00282         //
00283         if (!_EmitterActive) _ParticleSystem->activateEmitters(false);
00284         //
00285         if (_ZBias != 0.f) _ParticleSystem->setZBias(_ZBias);
00286 }

virtual void NL3D::CTransform::receiveShadowMap CShadowMap shadowMap,
const CVector casterPos,
const CMaterial shadowMat
[inline, virtual, inherited]
 

For receivers. Modulate the Object with a ShadowMap. The model shoud render in the scene driver a version of its geometry simplified, and modulate the background with shadowColor.

Parameters:
casterPos the world position of the caster model.
shadowMat a correclty setuped material with good ShadowColor, ready to be rendered.

Reimplemented in NL3D::CLandscapeModel.

Definition at line 506 of file transform.h.

Referenced by NL3D::CShadowMapManager::renderProject().

00506 {}

void NL3D::CParticleSystemModel::refreshRscDeletion const std::vector< CPlane > &  worldFrustumPyramid,
const NLMISC::CVector viewerPos
[private]
 

=====================================================================================

test if not too far

frustum test

Here we test wether the system has not gone out of scope. Why do we test this here addtionnaly to the clip traversal ? Simply because the clip traversal is not called if the cluster it is inserted in is not parsed. This is not good, because we want to keep few CParticleSystem instance. This method solve that problem. This is called by the particle system manager when each scene has rendered

Definition at line 328 of file particle_system_model.cpp.

References NL3D::CParticleSystemShape::_DestroyModelWhenOutOfRange, NL3D::CParticleSystemShape::_DestroyWhenOutOfFrustum, _EditionMode, NL3D::CParticleSystemShape::_MaxViewDist, _ParticleSystem, checkAgainstPyramid(), NLMISC::CMatrix::getPos(), NL3D::CTransform::getWorldMatrix(), MINI_TIMER, nlassert, NL3D::PSStatsRefreshRscDeletion, releasePSPointer(), and v.

00329 {
00330         MINI_TIMER(PSStatsRefreshRscDeletion)
00331         if (_EditionMode) return;
00340         nlassert(_ParticleSystem);      
00341         CParticleSystemShape            *shape = NLMISC::safe_cast<CParticleSystemShape *>((IShape *) Shape);
00342         
00343         /* NLMISC::CVector sysPos = getTransformMode() == DirectMatrix ?
00344                                                          getMatrix().getPos()                       :
00345                                                          getPos(); */
00346 
00347         NLMISC::CVector sysPos = getWorldMatrix().getPos();
00348         
00349         NLMISC::CVector v = sysPos - viewerPos;
00351         const float dist2 = v * v;
00352         
00353         if (dist2 > shape->_MaxViewDist * shape->_MaxViewDist) // too far ?
00354         {                               
00355                 releasePSPointer();
00356                 if (shape->_DestroyModelWhenOutOfRange)
00357                 {                       
00358                         _Invalidated = true;
00359                 }               
00360                 return;
00361         }
00362 
00364         if (shape->_DestroyWhenOutOfFrustum)
00365         {
00366                 if (checkAgainstPyramid(worldFrustumPyramid) == false)
00367                 {                       
00368                         if (shape->_DestroyModelWhenOutOfRange)
00369                         {                                                       
00370                                 _Invalidated = true;
00371                         }
00372                         releasePSPointer();
00373                         return;
00374                 }
00375         }
00376 
00377         return;
00378 }               

void NL3D::CParticleSystemModel::registerBasic  )  [static]
 

=====================================================================================

Reimplemented from NL3D::CTransformShape.

Definition at line 189 of file particle_system_model.cpp.

References NL3D::ParticleSystemModelId, and NL3D::TransformShapeId.

00190 {
00191         // register the model
00192         CScene::registerModel(ParticleSystemModelId, TransformShapeId, CParticleSystemModel::creator);  
00193 }

void NL3D::CParticleSystemModel::registerPSModelObserver IPSModelObserver obs  ) 
 

=====================================================================================

Definition at line 164 of file particle_system_model.cpp.

References isPSModelObserver(), MINI_TIMER, nlassert, and NL3D::PSStatsRegisterPSModelObserver.

00165 {
00166         MINI_TIMER(PSStatsRegisterPSModelObserver)
00167         nlassert(!isPSModelObserver(obs)); // this observer has already been registered
00168         _Observers.push_back(obs);
00169 }

void NL3D::CParticleSystemModel::registerToChannelMixer CChannelMixer chanMixer,
const std::string &  prefix = ""
[virtual]
 

=====================================================================================

Reimplemented from NL3D::CTransform.

Definition at line 470 of file particle_system_model.cpp.

References NL3D::IAnimatable::addValue(), PSParam0, PSParam1, PSParam2, PSParam3, and PSTrigger.

00471 {
00472         CTransformShape::registerToChannelMixer(chanMixer, prefix);
00473         addValue(chanMixer, PSParam0, OwnerBit, prefix, true);
00474         addValue(chanMixer, PSParam1, OwnerBit, prefix, true);
00475         addValue(chanMixer, PSParam2, OwnerBit, prefix, true);
00476         addValue(chanMixer, PSParam3, OwnerBit, prefix, true);  
00477         addValue(chanMixer, PSTrigger, OwnerBit, prefix, true); 
00478 }

void NL3D::CParticleSystemModel::releasePSPointer  )  [private]
 

=====================================================================================

Definition at line 289 of file particle_system_model.cpp.

References _AnimatedModelHandle, _ModelHandle, _ParticleSystem, NLMISC::CSmartPtr< CParticleSystem >::getNbRef(), NL3D::CScene::getParticleSystemManager(), NL3D::CParticleSystemShape::isShared(), NL3D::MaxPSUserParam, MINI_TIMER, nlassert, NL3D::PSStatsReleasePSPointer, NL3D::CParticleSystemManager::removePermanentlyAnimatedSystem(), NL3D::CParticleSystemManager::removeSystemModel(), sint, uint, NL3D::CParticleSystemManager::TAlwaysAnimatedModelHandle::Valid, and NL3D::CAnimatedValueBlendable< float >::Value.

Referenced by refreshRscDeletion(), releaseRsc(), and releaseRscAndInvalidate().

00290 {       
00291         MINI_TIMER(PSStatsReleasePSPointer)
00292         nlassert(_ParticleSystem != NULL);
00293         sint numRefs = _ParticleSystem.getNbRef();
00294         if (numRefs == 1)
00295         {       
00296                 // Backup user params (in animated value) so that they will be restored when the system is recreated
00297                 for (uint k = 0; k < MaxPSUserParam; ++k)
00298                 {
00299                         _UserParam[k].Value = _ParticleSystem->getUserParam(k);                                 
00300                 }
00301         }
00302         //
00303         nlassert(_Scene);
00304         _Scene->getParticleSystemManager().removeSystemModel(_ModelHandle);
00305         if (_ParticleSystem->getAnimType() == CParticleSystem::AnimAlways)
00306         {                       
00307                 if (_AnimatedModelHandle.Valid)
00308                 {                                       
00309                         _Scene->getParticleSystemManager().removePermanentlyAnimatedSystem(_AnimatedModelHandle);                       
00310                 }
00311         }
00312         //
00313         _ParticleSystem = NULL; // one less ref with the smart ptr 
00314         #ifdef PS_FAST_ALLOC
00315                 CParticleSystemShape            *shape = NLMISC::safe_cast<CParticleSystemShape *>((IShape *) Shape);                   
00316                 if (shape->isShared())
00317                 {               
00318                         if (numRefs == 1)
00319                         {
00320                                 // release allocator in the shape
00321                                 shape->Allocator.release();
00322                         }
00323                 }
00324         #endif
00325 }

void NL3D::CParticleSystemModel::releaseRsc  )  [private]
 

=====================================================================================

Definition at line 381 of file particle_system_model.cpp.

References _ParticleSystem, MINI_TIMER, NL3D::PSStatsReleaseRsc, and releasePSPointer().

Referenced by traverseAnimDetail(), and ~CParticleSystemModel().

00382 {
00383         MINI_TIMER(PSStatsReleaseRsc)
00384         if (!_ParticleSystem) return;   
00385         releasePSPointer();
00386 }

void NL3D::CParticleSystemModel::releaseRscAndInvalidate  )  [private]
 

=====================================================================================

Definition at line 389 of file particle_system_model.cpp.

References _ParticleSystem, NL3D::CParticleSystemShape::isShared(), MINI_TIMER, NL3D::PSStatsReleaseRscAndInvalidate, and releasePSPointer().

Referenced by checkDestroyCondition(), NL3D::CParticleSystemManager::processAnimate(), and traverseAnimDetail().

00390 {
00391         MINI_TIMER(PSStatsReleaseRscAndInvalidate)
00392         if (!_ParticleSystem) return;           
00393         releasePSPointer();
00394         _Invalidated = true;    
00395 
00396         static std::vector<IPSModelObserver *> copyVect;
00397         copyVect.resize(_Observers.size());
00398         std::copy(_Observers.begin(), _Observers.end(), copyVect.begin());
00399         
00400         for (std::vector<IPSModelObserver *>::iterator it = copyVect.begin(); it != copyVect.end(); ++it)
00401         {
00402                 (*it)->invalidPS(this); // if this crash, then you forgot to call removePSModelObserver !
00403         }
00404         #ifdef PS_FAST_ALLOC
00405                 CParticleSystemShape            *shape = NLMISC::safe_cast<CParticleSystemShape *>((IShape *) Shape);
00406                 if (!shape->isShared())
00407                 {               
00408                         _Allocator.release();
00409                 }
00410                 // else ..
00411                 // if system if shared, the allocator is placed in the shape, so no-op there            
00412         #endif
00413 }

void NL3D::CParticleSystemModel::removePSModelObserver IPSModelObserver obs  ) 
 

=====================================================================================

remove an observer

See also:
registerPSModelObserver

Definition at line 172 of file particle_system_model.cpp.

References isPSModelObserver(), MINI_TIMER, nlassert, and NL3D::PSStatsRemovePSModelObserver.

00173 {       
00174         MINI_TIMER(PSStatsRemovePSModelObserver);
00175         nlassert(isPSModelObserver(obs)); // the observer must have been registered
00176         std::vector<IPSModelObserver *>::iterator it = std::find(_Observers.begin(), _Observers.end(), obs);
00177         _Observers.erase(it);
00178 }

virtual void NL3D::CTransform::renderIntoSkeletonShadowMap CSkeletonModel rootSkeleton,
CMaterial castMat
[inline, virtual, inherited]
 

Special For Skeleton Caster. Render into the AuxDriver the mesh, within the current setuped Frustum/ViewMatrix. no-op by default, or if hidden in HRC!!

Parameters:
rootSkeleton the skeleton which is currently rendering its shadowMap

Reimplemented in NL3D::CMeshInstance, and NL3D::CSkeletonModel.

Definition at line 527 of file transform.h.

Referenced by NL3D::CSkeletonModel::renderIntoSkeletonShadowMap().

00527 {}

virtual sint NL3D::CTransform::renderShadowSkinGeom uint  remainingVertices,
uint8 vbDest
[inline, protected, virtual, inherited]
 

Deriver must change this method if isSkinnable(). It return a list of sphere relative to each bone of the father skeleton. Use with getSkinBoneUsage() to know to wich bone this sphere apply NB: if a sphere radius is -1, it means that the bone is not used (for any reason...) default is to return NULL.

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 612 of file transform.h.

References sint, uint, and uint8.

00612 {return 0;}

virtual void NL3D::CTransform::renderShadowSkinPrimitives CMaterial castMat,
IDriver drv,
uint  baseVertex
[inline, protected, virtual, inherited]
 

Deriver must change this method if isSkinnable(). It return a list of sphere relative to each bone of the father skeleton. Use with getSkinBoneUsage() to know to wich bone this sphere apply NB: if a sphere radius is -1, it means that the bone is not used (for any reason...) default is to return NULL.

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 613 of file transform.h.

References uint.

00613 {}

virtual void NL3D::CTransform::renderSkin float  alphaMRM  )  [inline, protected, virtual, inherited]
 

Deriver must change this method if isSkinnable(). It renders the skin with current ctx of the skeletonModel SkeletonModel has already setuped the Light and the modelMatrix in the driver. If the skin is a MRM, it is the skeleton which drives the MRM level with alphaMRM: [0,1] default is nop

Reimplemented in NL3D::CMeshInstance, NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 590 of file transform.h.

00590 {}

virtual sint NL3D::CTransform::renderSkinGroupGeom float  alphaMRM,
uint  remainingVertices,
uint8 dest
[inline, protected, virtual, inherited]
 

if supportSkinGrouping(), called to transform the VBuffer, and store it into dest.

Returns:
number of vertices added to the VBuffer, or -1 if > reaminingVertices

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 601 of file transform.h.

References sint, uint, and uint8.

00601 {return 0;}

virtual void NL3D::CTransform::renderSkinGroupPrimitives uint  baseVertex,
std::vector< CSkinSpecularRdrPass > &  specularRdrPasses,
uint  skinIndex
[inline, protected, virtual, inherited]
 

if supportSkinGrouping(), called to render the primitives of the already skinned vertices (VB activated in the driver) Optionnaly, fill specRdrPasses with specular rdrPass to sort (used for specular grouping).

Parameters:
baseVertex value to add to each PBlock index.

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 606 of file transform.h.

References uint.

00606 {}

virtual void NL3D::CTransform::renderSkinGroupSpecularRdrPass uint  rdrPass  )  [inline, protected, virtual, inherited]
 

Render a specific specular renderPass returned by renderSkinGroupPrimitives.

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 608 of file transform.h.

References uint.

00608 {}

void NL3D::CTransform::resetLighting  )  [inherited]
 

reset lights which influence this models. NB: the model is removed from all lights's list (except FrozenStaticLightSetup). Called by light rendering.

NB: the model is NOT removed from LightingManager (with eraseStaticLightedModel()).

Definition at line 988 of file transform.cpp.

References NL3D::CTransform::_LightContribution, NL3D::CLightContribution::FrozenStaticLightSetup, NL3D::CTransform::IsNeedUpdateLighting, NL3D::CTransform::isNeedUpdateLighting(), NL3D_MAX_LIGHT_CONTRIBUTION, NL3D::CLightContribution::NumFrozenStaticLight, NL3D::CLightContribution::PointLight, NL3D::CPointLight::removeLightedModel(), NL3D::CTransform::setStateFlag(), NL3D::CLightContribution::TransformIterator, and uint.

Referenced by NL3D::CLightingManager::addDynamicLight(), NL3D::CTransform::freezeStaticLightSetup(), NL3D::CPointLight::resetLightedModels(), NL3D::CTransform::unfreezeStaticLightSetup(), NL3D::CTransform::updateWorld(), and NL3D::CTransform::~CTransform().

00989 {
00990         // if the model is already isNeedUpdateLighting, his light setup is reseted.
00991         // so no need to reset again
00992         if(isNeedUpdateLighting())
00993                 return;
00994 
00995 
00996         // For all light not in FrozenStaticLightSetup, remove me from their list
00997         uint    startLight= 0;
00998         if(_LightContribution.FrozenStaticLightSetup)
00999         {
01000                 startLight= _LightContribution.NumFrozenStaticLight;
01001         }
01002 
01003         // for all light in the list, remove me from their list.
01004         for(uint i=startLight; i<NL3D_MAX_LIGHT_CONTRIBUTION; i++)
01005         {
01006                 CPointLight             *pl= _LightContribution.PointLight[i];
01007                 // if end of list, break.
01008                 if(!pl)
01009                         break;
01010                 else
01011                 {
01012                         // remove me from this light.
01013                         pl->removeLightedModel(_LightContribution.TransformIterator[i]);
01014                 }
01015         }
01016         // empty the list.
01017         if(startLight<NL3D_MAX_LIGHT_CONTRIBUTION)
01018                 _LightContribution.PointLight[startLight]= NULL;
01019 
01020 
01021         // the model needs to update his lighting.
01022         setStateFlag(IsNeedUpdateLighting, true);
01023         
01024 }

void NL3D::IAnimatable::resize uint  count  )  [inline, inherited]
 

Change value count, bit are set to 0

Parameters:
count is the new value count.

Definition at line 195 of file animatable.h.

References count, nlassert, and uint.

00196         {
00197                 // with the "uint32 _BitSet" implementation, juste check the size is correct
00198                 nlassert(count<=32);
00199         }

void NL3D::CTransform::setApplySkin bool  state  )  [protected, virtual, inherited]
 

Deriver must change this method if isSkinnable(). called by CSkeletonModel::bindSkin() NB: _FatherSkeletonModel is valid when setApplySkin() is called The default behavior must be called: it sets the flag so isSkinned() return the good thing

Reimplemented in NL3D::CMeshInstance, NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 584 of file transform.cpp.

References NL3D::CTransform::IsSkinned, and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CSkeletonModel::bindSkin(), and NL3D::CSkeletonModel::detachSkeletonSon().

00585 {
00586         setStateFlag(IsSkinned, state);
00587 }

void NL3D::CTransform::setChannelMixerOwnerShip bool  enable = true  )  [inline, inherited]
 

This force gives this object ownership of the channel mixer it is registered to, so it will delete it when the dtor is called. It should be called AFTER this object has been registered to a channel mixer, because a new registration will broke the ownership. This is useful for automatic animations, when there's no owner of the channel mixer that could delete it.

Definition at line 256 of file transform.h.

References NL3D::CTransform::IsDeleteChannelMixer, and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CScene::createInstance(), and NL3D::CTransform::registerToChannelMixer().

00256 { setStateFlag(IsDeleteChannelMixer, enable); }

void NL3D::CTransform::setClusterSystem CInstanceGroup pCS  )  [inline, inherited]
 

Definition at line 912 of file transform.h.

References NL3D::CTransform::_ClusterSystem, NL3D::CTransform::ForceClipRoot, NL3D::CTransform::getStateFlag(), and nlassert.

Referenced by NL3D::CScene::findCameraClusterSystemFromRay(), and NL3D::CTransform::setForceClipRoot().

00913 {
00914         if (pCS != NULL)
00915         {
00916                 nlassert(!getStateFlag(ForceClipRoot)); // the transform must be linked to the root, and have not cluster system when this flag is set
00917         }
00918         _ClusterSystem = pCS;
00919 }

void NL3D::CTransformShape::setDistMax float  distMax  )  [inline, inherited]
 

Definition at line 137 of file transform_shape.h.

Referenced by NL3D::CScene::createInstance(), and NL3D::CInstanceUser::setDistMax().

00137 { _DistMax = distMax; }

void NL3D::CTransform::setDontUnfreezeChildren bool  val  )  [inherited]
 

Definition at line 378 of file transform.cpp.

References NL3D::CTransform::_DontUnfreezeChildren.

Referenced by NL3D::CInstanceGroup::createRoot().

00379 {
00380         _DontUnfreezeChildren = val;
00381 }

void NL3D::CParticleSystemModel::setEditionMode bool  enable = true  ) 
 

=====================================================================================

force the edition mode : this will prevent the system from being removed when it is out of range. When the model is first allocated, the system resource are not allocated until it becomes visible. This also forces the resources to be allocated. when there are no more particles in it etc. (this also mean that you can safely keep a pointer on it) This flag is not saved.

Definition at line 148 of file particle_system_model.cpp.

References _EditionMode, _ParticleSystem, nlassert, and reallocRsc().

00149 { 
00150         if (enable)
00151         {
00153                 if (!_ParticleSystem)
00154                 {
00155                         nlassert(_Scene);
00156                         nlassert(Shape);
00157                         reallocRsc();
00158                 }
00159         }
00160         _EditionMode = enable; 
00161 }

void NL3D::CParticleSystemModel::setEllapsedTime TAnimationTime  ellapsedTime  )  [inline]
 

set the ellapsed time (in second) used for animation.

Definition at line 162 of file particle_system_model.h.

References _EllapsedTime, and NL3D::TAnimationTime.

Referenced by doAnimate().

00163                 { 
00164                         _EllapsedTime = ellapsedTime; 
00165                 }               

void NL3D::CParticleSystemModel::setEllapsedTimeRatio float  value  )  [inline]
 

This apply a ratio on the ellapsed time. This can be used to slow down a system This must be in the >= 0. 1 means the system run at normal speed

Definition at line 149 of file particle_system_model.h.

References _EllapsedTimeRatio, nlassert, and value.

00150                 {
00151                         nlassert(value >= 0);
00152                         _EllapsedTimeRatio = value;
00153                 }

void NL3D::IAnimatable::setFather IAnimatable father,
uint  fatherOwnerBit
[inline, inherited]
 

Say which (if any) IAnimatable owns this one. This is important for Touch propagation. By this system, Fathers and ancestors know if they must check their sons (isTouched() return true).

Parameters:
father the father we must inform of our update.
fatherOwnerBit What bit of father we must set when we are updated

Definition at line 153 of file animatable.h.

References NL3D::IAnimatable::_Father, NL3D::IAnimatable::_FatherOwnerBit, NL3D::IAnimatable::propagateTouch(), and uint.

Referenced by NL3D::CMeshBase::instanciateMeshBase(), and NL3D::CSegRemanence::setAnimatedMaterial().

00154         {
00155                 _Father= father; _FatherOwnerBit= fatherOwnerBit;
00156 
00157                 // propagate the touch to the fathers.
00158                 propagateTouch();
00159         }

void NL3D::IAnimatable::setFlag uint  valueId  )  [inline, protected, inherited]
 

This method set a bit in the bitset.

Definition at line 239 of file animatable.h.

References NL3D::IAnimatable::_BitSet, and uint.

Referenced by NL3D::IAnimatable::propagateTouch(), and NL3D::IAnimatable::touch().

00240         {
00241                 _BitSet|= (1<<valueId);
00242         }

void NL3D::CTransform::setForceClipRoot bool  forceClipRoot  )  [inherited]
 

Force the transform to always be attached to the root As a consequence, it can't be inserted into a cluster system (even the root cluster) and is thus always visible when in the frustum (not clusterized) NB : any call to setClusterSystem will cause an assertion when the flag is set NB : any call to hrcUnlink will cause an assertion when the flag is set (must remain linked to the root)

Definition at line 1380 of file transform.cpp.

References NL3D::CTransform::_OwnerScene, NL3D::CTransform::ForceClipRoot, NL3D::CScene::getRoot(), NL3D::CTransform::getStateFlag(), NL3D::CTransform::hrcLinkSon(), NL3D::CTransform::hrcUnlink(), NL3D::CTransform::setClusterSystem(), and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CTransformUser::setForceClipRoot().

01381 {
01382         if (forceClipRoot == (getStateFlag(ForceClipRoot) != 0)) return;
01383         if (forceClipRoot)
01384         {
01385                 // unlink from previous father and link to the root
01386                 hrcUnlink();
01387                 if (_OwnerScene)
01388                 {
01389                         _OwnerScene->getRoot()->hrcLinkSon(this);
01390                 }
01391                 setClusterSystem(NULL);
01392         }
01393         setStateFlag(ForceClipRoot, forceClipRoot);
01394 }

void NL3D::CTransform::setGeneratingShadowMap bool  state  )  [inline, inherited]
 

For ShadowMapManager. true if the model is rendering its ShadowMap this frame.

Definition at line 514 of file transform.h.

References NL3D::CTransform::canCastShadowMap(), NL3D::CTransform::IsGeneratingShadowMap, and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CShadowMapManager::addShadowCasterGenerate().

00514 {if(canCastShadowMap()) setStateFlag(IsGeneratingShadowMap, state);}

void NL3D::CTransform::setIsBigLightable bool  val  )  [protected, inherited]
 

Deriver must use this method with true to indicate the model is a big lightable.

Definition at line 574 of file transform.cpp.

References NL3D::CTransform::IsBigLightable, and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CMeshBase::instanciateMeshBase().

00575 {
00576         setStateFlag(IsBigLightable, val);
00577 }

void NL3D::CTransform::setIsCluster bool  val  )  [inline, protected, inherited]
 

For CCluster only.

Definition at line 671 of file transform.h.

References NL3D::CTransform::IsCluster, and NL3D::CTransform::setStateFlag().

00671 {setStateFlag(IsCluster, val);}

void NL3D::CTransform::setIsForceAnimDetail bool  val  )  [protected, inherited]
 

Deriver must use this method with true if the model must be AnimDetail-ed whatever registerToChannelMixer() has been called or not

Definition at line 590 of file transform.cpp.

References NL3D::CTransform::_FatherSkeletonModel, NL3D::CSkeletonModel::dirtSkinRenderLists(), NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsAnimDetailable, NL3D::CTransform::IsForceAnimDetail, NL3D::CTransform::isSkinned(), nlassert, and NL3D::CTransform::setStateFlag().

00591 {
00592         setStateFlag(IsForceAnimDetail, val );
00593 
00594         // Update flag, if we must be inserted in AnimDetail
00595         setStateFlag(IsAnimDetailable, _ChannelMixer || getStateFlag(IsForceAnimDetail) );
00596 
00597         // If skinned, then must inform skeleton parent that it must recompute skin render/animDetail lists
00598         if(isSkinned())
00599         {
00600                 nlassert(_FatherSkeletonModel);
00601                 _FatherSkeletonModel->dirtSkinRenderLists();
00602         }
00603 }

void NL3D::CTransform::setIsLightable bool  val  )  [protected, inherited]
 

Deriver must use this method with true to indicate the model support lighting.

Definition at line 552 of file transform.cpp.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsFinalLightable, NL3D::CTransform::IsLightable, NL3D::CTransform::IsUserLightable, and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CMeshBase::instanciateMeshBase().

00553 {
00554         setStateFlag(IsLightable, val);
00555         // update IsFinalLightable
00556         setStateFlag(IsFinalLightable, (getStateFlag(IsLightable) && getStateFlag(IsUserLightable)) );
00557 }

void NL3D::CTransform::setIsLoadbalancable bool  val  )  [protected, inherited]
 

Deriver must use this method with true to indicate the model support loadBalancing.

Definition at line 605 of file transform.cpp.

References NL3D::CTransform::IsLoadBalancable, and NL3D::CTransform::setStateFlag().

00606 {
00607         setStateFlag(IsLoadBalancable, val );
00608 }

void NL3D::CTransform::setIsMeshBaseInstance bool  val  )  [inline, protected, inherited]
 

For CMeshBaseInstance only.

Definition at line 667 of file transform.h.

References NL3D::CTransform::IsMeshBaseInstance, and NL3D::CTransform::setStateFlag().

00667 {setStateFlag(IsMeshBaseInstance, val);}

void NL3D::CTransform::setIsRenderable bool  val  )  [protected, inherited]
 

Deriver must use this method with true to indicate the model can be rendered. "can be rendered" means if object has to be inserted in RenderTrav list. eg: a mesh must be inserted in a render list, but not a light, or a NULL transform. The default is false.

Definition at line 568 of file transform.cpp.

References NL3D::CTransform::IsRenderable, and NL3D::CTransform::setStateFlag().

00569 {
00570         setStateFlag(IsRenderable, val);
00571 }

void NL3D::CTransform::setIsShadowMapCaster bool  val  )  [inline, protected, inherited]
 

ShadowMap.

Definition at line 674 of file transform.h.

References NL3D::CTransform::IsShadowMapCaster, and NL3D::CTransform::setStateFlag().

00674 {setStateFlag(IsShadowMapCaster, val);}

void NL3D::CTransform::setIsShadowMapReceiver bool  val  )  [inline, protected, inherited]
 

Deriver must use this method with true to indicate the model is a big lightable.

Definition at line 675 of file transform.h.

References NL3D::CTransform::IsShadowMapReceiver, and NL3D::CTransform::setStateFlag().

00675 {setStateFlag(IsShadowMapReceiver, val);}

void NL3D::CTransform::setIsSkeleton bool  val  )  [protected, inherited]
 

For CSkeletonModel only.

Definition at line 579 of file transform.cpp.

References NL3D::CTransform::IsSkeleton, and NL3D::CTransform::setStateFlag().

00580 {
00581         setStateFlag(IsSkeleton, val);
00582 }

void NL3D::CTransform::setIsTransformShape bool  val  )  [inline, protected, inherited]
 

For CTransformShape only.

Definition at line 669 of file transform.h.

References NL3D::CTransform::IsTransformShape, and NL3D::CTransform::setStateFlag().

00669 {setStateFlag(IsTransformShape, val);}

void NL3D::CTransform::setLoadBalancingGroup const std::string &  group  )  [inherited]
 

Change the load Balancing group of a model. Every models are in a special LoadBalancingGroup. NB: the group is created if did not exist. NB: if models are skinned, it is their Skeleton which drive the group

By default, models lies in the "Default" group, but Skeletons for skinning and ParticlesSystems which are in "Skin" and "Fx" group respectively. The "Default" group is special because it is not balanced (ie models are only degraded from their distance to camera)

Definition at line 522 of file transform.cpp.

References NL3D::CTransform::_LoadBalancingGroup, NL3D::CScene::getLoadBalancingTrav(), NL3D::CLoadBalancingTrav::getOrCreateGroup(), and NL3D::CTransform::getOwnerScene().

Referenced by NL3D::CSkeletonShape::createInstance(), NL3D::CSegRemanenceShape::createInstance(), and NL3D::CParticleSystemShape::createInstance().

00523 {
00524         // Get the traversal.
00525         CLoadBalancingTrav      &trav= getOwnerScene()->getLoadBalancingTrav();
00526         // get the group from trav (create if needed), and set it.
00527         _LoadBalancingGroup= trav.getOrCreateGroup(group);
00528 }

void NL3D::CTransform::setLogicInfo ILogicInfo logicInfo  )  [inline, inherited]
 

Set the LogicInfo for this transfrom, eg to retrieve statc light information, see ILogicInfo. Ptr is kept in CTransfrom, so should call setLogicInfo(NULL) before to clean up.

Definition at line 389 of file transform.h.

References NL3D::CTransform::_LogicInfo.

Referenced by NL3D::CTransformUser::setLogicInfo().

00389 {_LogicInfo= logicInfo;}

void NL3D::ITransformable::setMatrix const CMatrix mat  )  [inline, inherited]
 

Work only in DirecTMatrix mode (nlassert).

Definition at line 174 of file transformable.h.

References NL3D::ITransformable::_LocalMatrixDate, NL3D::ITransformable::DirectMatrix, and nlassert.

Referenced by NL3D::ITransformable::lookAt(), and NL3D::CTransformableUser::setMatrix().

00175         {
00176                 nlassert(_Mode==DirectMatrix);
00177                 _LocalMatrix= mat;
00178                 // The matrix has changed.
00179                 _LocalMatrixDate++;
00180         }

void NL3D::CTransform::setMeanColor CRGBA  color  )  [inherited]
 

set the Mean color of the transform. The mean color can be used for many purpose, such as drawing objects if the textures are not loaded. It is used also for Lod Character. Default color is (255,255,255)

Definition at line 540 of file transform.cpp.

References NL3D::CTransform::_MeanColor.

00541 {
00542         // if the color is different from prec
00543         if(color!=_MeanColor)
00544         {
00545                 // change it.
00546                 _MeanColor= color;
00547         }
00548 }

void NL3D::CTransform::setOpacity bool  v  )  [inherited]
 

Definition at line 255 of file transform.cpp.

References NL3D::CTransform::_FatherSkeletonModel, NL3D::CSkeletonModel::dirtSkinRenderLists(), NL3D::CTransform::getStateFlag(), NL3D::CTransform::isSkinned(), nlassert, NL3D::CTransform::setStateFlag(), and v.

Referenced by NL3D::CFlareModel::CFlareModel(), CParticleSystemModel(), NL3D::CSkeletonModel::CSkeletonModel(), NL3D::CVegetableBlendLayerModel::CVegetableBlendLayerModel(), NL3D::CWaterModel::CWaterModel(), NL3D::CMeshBase::instanciateMeshBase(), NL3D::CTransformUser::setOpacity(), NL3D::CMeshMultiLodInstance::traverseLoadBalancing(), NL3D::CSegRemanence::updateOpacityFromShape(), and updateOpacityInfos().

00256 { 
00257         bool bTmp = getStateFlag(IsOpaque) == 0 ? false : true;
00258         if (bTmp != v)
00259         {
00260                 setStateFlag(IsOpaque, v);
00261                 if(isSkinned())
00262                 {
00263                         nlassert(_FatherSkeletonModel);
00264                         _FatherSkeletonModel->dirtSkinRenderLists();
00265                 }
00266         }
00267 }

void NL3D::CTransform::setOrderingLayer uint  layer  )  [inline, inherited]
 

Set the current layer for this transform. Typically, this is used to sort transparent objects. Isn't used with solid objects. For now : Layer 0 is for underwater Layer 1 is for water surfaces Layer 2 is for object above water

Definition at line 184 of file transform.h.

References NL3D::CTransform::_OrderingLayer, and uint.

Referenced by NL3D::CWaterModel::CWaterModel(), and NL3D::CTransformUser::setOrderingLayer().

00184 { _OrderingLayer = layer; }

void NL3D::CParticleSystemModel::setParticleSystem CParticleSystem ps  )  [inline]
 

Set the particle system for this transform shape after it has been instanciated (from a memory stream, or by sharing) see CParticleSystemShape

Definition at line 100 of file particle_system_model.h.

References _ParticleSystem, nlassert, and updateOpacityInfos().

00101                 {
00102                         nlassert(!_ParticleSystem);
00103                         _ParticleSystem = ps;   
00104                         updateOpacityInfos();
00105                 }

void NL3D::ITransformable::setPivot float  x,
float  y,
float  z
[inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 169 of file transformable.h.

References NL3D::ITransformable::setPivot(), x, y, and z.

00170         {
00171                 setPivot(CVector(x, y, z));
00172         }

void NL3D::ITransformable::setPivot const CVector pivot  )  [inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 162 of file transformable.h.

References NL3D::ITransformable::_Pivot, nlassert, NL3D::ITransformable::PivotValue, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, NL3D::IAnimatable::touch(), and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::ITransformable::lookAt(), NL3D::CTransformableUser::setPivot(), and NL3D::ITransformable::setPivot().

00163         {
00164                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00165                 _Pivot.Value= pivot;
00166                 touch(PivotValue, OwnerBit);
00167         }

void NL3D::ITransformable::setPos float  x,
float  y,
float  z
[inline, inherited]
 

Work only in Rot* mode(nlassert).

Definition at line 121 of file transformable.h.

References NL3D::ITransformable::setPos(), x, y, and z.

00122         {
00123                 setPos(CVector(x,y,z));
00124         }

void NL3D::ITransformable::setPos const CVector pos  )  [inline, inherited]
 

Work only in Rot* mode(nlassert).

Definition at line 114 of file transformable.h.

References nlassert, NL3D::ITransformable::PosValue, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, NL3D::IAnimatable::touch(), and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CCamera::build(), NL3D::ITransformable::lookAt(), NL3D::CTransformableUser::setPos(), NL3D::ITransformable::setPos(), NL3D::CInstanceGroup::setPos(), and NL3D::CPSLight::step().

00115         {
00116                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00117                 _Pos.Value= pos;
00118                 touch(PosValue, OwnerBit);
00119         }

void NL3D::ITransformable::setRotEuler float  rotX,
float  rotY,
float  rotZ
[inline, inherited]
 

Work only in RotEuler mode(nlassert).

Definition at line 133 of file transformable.h.

References NL3D::ITransformable::setRotEuler().

00134         {
00135                 setRotEuler(CVector(rotX, rotY, rotZ));
00136         }

void NL3D::ITransformable::setRotEuler const CVector rot  )  [inline, inherited]
 

Work only in RotEuler mode(nlassert).

Definition at line 126 of file transformable.h.

References NL3D::ITransformable::_RotEuler, nlassert, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotEulerValue, NL3D::IAnimatable::touch(), and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CTransformableUser::setRotEuler(), and NL3D::ITransformable::setRotEuler().

00127         {
00128                 nlassert(_Mode==RotEuler);
00129                 _RotEuler.Value= rot;
00130                 touch(RotEulerValue, OwnerBit);
00131         }

void NL3D::ITransformable::setRotQuat const CQuat quat  )  [inline, inherited]
 

Work only in RotQuat mode (nlassert).

Definition at line 138 of file transformable.h.

References NL3D::ITransformable::_RotQuat, nlassert, NL3D::ITransformable::RotQuat, NL3D::ITransformable::RotQuatValue, NL3D::IAnimatable::touch(), and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::CTargetAnimCtrl::execute(), NL3D::ITransformable::lookAt(), NL3D::CTransformableUser::setRotQuat(), and NL3D::CInstanceGroup::setRotQuat().

00139         {
00140                 nlassert(_Mode==RotQuat);
00141                 _RotQuat.Value= quat;
00142                 touch(RotQuatValue, OwnerBit);
00143         }

void NL3D::ITransformable::setScale float  scale  )  [inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 157 of file transformable.h.

References NL3D::ITransformable::setScale().

00158         {
00159                 setScale(CVector(scale, scale, scale));
00160         }

void NL3D::ITransformable::setScale float  scaleX,
float  scaleY,
float  scaleZ
[inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 152 of file transformable.h.

References NL3D::ITransformable::setScale().

00153         {
00154                 setScale(CVector(scaleX, scaleY, scaleZ));
00155         }

void NL3D::ITransformable::setScale const CVector scale  )  [inline, inherited]
 

Work only in Rot* mode (nlassert).

Definition at line 145 of file transformable.h.

References nlassert, NL3D::ITransformable::RotEuler, NL3D::ITransformable::RotQuat, NL3D::ITransformable::ScaleValue, NL3D::IAnimatable::touch(), and NL3D::CAnimatedValueBlendable< T >::Value.

Referenced by NL3D::ITransformable::lookAt(), NL3D::CTransformableUser::setScale(), and NL3D::ITransformable::setScale().

00146         {
00147                 nlassert(_Mode==RotEuler || _Mode==RotQuat);
00148                 _Scale.Value= scale;
00149                 touch(ScaleValue, OwnerBit);
00150         }

void NL3D::ITransformable::setTransformMode TTransformMode  mode,
CMatrix::TRotOrder  ro = CMatrix::ZXY
[inline, inherited]
 

Change the transform mode. Components or matrix are not reseted.

Definition at line 100 of file transformable.h.

References NL3D::ITransformable::_RotOrder, NL3D::ITransformable::PosValue, and NL3D::IAnimatable::touch().

Referenced by NL3D::CCamera::build(), NL3D::CCamera::enableTargetAnimation(), NL3D::CPSMesh::newElement(), NL3D::CTransformableUser::setTransformMode(), and NL3D::CPSMesh::updatePos().

00101         {
00102                 _Mode= mode;
00103                 _RotOrder= ro;
00104                 // just for information.
00105                 touch(PosValue, OwnerBit);
00106         }

void NL3D::CTransform::setTransparency bool  v  )  [inherited]
 

Accessors for opacity/transparency

Definition at line 240 of file transform.cpp.

References NL3D::CTransform::_FatherSkeletonModel, NL3D::CSkeletonModel::dirtSkinRenderLists(), NL3D::CTransform::getStateFlag(), NL3D::CTransform::isSkinned(), nlassert, NL3D::CTransform::setStateFlag(), and v.

Referenced by NL3D::CFlareModel::CFlareModel(), CParticleSystemModel(), NL3D::CSkeletonModel::CSkeletonModel(), NL3D::CVegetableBlendLayerModel::CVegetableBlendLayerModel(), NL3D::CWaterModel::CWaterModel(), NL3D::CMeshBase::instanciateMeshBase(), NL3D::CTransformUser::setTransparency(), NL3D::CMeshMultiLodInstance::traverseLoadBalancing(), NL3D::CSegRemanence::updateOpacityFromShape(), updateOpacityInfos(), and NL3D::CSkeletonModel::updateSkinRenderLists().

00241 { 
00242         bool bTmp = getStateFlag(IsTransparent) == 0 ? false : true;
00243         if (bTmp != v)
00244         {
00245                 setStateFlag(IsTransparent, v);
00246                 if(isSkinned())
00247                 {
00248                         nlassert(_FatherSkeletonModel);
00249                         _FatherSkeletonModel->dirtSkinRenderLists();
00250                 }
00251         }
00252 }

void NL3D::CTransformShape::setupCurrentLightContribution CLightContribution lightContrib,
bool  useLocalAtt
[protected, inherited]
 

For deriver who wants to setup their own current lightContribution setup (as skeleton). Must call changeLightSetup() so change are effectively made in driver

Definition at line 98 of file transform_shape.cpp.

References NL3D::CTransformShape::_CurrentLightContribution, and NL3D::CTransformShape::_CurrentUseLocalAttenuation.

Referenced by NL3D::CSkeletonModel::renderSkins().

00099 {
00100         _CurrentLightContribution= lightContrib;
00101         _CurrentUseLocalAttenuation= useLocalAtt;
00102 }

void NL3D::CTransform::setUserClipping bool  enable  )  [inherited]
 

Definition at line 1310 of file transform.cpp.

References NL3D::CTransform::setStateFlag(), and NL3D::CTransform::UserClipping.

Referenced by NL3D::CTransformUser::setUserClipping().

01311 {
01312         setStateFlag (UserClipping, enable);
01313 }

void NL3D::CParticleSystemModel::setUserColor NLMISC::CRGBA  userColor  ) 
 

Definition at line 1063 of file particle_system_model.cpp.

References _ParticleSystem.

01064 {
01065         if (_ParticleSystem) _ParticleSystem->setUserColor(userColor);
01066         _UserColor = userColor;
01067 }

void NL3D::CTransform::setUserLightable bool  enable  )  [inherited]
 

Set the UserLightable flag. if false, isLightable() will always return false. Doing this, user can disable lighting on a model which may be interesting for speed. Default behavior is UserLightable==true.

Definition at line 559 of file transform.cpp.

References NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsFinalLightable, NL3D::CTransform::IsLightable, NL3D::CTransform::IsUserLightable, and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CTransformUser::setUserLightable().

00560 {
00561         setStateFlag(IsUserLightable, enable);
00562         // update IsFinalLightable
00563         setStateFlag(IsFinalLightable, (getStateFlag(IsLightable) && getStateFlag(IsUserLightable)) );
00564 }

void NL3D::CParticleSystemModel::setUserMatrix const NLMISC::CMatrix userMatrix  )  [inline]
 

Set user matrix of the system.

Particle can be located in various coordinate system :

  • in world (identity matrix)
  • local to the particle system (matrix of the particle system)
  • local to the coord. sys. defined by the user matrix

Definition at line 281 of file particle_system_model.h.

References _UserMatrix.

00281 { _UserMatrix = userMatrix; }

void NL3D::CTransform::setWorldMatrix const CMatrix mat  )  [inline, inherited]
 

Definition at line 302 of file transform.h.

Referenced by NL3D::CParticleSystemManager::processAnimate().

00302 { _WorldMatrix = mat;}

void NL3D::CParticleSystemModel::setZBias float  value  ) 
 

Definition at line 1079 of file particle_system_model.cpp.

References _ParticleSystem, and value.

01080 {
01081         if (value == _ZBias) return;
01082         _ZBias = value;
01083         if (_ParticleSystem) _ParticleSystem->setZBias(_ZBias);
01084 }

void NL3D::CTransform::show  )  [inherited]
 

Show the objet and his sons.

Definition at line 271 of file transform.cpp.

References NL3D::CTransform::_FatherSkeletonModel, NL3D::CTransform::_TransformDirty, NL3D::CSkeletonModel::dirtSkinRenderLists(), NL3D::CTransform::isSkinned(), nlassert, and NL3D::CTransform::Visibility.

Referenced by NL3D::CTransformUser::show(), and NL3D::CLandscapeUser::show().

00272 {
00273         // Optim: do nothing if already set
00274         if(Visibility!= CHrcTrav::Show)
00275         {
00276                 _TransformDirty= true;
00277                 Visibility= CHrcTrav::Show;
00278                 // If skinned, then must inform skeleton parent that it must recompute skin render/animDetail lists
00279                 if(isSkinned())
00280                 {
00281                         nlassert(_FatherSkeletonModel);
00282                         _FatherSkeletonModel->dirtSkinRenderLists();
00283                 }
00284         }
00285 }

virtual void NL3D::CTransformShape::start  )  [inline, virtual, inherited]
 

Reimplemented in NL3D::CSegRemanence.

Definition at line 128 of file transform_shape.h.

Referenced by NL3D::CInstanceUser::start().

00128 {};

virtual void NL3D::CTransformShape::stop  )  [inline, virtual, inherited]
 

Reimplemented in NL3D::CSegRemanence.

Definition at line 130 of file transform_shape.h.

Referenced by NL3D::CInstanceUser::stop().

00130 {};

virtual bool NL3D::CTransform::supportShadowSkinGrouping  )  const [inline, protected, virtual, inherited]
 

Special Skinning For ShadowMapping.

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 611 of file transform.h.

00611 {return false;}

virtual bool NL3D::CTransform::supportSkinGrouping  )  const [inline, protected, virtual, inherited]
 

Deriver may support SkinGrouping if isSkinnable(). It renders the skin with current ctx of the skeletonModel, but torn in 2 pass: fillVB,a nd renderPrimitives Deriver may check NL3D_MESH_SKIN_MANAGER_VERTEXFORMAT and NL3D_MESH_SKIN_MANAGER_MAXVERTICES

Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance.

Definition at line 597 of file transform.h.

00597 {return false;}

void NL3D::IAnimatable::touch uint  valueId,
uint  ownerValueId
[inline, inherited]
 

Touch a value because it has been modified.

Parameters:
valueId is the animated value ID in the object we want to touch.
ownerValueId is the bit of the IAnimatable part which owns this animated value.

Definition at line 168 of file animatable.h.

References NL3D::IAnimatable::propagateTouch(), NL3D::IAnimatable::setFlag(), and uint.

Referenced by NL3D::CChannelMixer::eval(), NL3D::CChannelMixer::evalSingleChannel(), reallocRsc(), NL3D::CChannelMixer::refreshList(), NL3D::CCamera::setFov(), NL3D::ITransformable::setPivot(), NL3D::ITransformable::setPos(), NL3D::CCamera::setRoll(), NL3D::ITransformable::setRotEuler(), NL3D::ITransformable::setRotQuat(), NL3D::ITransformable::setScale(), NL3D::CCamera::setTargetPos(), NL3D::ITransformable::setTransformMode(), and NL3D::CParticleSystemInstanceUser::setUserParam().

00169         {
00170                 // Set the bit
00171                 setFlag(valueId);
00172                 // Set the owner bit
00173                 setFlag(ownerValueId);
00174 
00175                 // propagate the touch to the fathers.
00176                 propagateTouch();
00177         }

void NL3D::CParticleSystemModel::touchLightableState void   )  [inline]
 

edition purpose : touch the system to tell that the lightable state of the system has changed (added/removed lightable faces )

Definition at line 201 of file particle_system_model.h.

References _LightableStateTouched.

Referenced by enableDisplayTools().

00202                 { 
00203                         _LightableStateTouched = true; 
00204                 }

void NL3D::CParticleSystemModel::touchTransparencyState void   )  [inline]
 

edition purpose : touch the system to tell that the transparency state of the system has changed (added/removed opaque/tansparent faces )

Definition at line 196 of file particle_system_model.h.

References _TransparencyStateTouched.

Referenced by enableDisplayTools().

00197                 { 
00198                         _TransparencyStateTouched = true; 
00199                 }

void NL3D::CParticleSystemModel::traverseAnimDetail  )  [virtual]
 

=====================================================================================

Reimplemented from NL3D::CTransform.

Definition at line 516 of file particle_system_model.cpp.

References NL3D::CParticleSystemShape::_DestroyModelWhenOutOfRange, NL3D::CParticleSystemShape::_DestroyWhenOutOfFrustum, _EditionMode, _InClusterAndVisible, NL3D::CParticleSystem::_LastUpdateDate, _ParticleSystem, _TriggerAnimatedValue, NL3D::CRenderTrav::addRenderModel(), NL3D::CClipTrav::CurrentDate, doAnimate(), NL3D::CParticleSystem::getAnimType(), NL3D::CScene::getClipTrav(), NL3D::CTransform::getOwnerScene(), getPS(), NL3D::CScene::getRenderTrav(), NL3D::CTransform::getVisibility(), NL3D::CParticleSystem::isSharingEnabled(), MINI_TIMER, nlassert, NL3D::PSStatsTraverseAnimDetail, NL3D::PSStatsTraverseAnimDetailPart1, NL3D::PSStatsTraverseAnimDetailPart2, NL3D::PSStatsTraverseAnimDetailPart3, NL3D::PSStatsTraverseAnimDetailPart4, reallocRsc(), releaseRsc(), releaseRscAndInvalidate(), and NL3D::CAnimatedValueNotBlendable< bool >::Value.

00517 {    
00518         MINI_TIMER(PSStatsTraverseAnimDetail)
00519         CTransformShape::traverseAnimDetail();  
00520         CParticleSystem *ps = getPS();
00521         if (!_WorldVis) return;
00522         if (_Invalidated) return;
00523         if (getVisibility() == CHrcTrav::Hide) return;
00524         
00525         {               
00526                 MINI_TIMER(PSStatsTraverseAnimDetailPart1)                      
00527                 if (!_EditionMode && !_InClusterAndVisible)
00528                 {
00529                         CParticleSystemShape            *pss = NLMISC::safe_cast<CParticleSystemShape *>((IShape *)Shape);
00530                         if (pss->_DestroyWhenOutOfFrustum)
00531                         {
00532                                 if (pss->_DestroyModelWhenOutOfRange)
00533                                 {
00534                                         releaseRscAndInvalidate();                      
00535                                 }
00536                                 else // remove rsc but do not invalidate the system
00537                                 {
00538                                         releaseRsc();
00539                                 }
00540                                 return;
00541                         }
00542                         if (!ps) return;
00543                 }       
00544 
00545                 // check for trigger. If the trigger is false, and there is a system instanciated, we delete it.
00546                 if (!_EditionMode)
00547                 {
00548                         if (!_TriggerAnimatedValue.Value)
00549                         {                                                                       
00550                                 // system is off, or hasn't been instanciated now...
00551                                 if (ps)
00552                                 {
00553                                         releaseRsc();                           
00554                                 }
00555                                 return;
00556                         }
00557                 }
00558         }
00559 
00560         {       
00561                 MINI_TIMER(PSStatsTraverseAnimDetailPart2)
00562                         
00563                 // the system or its center is in the view frustum, but it may not have been instanciated from its shape now
00564                 if (!ps)
00565                 {
00566                         nlassert(_Scene);
00567                         nlassert(Shape);
00568                         reallocRsc();
00569                         ps = _ParticleSystem;
00570                 }
00571         }
00572 
00573         CClipTrav                       &clipTrav= getOwnerScene()->getClipTrav();
00574         
00575         {       
00576                 MINI_TIMER(PSStatsTraverseAnimDetailPart3)                      
00577                 if (_InClusterAndVisible ||  ps->getAnimType() == CParticleSystem::AnimInCluster)
00578                 {               
00579                         bool animate = true;
00580                         if (ps->isSharingEnabled()) 
00581                         {
00582                                 if (ps->_LastUpdateDate == clipTrav.CurrentDate)
00583                                 {
00584                                         animate = false;                                
00585                                 }
00586                                 else
00587                                 {
00588                                         ps->_LastUpdateDate = clipTrav.CurrentDate;
00589                                 }
00590                         }
00591                         else
00592                         {
00593                                 ps->_LastUpdateDate = clipTrav.CurrentDate;
00594                         }       
00595                         ps->_LastUpdateDate = clipTrav.CurrentDate;
00596                         if (animate)
00597                         {
00598                                 if (ps->getAnimType() != CParticleSystem::AnimAlways) // if the animation is always perfomred, 
00599                                                                                                                                           // then animation is done by the particle system manager
00600                                                                                                                                           // just before the render trav
00601                                 {
00602                                         doAnimate();
00603                                 }                       
00604                         }
00605                 }               
00606         }       
00607 
00608         {
00609                 MINI_TIMER(PSStatsTraverseAnimDetailPart4)                      
00610                 // add a render model if in cluster & not hidden
00611                 if (_InClusterAndVisible)
00612                 {
00613                         getOwnerScene()->getRenderTrav().addRenderModel(this);
00614                 }
00615         }
00616 }

void NL3D::CTransform::traverseAnimDetailWithoutUpdateWorldMatrix  )  [protected, inherited]
 

traverse without updatin WorldMatrixFromFather:

  • animdetail if the model channelmixer is not NULL, and if model not clipped

Definition at line 938 of file transform.cpp.

References NL3D::CChannelMixer::eval(), and NL3D::CTransform::getOwnerScene().

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

00939 {
00940         // AnimDetail behavior: animate only if not clipped.
00941         // NB: no need to test because of VisibilityList use.
00942 
00943         // test if the refptr is NULL or not (RefPtr).
00944         CChannelMixer   *chanmix= _ChannelMixer;
00945         if(chanmix)
00946         {
00947                 // eval detail!!
00948                 chanmix->eval(true, getOwnerScene()->getAnimDetailTrav().CurrentDate);
00949         }
00950 }

void NL3D::CParticleSystemModel::traverseClip  )  [virtual]
 

Very special clip for Particle System (because of the complexity of not rendered, but still detail-animated...)

traverse the sons we must do this before us, because this object may delete himself from the scene

============================= the system has no precomputed bbox frustum test

============================= the system has a precomputed bbox frustum test

Reimplemented from NL3D::CTransform.

Definition at line 726 of file particle_system_model.cpp.

References _AnimatedModelHandle, NL3D::CParticleSystemShape::_DestroyModelWhenOutOfRange, _EditionMode, _InClusterAndVisible, _InsertedInVisibleList, NL3D::CParticleSystemShape::_MaxViewDist, _ParticleSystem, NL3D::CParticleSystemShape::_PrecomputedBBox, NL3D::CParticleSystemShape::_UsePrecomputedBBox, NL3D::CParticleSystemManager::addPermanentlyAnimatedSystem(), NL3D::CTravCameraScene::CamPos, checkAgainstPyramid(), checkDestroyCondition(), NLMISC::CAABBox::clipBack(), NL3D::CTransform::clipGetChild(), NL3D::CTransform::clipGetNumChildren(), NL3D::CClipTrav::CurrentDate, NL3D::CParticleSystem::getAnimType(), NL3D::CScene::getClipTrav(), NL3D::CScene::getFilterRenderFlags(), NL3D::CParticleSystem::getMaxViewDist(), NL3D::CTransform::getOwnerScene(), NL3D::CScene::getParticleSystemManager(), NLMISC::CMatrix::getPos(), NL3D::CTransform::getShowWhenLODSticked(), NL3D::CTransform::getWorldMatrix(), insertInVisibleList(), NL3D::CTransform::isClipVisible(), NL3D::CSkeletonModel::isDisplayedAsLodCharacter(), MINI_TIMER, nlassert, NL3D::PSStatsClipSystemCheckAgainstPyramid, NL3D::PSStatsClipSystemInstanciated, NL3D::PSStatsClipSystemNotInstanciated, NL3D::PSStatsInsertInVisibleList, NL3D::PSStatsTraverseClip, NL3D::CParticleSystemManager::removePermanentlyAnimatedSystem(), sint, NL3D::CTransform::traverseClip(), uint, NL3D::CParticleSystemManager::TAlwaysAnimatedModelHandle::Valid, and NL3D::CClipTrav::WorldPyramid.

00727 {               
00728         MINI_TIMER(PSStatsTraverseClip)
00729         // disable H_AUTO, because slowdown when lot of models (eg 1000-2000 tested in forest)
00730         //H_AUTO ( NL3D_Particles_Clip );
00731 
00732 //          CTransformShape::traverseClip();
00733                 // Traverse the Clip sons.
00734                 uint    numClipChildren= clipGetNumChildren();
00735                 for(uint i=0;i<numClipChildren;i++)
00736                         clipGetChild(i)->traverseClip();
00737 
00738                 if (!_WorldVis) return;
00739                 if (_Invalidated) return;               
00740                 CClipTrav                       &clipTrav= getOwnerScene()->getClipTrav();
00741                 
00742 
00743                 if (_ClipDate != clipTrav.CurrentDate) 
00744                 {
00745                         _InsertedInVisibleList = false;
00746                         _InClusterAndVisible = false;
00747                         _ClipDate = clipTrav.CurrentDate;
00748                 }
00749                 if (_InClusterAndVisible) return; // already visible
00750                 
00751 
00752                 CParticleSystem *ps = _ParticleSystem;
00753 
00754                 
00755                 if (ps) // system instanciated
00756                 {
00757                         MINI_TIMER(PSStatsClipSystemInstanciated)
00758                         // if there are no more particles, no need to even clip..
00759                         if (checkDestroyCondition(ps)) return;
00760                         // check for anim mode change
00761                         if (_AnimType != ps->getAnimType())
00762                         {
00763                                 CParticleSystemManager &psmgt = _Scene->getParticleSystemManager();
00764                                 if (_AnimType == CParticleSystem::AnimAlways) // was previously always animated ?
00765                                 {
00766                                         if (_AnimatedModelHandle.Valid)
00767                                         {                                       
00768                                                 psmgt.removePermanentlyAnimatedSystem(_AnimatedModelHandle);
00769                                         }
00770                                 }
00771                                 _AnimType = ps->getAnimType();
00772                                 if (_AnimType == CParticleSystem::AnimAlways)
00773                                 {
00774                                         _AnimatedModelHandle =  psmgt.addPermanentlyAnimatedSystem(this);
00775                                 }
00776                         }
00777                 }
00778                 
00779                 // check wether display filtered or not
00780                 if( !(_Scene->getFilterRenderFlags() & _RenderFilterType) )
00781                 {
00782                         _Visible = false;                                       
00783                         return;
00784                 }
00785 
00786                 // special case : system sticked to a skeleton
00787                 if( _AncestorSkeletonModel!=NULL )
00788                 {
00789                         bool visible = _AncestorSkeletonModel->isClipVisible();
00790                         // Special test: if we are sticked to a skeletonModel, and if we are still visible, maybe we don't have to
00791                         if(_Visible && _FatherSkeletonModel)
00792                         {
00793                                 // if our skeletonModel father is displayed with a Lod, maybe we are not to be displayed
00794                                 if(_FatherSkeletonModel->isDisplayedAsLodCharacter())
00795                                 {
00796                                         // We are visible only if we where sticked to the skeleton with forceCLod==true.
00797                                         // This is also true if we are actually a skeletonModel
00798                                         if(!getShowWhenLODSticked())
00799                                                 // otherWise we are not visible. eg: this is the case of skins and some sticked object
00800                                                 visible = false;
00801                                 }
00802                         }
00803                         //
00804                         if (visible)
00805                         {       
00806                                 {                               
00807                                         MINI_TIMER(PSStatsInsertInVisibleList)
00808                                         insertInVisibleList();
00809                                 }
00810                                 _InClusterAndVisible = true;
00811                                 return;
00812                         }
00813                         else // not visible, may need animation however..
00814                         {                               
00815                                 if (!ps) // no resc allocated
00816                                 {
00817                                         CParticleSystemShape            *pss= NLMISC::safe_cast<CParticleSystemShape *>((IShape *)Shape);
00818                                         nlassert(pss);
00819                                         // invalidate the system if too far
00820                                         const CVector pos = _AncestorSkeletonModel->getWorldMatrix().getPos();
00821                                         const CVector d = pos - clipTrav.CamPos;
00822                                         if (d * d > pss->_MaxViewDist * pss->_MaxViewDist) 
00823                                         {
00824                                                 _Visible = false;                                       
00825                                                 if (pss->_DestroyModelWhenOutOfRange)
00826                                                 {
00827                                                         _Invalidated = true;                                    
00828                                                 }                                                                                                       
00829                                         }
00830                                 }
00831                                 else
00832                                 {                               
00833                                         // NB : The test to see wether the system is not too far is performed by the particle system manager                                    
00834                                         if (!_EditionMode)
00835                                         {       
00836                                                 {                               
00837                                                         MINI_TIMER(PSStatsInsertInVisibleList)
00838                                                         insertInVisibleList();
00839                                                 }
00840                                         }                                       
00841                                 }
00842                         }
00843                         return;                         
00844                 }
00845 
00846 
00847                 //
00848                 const std::vector<CPlane>       &pyramid= clipTrav.WorldPyramid;        
00853                 // now the pyramid is directly expressed in the world
00854                 const CMatrix           &mat= getWorldMatrix();  
00855 
00856                                 
00857                 // Transform the pyramid in Object space.
00858 
00859                 
00860                 if(!ps) 
00861                 {
00862                         MINI_TIMER(PSStatsClipSystemNotInstanciated)
00863                         CParticleSystemShape            *pss= NLMISC::safe_cast<CParticleSystemShape *>((IShape *)Shape);
00864                         nlassert(pss);
00865 
00866                         // the system wasn't present the last time, we use its center to see if it's back in the view frustum,
00867                         // or if it is near enough.
00868                         // if this is the case, we say it isn't clipped, so it will be reinstanciated from the shape
00869                         // during the DetailAnimTraversal
00870 
00871                         const CVector pos = getWorldMatrix().getPos();
00872                 
00873                         const CVector d = pos - clipTrav.CamPos;
00874 
00875 
00876                         // check wether system not too far              
00877                         if (d * d > pss->_MaxViewDist * pss->_MaxViewDist) 
00878                         {
00879                                 _Visible = false;                                       
00880                                 if (pss->_DestroyModelWhenOutOfRange)
00881                                 {
00882                                         _Invalidated = true;                                    
00883                                 }                                                       
00884                                 return;
00885                         }               
00886 
00887                         // test the shape to see wether we have a precomputed bbox
00888                         if (!pss->_UsePrecomputedBBox)
00889                         {                                                               
00892                                 for(sint i=0; i < (sint)pyramid.size(); i++)
00893                                 {                                       
00894                                         if ( (pyramid[i]   *  mat  ).d > 0.0f )  // in its basis, the system is at the center
00895 
00896                                         {       
00897                                                 {                               
00898                                                         MINI_TIMER(PSStatsInsertInVisibleList)
00899                                                         insertInVisibleList();
00900                                                 }
00901                                                 return;
00902                                         }
00903                                 }                                                                       
00904                                 {                               
00905                                         MINI_TIMER(PSStatsInsertInVisibleList)
00906                                         insertInVisibleList();
00907                                 }
00908                                 _InClusterAndVisible = true;
00909                                 return;                                         
00910                         }
00911                         else
00912                         {
00915                                 for(sint i=0; i < (sint)pyramid.size(); i++)
00916                                 {                                       
00917                                         if ( !pss->_PrecomputedBBox.clipBack(pyramid[i]  * mat  ) ) 
00918                                         {       
00919                                                 {                               
00920                                                         MINI_TIMER(PSStatsInsertInVisibleList)
00921                                                         insertInVisibleList();
00922                                                 }
00923                                                 return;                                 
00924                                         }
00925                                 }                                                       
00926                                 {                               
00927                                         MINI_TIMER(PSStatsInsertInVisibleList)
00928                                         insertInVisibleList();
00929                                 }
00930                                 _InClusterAndVisible = true;
00931                                 return;
00932                                 
00933                         }
00934                 }
00935                 
00936                 //=========================================================================================================
00937                 // the system is already instanciated
00938                 
00939                 nlassert(ps);                                           
00941                 // In edition mode, it isn't done by the manager (system never removed), so we do it here in this case
00942                 if (_EditionMode)
00943                 {
00944                         CParticleSystemShape            *pss= NLMISC::safe_cast<CParticleSystemShape *>((IShape *)Shape);
00945                         nlassert(pss);
00946                         const CVector pos = getWorldMatrix().getPos();
00947                         const CVector d = pos - clipTrav.CamPos;
00948                         // check wether system not too far              
00949                         if (d * d > ps->getMaxViewDist() * ps->getMaxViewDist()) 
00950                         {
00951                                 return; // not visible
00952                         }
00953                 }
00954                 if (checkAgainstPyramid(pyramid) == false)
00955                 {
00956                         MINI_TIMER(PSStatsClipSystemCheckAgainstPyramid)
00957                         if (!_EditionMode)
00958                         {
00959                                 // system near, but maybe not in cluster..                                      
00960                                 {                               
00961                                         MINI_TIMER(PSStatsInsertInVisibleList)
00962                                         insertInVisibleList();
00963                                 }
00964                         }                               
00965                         return;
00966                 }
00967                                 
00968                 {       
00969                         {                               
00970                                 MINI_TIMER(PSStatsInsertInVisibleList)
00971                                 insertInVisibleList();
00972                         }
00973                 }
00974                 _InClusterAndVisible = true;
00975 }

void NL3D::CTransform::traverseHrc  )  [virtual, inherited]
 

Each method is called in its associated traversal.

Reimplemented in NL3D::CCluster, NL3D::CLandscapeModel, NL3D::CMeshBaseInstance, NL3D::CQuadGridClipManager, and NL3D::CRootModel.

Definition at line 786 of file transform.cpp.

References NL3D::CTransform::hrcGetChild(), NL3D::CTransform::hrcGetNumChildren(), num, uint, and NL3D::CTransform::updateWorld().

Referenced by NL3D::CHrcTrav::traverse(), and NL3D::CRootModel::traverseHrc().

00787 {
00788         // Recompute the matrix, according to _HrcParent matrix mode, and local matrix.
00789         updateWorld();
00790 
00791         // Traverse the Hrc sons.
00792         uint    num= hrcGetNumChildren();
00793         for(uint i=0;i<num;i++)
00794                 hrcGetChild(i)->traverseHrc();
00795 }

void NL3D::CTransform::traverseLight  )  [virtual, inherited]
 

traverse the lightedModel per default: recompute LightContribution is isLightable()

Reimplemented in NL3D::CPointLightModel, NL3D::CQuadGridClipManager, and NL3D::CRootModel.

Definition at line 1080 of file transform.cpp.

References NL3D::CTransform::_LightContribution, NL3D::CTransform::_LogicInfo, NL3D::CLightContribution::AttFactor, NL3D::CPointLight::computeLinearAttenuation(), NL3D::CLightingManager::computeModelLightContributions(), NL3D::CTransform::getAABBox(), NLMISC::CAABBox::getCenter(), NL3D::CScene::getLightTrav(), NL3D::CTransform::getOwnerScene(), NL3D::CPointLight::getPosition(), NL3D::CTransform::getWorldMatrix(), NL3D::CTransform::isNeedUpdateFrozenStaticLightSetup(), NL3D::CTransform::isNeedUpdateLighting(), NL3D::CLightTrav::LightingManager, NL3D::CLightContribution::NumFrozenStaticLight, NLMISC::OptFastFloor(), NL3D::CLightContribution::PointLight, NL3D::CTransform::setStateFlag(), sint, uint, and uint8.

01081 {
01082         // if the model do not need to update his lighting, just skip.
01083         if(!isNeedUpdateLighting())
01084                 return;
01085 
01086 
01087         // If a freezeStaticLightSetup() has been called on this model recently.
01088         if(isNeedUpdateFrozenStaticLightSetup())
01089         {
01090                 // Now, the correct matrix is computed.
01091                 // get the untransformed bbox from the model.
01092                 CAABBox         bbox;
01093                 getAABBox(bbox);
01094                 // get transformed center pos of bbox
01095                 CVector worldModelPos= getWorldMatrix() * bbox.getCenter();
01096 
01097                 // So we can compute AttFactor for each static light influencing this static object
01098                 uint    numPointLights= _LightContribution.NumFrozenStaticLight;
01099                 for(uint i=0;i<numPointLights;i++)
01100                 {
01101                         const CPointLight       *pl= _LightContribution.PointLight[i];
01102                         // don't worry about the precision of floor, because of *255.
01103                         float   distToModel= (pl->getPosition() - worldModelPos).norm();
01104                         sint    attFactor= NLMISC::OptFastFloor( 255 * pl->computeLinearAttenuation(worldModelPos, distToModel) );
01105                         _LightContribution.AttFactor[i]= (uint8)attFactor;
01106                 }
01107 
01108                 // clean.
01109                 setStateFlag(CTransform::IsNeedUpdateFrozenStaticLightSetup, false);
01110         }
01111 
01112 
01113         // see CTransform::clip(), here I am Lightable(), and I have no _AncestorSkeletonModel
01114         // So I am sure that I really need to recompute my ModelLightContributions.
01115         getOwnerScene()->getLightTrav().LightingManager.computeModelLightContributions(this,
01116                 _LightContribution, _LogicInfo);
01117 
01118         // done!
01119         setStateFlag(CTransform::IsNeedUpdateLighting, false);
01120 }

void NL3D::CTransformShape::traverseLoadBalancing  )  [virtual, inherited]
 

no-op by default

Reimplemented from NL3D::CTransform.

Reimplemented in NL3D::CMeshMultiLodInstance.

Definition at line 262 of file transform_shape.cpp.

References NL3D::CScene::getLoadBalancingTrav(), NL3D::CLoadBalancingTrav::getLoadPass(), NL3D::CTransform::getOwnerScene(), NL3D::CTransformShape::traverseLoadBalancingPass0(), and NL3D::CTransformShape::traverseLoadBalancingPass1().

00263 {
00264         CLoadBalancingTrav              &loadTrav= getOwnerScene()->getLoadBalancingTrav();
00265         if(loadTrav.getLoadPass()==0)
00266                 traverseLoadBalancingPass0();
00267         else
00268                 traverseLoadBalancingPass1();
00269 }

void NL3D::CParticleSystemModel::traverseRender  )  [virtual]
 

no-op by default

Reimplemented from NL3D::CTransformShape.

Definition at line 680 of file particle_system_model.cpp.

References _ParticleSystem, NLMISC::CRGBA::add(), NL3D::CLightContribution::AttFactor, NL3D::CPointLight::getDiffuse(), NL3D::CTransformShape::getLightContribution(), NL3D::CScene::getSunAmbient(), NL3D::CScene::getSunDiffuse(), MINI_TIMER, NLMISC::CRGBA::modulateFromui(), NL3D_MAX_LIGHT_CONTRIBUTION, nlassert, NL3D::CLightContribution::PointLight, NL3D::PSStatsTraverseRender, NL3D::CLightContribution::SunContribution, and uint.

00681 {
00682         MINI_TIMER(PSStatsTraverseRender)
00683 /*
00684         if (!_OutOfFrustum)
00685         {*/
00686         if (_ParticleSystem)
00687         {               
00688                 if (CTransform::isLightable())
00689                 {
00690                         // affect global lighting color
00691                         const CLightContribution &lc = getLightContribution();
00692                         NLMISC::CRGBA lighting(0, 0, 0, 255);
00693                         for(uint k = 0; k < NL3D_MAX_LIGHT_CONTRIBUTION; ++k)
00694                         {
00695                                 if (lc.PointLight[k] == NULL) break;
00696                                 NLMISC::CRGBA currLightContrib;
00697                                 currLightContrib.modulateFromui(lc.PointLight[k]->getDiffuse(), lc.AttFactor[k]);
00698                                 lighting.add(lighting, currLightContrib);
00699                         }
00700                         // add local ambient
00701                         //lighting.add(lighting, lc.LocalAmbient);
00702                         //lighting.add(lighting,lc.MergedPointLight);
00703                         // add sun diffuse
00704                         nlassert(_Scene);
00705                         NLMISC::CRGBA sunDiffuse;                       
00706                         sunDiffuse.modulateFromui(_Scene->getSunDiffuse(), lc.SunContribution);
00707                         lighting.add(lighting, sunDiffuse);
00708                         NLMISC::CRGBA sunAmbient;                       
00709                         sunAmbient.modulateFromui(_Scene->getSunAmbient(), lc.SunContribution);
00710                         lighting.add(lighting, sunAmbient);
00711                         _ParticleSystem->setLightingColor(lighting);
00712                 }               
00713                 CTransformShape::traverseRender();
00714         }
00715         //}
00716 }

void NL3D::CTransform::unfreezeHRC  )  [inherited]
 

see freezeHRC().

Definition at line 406 of file transform.cpp.

References NL3D::CTransform::_FreezeHRCState, NL3D::CTransform::_HrcParent, NL3D::CTransform::_HrcParentUnfreeze, NL3D::CTransform::_LightedModelIt, NL3D::CLightingManager::eraseStaticLightedModel(), NL3D::CTransform::FreezeHRCStateDisabled, NL3D::CScene::getLightTrav(), NL3D::CTransform::getOwnerScene(), NL3D::CScene::getRoot(), NL3D::CTransform::hrcLinkSon(), NL3D::CTransform::isLightable(), NL3D::CLightTrav::LightingManager, NL3D::CTransform::linkToUpdateList(), nlassert, NL3D::CTransform::QuadGridClipEnabled, NL3D::CTransform::setStateFlag(), and NL3D::CTransform::unlinkFromQuadCluster().

Referenced by NL3D::CSkeletonModel::bindSkin(), NL3D::CMeshBaseInstance::traverseHrc(), and NL3D::CInstanceGroup::unfreezeHRC().

00407 {
00408         // if this model is no HRC frozen disabled
00409         if(_FreezeHRCState!=FreezeHRCStateDisabled)
00410         {
00411                 // if model correctly frozen.
00412                 if(_FreezeHRCState == CTransform::FreezeHRCStateEnabled )
00413                 {
00414                         // Should not be linked : can't link after a freezeHRC
00415                         nlassert (_HrcParent == NULL);
00416 
00417                         // Set as unfreeze else, hrcLinkSon doesn't work
00418                         _FreezeHRCState= FreezeHRCStateDisabled;
00419 
00420                         // Link this model to the previous HRC parent.
00421                         if (_HrcParentUnfreeze)
00422                                 _HrcParentUnfreeze->hrcLinkSon( this );
00423                         else
00424                                 getOwnerScene()->getRoot()->hrcLinkSon( this );
00425 
00426                         // Link this object to the validateList.
00427                         linkToUpdateList();
00428 
00429                         // if lightable()
00430                         if( isLightable() )
00431                         {
00432                                 CLightTrav      &lightTrav= getOwnerScene()->getLightTrav();
00433                                 // Lighting: must remove the object from the quadGrid.
00434                                 // NB: works if _LightedModelIt==NULL. result is that _LightedModelIt= NULL.
00435                                 _LightedModelIt= lightTrav.LightingManager.eraseStaticLightedModel(_LightedModelIt);
00436                         }
00437 
00438                 }
00439                 else
00440                         _FreezeHRCState= FreezeHRCStateDisabled;
00441 
00442                 // unlink me from any QuadCluster, and disable QuadCluster
00443                 unlinkFromQuadCluster();
00444                 setStateFlag(QuadGridClipEnabled, false);
00445         }
00446 }

void NL3D::CTransform::unfreezeStaticLightSetup  )  [inherited]
 

unFreeze the Static Light Setup. Must be called if static pointLights are deleted. NB: it calls resetLighting() first. NB: do not need to call it if pointLights and this transform are deleted at same time.

Definition at line 1061 of file transform.cpp.

References NL3D::CTransform::_LightContribution, NL3D::CLightContribution::FrozenAmbientLight, NL3D::CLightContribution::FrozenStaticLightSetup, NL3D::CTransform::IsNeedUpdateFrozenStaticLightSetup, NL3D::CLightContribution::NumFrozenStaticLight, NL3D::CLightContribution::PointLight, NL3D::CTransform::resetLighting(), and NL3D::CTransform::setStateFlag().

Referenced by NL3D::CInstanceGroup::removeFromScene().

01062 {
01063         // resetLighting() first.
01064         resetLighting();
01065 
01066         // Disable StaticLightSetup.
01067         _LightContribution.FrozenStaticLightSetup= false;
01068         _LightContribution.NumFrozenStaticLight= 0;
01069         // End the list
01070         _LightContribution.PointLight[0]= NULL;
01071         // No more FrozenAmbientLight
01072         _LightContribution.FrozenAmbientLight= NULL;
01073 
01074         // Don't need to update StaticLightSetup since no more exist.
01075         setStateFlag(IsNeedUpdateFrozenStaticLightSetup, false);
01076 }

void NL3D::CTransformShape::unlinkFromQuadCluster  )  [protected, virtual, inherited]
 

special feature for CQuadGridClipManager. remove from it.

Reimplemented from NL3D::CTransform.

Definition at line 133 of file transform_shape.cpp.

References NL3D::CTransformShape::_QuadClusterListNode, and NL3D::CFastPtrListNode::unlink().

00134 {
00135         // if linked to a quadGridClipCluster, unlink it
00136         _QuadClusterListNode.unlink();
00137 }

void NL3D::CTransform::update  )  [virtual, inherited]
 

This function update the model (called by CScene::updateModels()) Deriver Must :

  • call BaseClass::update() (eg: CTransform::update()).
  • test if something is different (eg: animation modification). Then update Model information (eg compute new Matrix).

The default behavior is to update transform Matrix etc...

Reimplemented in NL3D::CCamera.

Definition at line 450 of file transform.cpp.

References NL3D::CTransform::_FreezeHRCState, NL3D::CTransform::_Frozen, NL3D::CTransform::_LastTransformableMatrixDate, NL3D::CTransform::_LightedModelIt, NL3D::CTransform::_LocalDate, NL3D::CTransform::_LocalMatrix, NL3D::CTransform::_LocalVis, NL3D::CTransform::_TransformDirty, NL3D::CHrcTrav::CurrentDate, NL3D::CLightingManager::eraseStaticLightedModel(), NL3D::CScene::getHrcTrav(), NL3D::CScene::getLightTrav(), NL3D::ITransformable::getMatrix(), NL3D::CTransform::getOwnerScene(), NL3D::CTransform::hrcUnlink(), NL3D::CLightingManager::insertStaticLightedModel(), NL3D::CTransform::isLightable(), NL3D::CLightTrav::LightingManager, NL3D::CTransform::unlinkFromUpdateList(), and NL3D::CTransform::Visibility.

Referenced by NL3D::CTransform::forceCompute(), NL3D::CTransform::freeze(), and NL3D::CScene::updateModels().

00451 {
00452         // test if the matrix has been changed in ITransformable.
00453         if(ITransformable::compareMatrixDate(_LastTransformableMatrixDate))
00454         {
00455                 _LastTransformableMatrixDate= ITransformable::getMatrixDate();
00456                 _TransformDirty= true;
00457         }
00458 
00459         // update the freezeHRC state.
00460         if(_FreezeHRCState != CTransform::FreezeHRCStateDisabled)
00461         {
00462                 // if the model request to be frozen in HRC
00463                 if(_FreezeHRCState == CTransform::FreezeHRCStateRequest )
00464                 {
00465                         // Wait for next Hrc traversal to compute good _WorldMatrix for this model and his sons.
00466                         // Also, next Hrc traversal will insert the model in the LightingManager quadGrid (if lightable)
00467                         _FreezeHRCState = CTransform::FreezeHRCStateReady;
00468                 }
00469                 // if the model is ready to be frozen in HRC, then do it!!
00470                 else if( _FreezeHRCState == CTransform::FreezeHRCStateReady )
00471                 {
00472                         // Unlink this model.
00473                         hrcUnlink();
00474 
00475                         // unLink this object from the validateList. NB: the list will still be correclty parsed.
00476                         unlinkFromUpdateList();
00477 
00478                         // if lightable, the model is inserted in a quadgrid to update his lighting only when
00479                         // dynamicLights touch him (since himself is static).
00480                         if( isLightable() )
00481                         {
00482                                 CLightTrav      &lightTrav= getOwnerScene()->getLightTrav();
00483                                 // Lighting: must reinsert the object from the quadGrid.
00484                                 // NB: works if _LightedModelIt==NULL. result is that _LightedModelIt= NULL.
00485                                 _LightedModelIt= lightTrav.LightingManager.eraseStaticLightedModel(_LightedModelIt);
00486                                 // insert in the quadgrid.
00487                                 _LightedModelIt= lightTrav.LightingManager.insertStaticLightedModel(this);
00488                         }
00489 
00490                         // Now this model won't be tested for validation nor for worldMatrix update. End!!
00491                         _FreezeHRCState = CTransform::FreezeHRCStateEnabled;
00492                 }
00493         }
00494 
00495         // update _LocalMatrix
00496         if(_TransformDirty)
00497         {
00498                 // update the local matrix.
00499                 _LocalMatrix= getMatrix();
00500                 _LocalVis= Visibility;
00501                 // update the date of the local matrix.
00502                 _LocalDate= getOwnerScene()->getHrcTrav().CurrentDate;
00503 
00504                 // The transform has been modified. Hence, it is no more frozen.
00505                 _Frozen= false;
00506 
00507                 // ok!
00508                 _TransformDirty= false;
00509         }
00510 }

void NL3D::CTransform::updateClipTravForAncestorSkeleton  )  [protected, inherited]
 

Definition at line 748 of file transform.cpp.

References NL3D::CTransform::_AncestorSkeletonModel, NL3D::CTransform::_ClipLinkedInSonsOfAncestorSkeletonModelGroup, NL3D::CTransform::clipAddChild(), NL3D::CTransform::clipGetNumParents(), NL3D::CTransform::clipGetParent(), NL3D::CTransform::clipUnlinkFromAll(), NL3D::CScene::getClipTrav(), NL3D::CTransform::getOwnerScene(), NL3D::CScene::getRoot(), and NL3D::CScene::SonsOfAncestorSkeletonModelGroup.

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

00749 {
00750         CClipTrav               &clipTrav= getOwnerScene()->getClipTrav();
00751 
00752         // If I have an ancestor Skeleton Model, I must be binded in ClipTrav to the SonsOfAncestorSkeletonModelGroup
00753         if(_AncestorSkeletonModel && !_ClipLinkedInSonsOfAncestorSkeletonModelGroup)
00754         {
00755                 // must unlink from ALL olds models.
00756                 clipUnlinkFromAll();
00757 
00758                 // And link to SonsOfAncestorSkeletonModelGroup.
00759                 getOwnerScene()->SonsOfAncestorSkeletonModelGroup->clipAddChild(this);
00760 
00761                 // update the flag.
00762                 _ClipLinkedInSonsOfAncestorSkeletonModelGroup= true;
00763         }
00764 
00765 
00766         // else I must be binded to the standard Root.
00767         if(!_AncestorSkeletonModel && _ClipLinkedInSonsOfAncestorSkeletonModelGroup)
00768         {
00769                 // verify first I am really still linked to the SonsOfAncestorSkeletonModelGroup.
00770                 // This test is important, because link may have changed for any reason (portals, clipManager....).
00771                 if( clipGetNumParents() == 1 && clipGetParent(0)==getOwnerScene()->SonsOfAncestorSkeletonModelGroup )
00772                 {
00773                         // must unlink from ALL olds models.
00774                         clipUnlinkFromAll();
00775                         // and now, link to std root.
00776                         getOwnerScene()->getRoot()->clipAddChild(this);
00777                 }
00778 
00779                 // update the flag
00780                 _ClipLinkedInSonsOfAncestorSkeletonModelGroup= false;
00781         }
00782 }

void NL3D::CParticleSystemModel::updateLightingInfos void   ) 
 

=====================================================================================

Definition at line 208 of file particle_system_model.cpp.

References _LightableStateTouched, _ParticleSystem, MINI_TIMER, nlassert, and NL3D::PSStatsUpdateLightingInfos.

Referenced by doAnimate().

00209 {
00210         MINI_TIMER(PSStatsUpdateLightingInfos)
00211         nlassert(_ParticleSystem);
00212         if (!_LightableStateTouched) return;
00213         CTransform::setIsLightable(_ParticleSystem->hasLightableObjects());     
00214         _LightableStateTouched = false;
00215 }

void NL3D::CParticleSystemModel::updateOpacityInfos void   ) 
 

=====================================================================================

This update the infos about opacity (e.g are there solid faces and / or transparent faces in the system). This must be called when the system is instanciated, or when attributes have changed, such as the blending mode

Definition at line 196 of file particle_system_model.cpp.

References _ParticleSystem, _ToolDisplayEnabled, _TransparencyStateTouched, MINI_TIMER, nlassert, NL3D::PSStatsUpdateOpacityInfos, NL3D::CTransform::setOpacity(), and NL3D::CTransform::setTransparency().

Referenced by doAnimate(), and setParticleSystem().

00197 {
00198         MINI_TIMER(PSStatsUpdateOpacityInfos);
00199         nlassert(_ParticleSystem);
00200         if (!_TransparencyStateTouched) return;
00201         nlassert(_ParticleSystem);
00202         setOpacity(_ParticleSystem->hasOpaqueObjects() || _ToolDisplayEnabled);
00203         setTransparency(_ParticleSystem->hasTransparentObjects());
00204         _TransparencyStateTouched = false;
00205 }

void NL3D::CTransform::updateWorld  )  [protected, inherited]
 

Update the world state according to the parent world state and the local states.

Definition at line 663 of file transform.cpp.

References NL3D::CTransform::_AncestorSkeletonModel, NL3D::CTransform::_DontUnfreezeChildren, NL3D::CTransform::_FatherSkeletonModel, NL3D::CTransform::_Frozen, NL3D::CTransform::_HrcParent, NL3D::CTransform::_LightContribution, NL3D::CTransform::_LocalDate, NL3D::CTransform::_LocalMatrix, NL3D::CTransform::_LocalVis, NL3D::CHrcTrav::_MovingObjects, NL3D::CTransform::_WorldDate, NL3D::CTransform::_WorldMatrix, NL3D::CTransform::_WorldVis, NL3D::CHrcTrav::CurrentDate, NL3D::CTransform::ForceClipRoot, NL3D::CLightContribution::FrozenStaticLightSetup, NL3D::CScene::getHrcTrav(), NL3D::CTransform::getOwnerScene(), NL3D::CTransform::getStateFlag(), NL3D::CTransform::isLightable(), NL3D::CTransform::isTransformShape(), NL3D::CTransform::resetLighting(), and NL3D::CTransform::updateClipTravForAncestorSkeleton().

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

00664 {
00665         const   CMatrix         *pFatherWM;
00666         bool                            visFather;
00667 
00668         // If not root case, link to Fahter.
00669         if(_HrcParent)
00670         {
00671                 pFatherWM= &(_HrcParent->_WorldMatrix);
00672                 visFather= _HrcParent->_WorldVis;
00673 
00674                 // if _HrcParent is not frozen (for any reason), disable us!
00675 
00676                 if (!_HrcParent->_Frozen && !_HrcParent->_DontUnfreezeChildren)
00677                         _Frozen= false;
00678 
00679                 // herit _AncestorSkeletonModel
00680                 if (_HrcParent->_AncestorSkeletonModel)
00681                         // If my father has an _AncestorSkeletonModel, get it.
00682                         _AncestorSkeletonModel= _HrcParent->_AncestorSkeletonModel;
00683                 else
00684                         // else I have an ancestor skel model if I am sticked/binded directly to a skeleton model.
00685                         _AncestorSkeletonModel= _FatherSkeletonModel;
00686         }
00687         // else, default!!
00688         else
00689         {
00690                 pFatherWM= &(CMatrix::Identity);
00691                 visFather= true;
00692 
00693                 // at the root of the hierarchy, we have no parent, hence no FatherSkeletonModel nor _AncestorSkeletonModel.
00694                 _AncestorSkeletonModel= NULL;
00695 
00696                 // NB: Root is Frozen by essence :), so don't modify the frozen state here.
00697         }
00698 
00699         // Combine matrix
00700         if(_LocalDate>_WorldDate || (_HrcParent && _HrcParent->_WorldDate>_WorldDate) )
00701         {
00702                 // Must recompute the world matrix.  ONLY IF I AM NOT SKINNED/STICKED TO A SKELETON in the hierarchy!
00703                 if( _AncestorSkeletonModel==NULL )
00704                 {
00705                         _WorldMatrix=  *pFatherWM * _LocalMatrix;
00706                         _WorldDate= getOwnerScene()->getHrcTrav().CurrentDate;
00707 
00708                         // Add the model to the moving object list, only if I am a transform shape
00709                         if (!_Frozen && isTransformShape() && !getStateFlag(ForceClipRoot))
00710                                 getOwnerScene()->getHrcTrav()._MovingObjects.push_back (static_cast<CTransformShape*>(this));
00711                 }
00712         }
00713 
00714         // Update dynamic lighting.
00715         /*
00716                 If the model is not frozen in StaticLight, then must update lighting each frame.
00717                 Even if the object doesn't move, a new dynamic light may enter in its aera. Hence we must test
00718                 it in the light quadrid. StaticLight-ed Objects don't need it because they are inserted in a special quadgrid, 
00719                 where dynamics lights touch all StaticLight-ed object to force their computing
00720 
00721                 NB: not done if _AncestorSkeletonModel!=NULL. no need because  in this case, 
00722                 result is driven by the _LightContribution of the _AncestorSkeletonModel.
00723         */
00724         if( !_LightContribution.FrozenStaticLightSetup && _AncestorSkeletonModel==NULL )
00725         {
00726                 // if the model is lightable reset lighting
00727                 if( isLightable() )
00728                         resetLighting();
00729         }
00730 
00731         // Combine visibility.
00732         switch(_LocalVis)
00733         {
00734                 case CHrcTrav::Herit: _WorldVis= visFather; break;
00735                 case CHrcTrav::Hide: _WorldVis= false; break;
00736                 case CHrcTrav::Show: _WorldVis= true; break;
00737                 default: break;
00738         }
00739 
00740 
00741         // If I have an ancestor Skeleton Model, I must be binded in ClipTrav to the SonsOfAncestorSkeletonModelGroup
00742         updateClipTravForAncestorSkeleton();
00743 
00744 }

void NL3D::CTransform::updateWorldMatrixFromFather  )  [protected, inherited]
 

For Skeleton Object Stick. update the wolrd matrix. no-op if skinned. no-op if no AcnestorSkeletonModel. use standard father WorldMatrix if !_FatherSkeletonModel else get the correct boneId WorldMatrix from _FatherSkeletonModel

Definition at line 905 of file transform.cpp.

References NL3D::CTransform::_AncestorSkeletonModel, NL3D::CTransform::_FatherBoneId, NL3D::CTransform::_FatherSkeletonModel, NL3D::CTransform::_LocalMatrix, NL3D::CTransform::_WorldMatrix, NL3D::CSkeletonModel::Bones, NL3D::CTransform::hrcGetParent(), and NL3D::CTransform::isSkinned().

Referenced by NL3D::CTransform::forceCompute(), and NL3D::CTransform::traverseAnimDetail().

00906 {
00907         // If I am not skinned, and If I have a skeleton ancestor
00908         if(!isSkinned() && _AncestorSkeletonModel )
00909         {
00910                 // Compute the HRC _WorldMatrix.
00911                 // if I am not sticked.
00912                 if(!_FatherSkeletonModel)
00913                 {
00914                         // get the normal father worldMatrix in Hrc.
00915                         CTransform      *fatherTransform= hrcGetParent();
00916                         // if exist
00917                         if(fatherTransform)
00918                         {
00919                                 const CMatrix &parentWM= fatherTransform->_WorldMatrix;
00920                                 // combine worldMatrix
00921                                 _WorldMatrix= parentWM * _LocalMatrix;
00922                         }
00923                         else
00924                                 _WorldMatrix= _LocalMatrix;
00925                 }
00926                 else
00927                 {
00928                         // get the worldMatrix of the bone if I am sticked.
00929                         const CMatrix &parentWM= _FatherSkeletonModel->Bones[_FatherBoneId].getWorldMatrix();
00930                         // combine worldMatrix
00931                         _WorldMatrix= parentWM * _LocalMatrix;
00932                 }
00933         }
00934 }

bool NL3D::CTransform::useMergedPointLight  )  const [inline, inherited]
 

return true if the current light contribution of this model use a MergedPointLight

Definition at line 369 of file transform.h.

References NL3D::CTransform::_LightContribution, and NL3D::CLightContribution::UseMergedPointLight.

00369 {return _LightContribution.UseMergedPointLight;}


Friends And Related Function Documentation

friend class CParticleSystemManager [friend]
 

Definition at line 295 of file particle_system_model.h.

friend class CParticleSystemShape [friend]
 

Definition at line 294 of file particle_system_model.h.

friend struct CPtrInfo [friend, inherited]
 

Definition at line 67 of file smart_ptr.h.


Field Documentation

CSkeletonModel* NL3D::CTransform::_AncestorSkeletonModel [protected, inherited]
 

Definition at line 851 of file transform.h.

Referenced by NL3D::CClipTrav::clipSkeletonShadowMaps(), NL3D::CTransform::CTransform(), NL3D::CTransform::getAncestorSkeletonModel(), NL3D::CAnimDetailTrav::traverse(), NL3D::CTransform::traverseClip(), NL3D::CTransform::updateClipTravForAncestorSkeleton(), NL3D::CTransform::updateWorld(), and NL3D::CTransform::updateWorldMatrixFromFather().

CParticleSystemManager::TAlwaysAnimatedModelHandle NL3D::CParticleSystemModel::_AnimatedModelHandle [private]
 

a handle to say when the resources of the model (_ParticleSystem) are deleted

Definition at line 337 of file particle_system_model.h.

Referenced by invalidateAutoAnimatedHandle(), reallocRsc(), releasePSPointer(), and traverseClip().

CParticleSystem::TAnimType NL3D::CParticleSystemModel::_AnimType [private]
 

Definition at line 344 of file particle_system_model.h.

bool NL3D::CParticleSystemModel::_AutoGetEllapsedTime [private]
 

Definition at line 346 of file particle_system_model.h.

Referenced by enableAutoGetEllapsedTime(), and isAutoGetEllapsedTimeEnabled().

uint8 NL3D::CParticleSystemModel::_BypassGlobalUserParam [private]
 

Definition at line 360 of file particle_system_model.h.

sint64 NL3D::CTransform::_ClipDate [protected, inherited]
 

date of last traverseClip()

Definition at line 865 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), and NL3D::CTransform::traverseClip().

bool NL3D::CTransform::_ClipLinkedInSonsOfAncestorSkeletonModelGroup [protected, inherited]
 

Definition at line 849 of file transform.h.

Referenced by NL3D::CSkeletonModel::bindSkin(), NL3D::CTransform::CTransform(), and NL3D::CTransform::updateClipTravForAncestorSkeleton().

bool NL3D::CTransform::_DontUnfreezeChildren [protected, inherited]
 

Definition at line 848 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::setDontUnfreezeChildren(), and NL3D::CTransform::updateWorld().

bool NL3D::CParticleSystemModel::_EditionMode [private]
 

Definition at line 350 of file particle_system_model.h.

Referenced by checkDestroyCondition(), getEditionMode(), refreshRscDeletion(), setEditionMode(), traverseAnimDetail(), and traverseClip().

TAnimationTime NL3D::CParticleSystemModel::_EllapsedTime [private]
 

Definition at line 340 of file particle_system_model.h.

Referenced by getEllapsedTime(), and setEllapsedTime().

float NL3D::CParticleSystemModel::_EllapsedTimeRatio [private]
 

Definition at line 341 of file particle_system_model.h.

Referenced by getEllapsedTimeRatio(), and setEllapsedTimeRatio().

bool NL3D::CParticleSystemModel::_EmitterActive [private]
 

Definition at line 354 of file particle_system_model.h.

Referenced by activateEmitters(), hasActiveEmitters(), and reallocRsc().

uint NL3D::CTransform::_FatherBoneId [protected, inherited]
 

Deriver must change this method if isSkinnable(). It return a list of sphere relative to each bone of the father skeleton. Use with getSkinBoneUsage() to know to wich bone this sphere apply NB: if a sphere radius is -1, it means that the bone is not used (for any reason...) default is to return NULL.

Definition at line 618 of file transform.h.

Referenced by NL3D::CSkeletonModel::computeCLodVertexAlpha(), NL3D::CSkeletonModel::detachSkeletonSon(), NL3D::CTransform::forceCompute(), NL3D::CSkeletonModel::stickObjectEx(), and NL3D::CTransform::updateWorldMatrixFromFather().

CSkeletonModel* NL3D::CTransform::_FatherSkeletonModel [protected, inherited]
 

Deriver must change this method if isSkinnable(). It return a list of sphere relative to each bone of the father skeleton. Use with getSkinBoneUsage() to know to wich bone this sphere apply NB: if a sphere radius is -1, it means that the bone is not used (for any reason...) default is to return NULL.

Definition at line 616 of file transform.h.

Referenced by NL3D::CSkeletonModel::bindSkin(), NL3D::CTransform::CTransform(), NL3D::CSkeletonModel::detachSkeletonSon(), NL3D::CTransform::forceCompute(), NL3D::CSkeletonModel::forceComputeBone(), NL3D::CTransform::getSkeletonModel(), NL3D::CTransform::heritVisibility(), NL3D::CTransform::hide(), NL3D::CTransform::registerToChannelMixer(), NL3D::CTransform::setIsForceAnimDetail(), NL3D::CTransform::setOpacity(), NL3D::CTransform::setTransparency(), NL3D::CTransform::show(), NL3D::CSkeletonModel::stickObjectEx(), NL3D::CTransform::traverseClip(), NL3D::CTransform::updateWorld(), NL3D::CTransform::updateWorldMatrixFromFather(), and NL3D::CTransform::~CTransform().

bool NL3D::CTransform::_Frozen [protected, inherited]
 

Definition at line 847 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::freeze(), NL3D::CTransform::freezeHRC(), NL3D::CTransform::update(), and NL3D::CTransform::updateWorld().

bool NL3D::CParticleSystemModel::_InClusterAndVisible [private]
 

Definition at line 353 of file particle_system_model.h.

Referenced by traverseAnimDetail(), and traverseClip().

sint NL3D::CTransform::_IndexInVisibleList [protected, inherited]
 

date of last traverseClip()

Definition at line 869 of file transform.h.

Referenced by NL3D::CClipTrav::addVisibleModel(), NL3D::CTransform::CTransform(), and NL3D::CTransform::~CTransform().

bool NL3D::CParticleSystemModel::_InsertedInVisibleList [private]
 

if false, system should be recreated

Definition at line 352 of file particle_system_model.h.

Referenced by insertInVisibleList(), and traverseClip().

bool NL3D::CParticleSystemModel::_Invalidated [private]
 

Definition at line 351 of file particle_system_model.h.

Referenced by NL3D::CParticleSystemShape::render().

bool NL3D::CParticleSystemModel::_LightableStateTouched [private]
 

Definition at line 349 of file particle_system_model.h.

Referenced by touchLightableState(), and updateLightingInfos().

CLightContribution NL3D::CTransform::_LightContribution [protected, inherited]
 

The contribution of all lights. This enlarge the struct only of approx 15%.

Definition at line 626 of file transform.h.

Referenced by NL3D::CTransform::freezeStaticLightSetup(), NL3D::CTransform::getLightContribution(), NL3D::CSkeletonModel::renderSkins(), NL3D::CTransform::resetLighting(), NL3D::CTransform::traverseLight(), NL3D::CTransform::unfreezeStaticLightSetup(), NL3D::CTransform::updateWorld(), and NL3D::CTransform::useMergedPointLight().

CLightingManager::CQGItLightedModel NL3D::CTransform::_LightedModelIt [protected, inherited]
 

each transform may be in a quadGird of lighted models (see CLightingManager)

Definition at line 634 of file transform.h.

Referenced by NL3D::CTransform::unfreezeHRC(), NL3D::CTransform::update(), and NL3D::CTransform::~CTransform().

CLoadBalancingGroup* NL3D::CTransform::_LoadBalancingGroup [protected, inherited]
 

Definition at line 894 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::getLoadBalancingGroup(), NL3D::CTransform::initModel(), and NL3D::CTransform::setLoadBalancingGroup().

sint64 NL3D::CTransform::_LocalDate [protected, inherited]
 

Definition at line 841 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::update(), and NL3D::CTransform::updateWorld().

CMatrix NL3D::CTransform::_LocalMatrix [protected, inherited]
 

Hrc IN variables.

Reimplemented from NL3D::ITransformable.

Definition at line 839 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::update(), NL3D::CTransform::updateWorld(), and NL3D::CTransform::updateWorldMatrixFromFather().

CHrcTrav::TVisibility NL3D::CTransform::_LocalVis [protected, inherited]
 

Definition at line 840 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::update(), and NL3D::CTransform::updateWorld().

CParticleSystemManager::TModelHandle NL3D::CParticleSystemModel::_ModelHandle [private]
 

Definition at line 334 of file particle_system_model.h.

Referenced by reallocRsc(), and releasePSPointer().

std::vector<IPSModelObserver *> NL3D::CParticleSystemModel::_Observers [private]
 

Definition at line 356 of file particle_system_model.h.

NLMISC::CSmartPtr<CParticleSystem> NL3D::CParticleSystemModel::_ParticleSystem [private]
 

Definition at line 338 of file particle_system_model.h.

Referenced by activateEmitters(), checkAgainstPyramid(), forceInstanciate(), getAABBox(), getNumTriangles(), getPS(), hasActiveEmitters(), reallocRsc(), refreshRscDeletion(), releasePSPointer(), releaseRsc(), releaseRscAndInvalidate(), setEditionMode(), setParticleSystem(), setUserColor(), setZBias(), traverseAnimDetail(), traverseClip(), traverseRender(), updateLightingInfos(), and updateOpacityInfos().

uint32 NL3D::CTransform::_RenderFilterType [protected, inherited]
 

State for renderFiltering. Default is 0xFFFFFFFF (always displayed) Deriver work to change this value

Definition at line 830 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), and NL3D::CTransform::traverseClip().

CScene* NL3D::CParticleSystemModel::_Scene [private]
 

Definition at line 339 of file particle_system_model.h.

Referenced by NL3D::CParticleSystemShape::createInstance().

bool NL3D::CParticleSystemModel::_ToolDisplayEnabled [private]
 

Definition at line 347 of file particle_system_model.h.

Referenced by enableDisplayTools(), isToolDisplayEnabled(), and updateOpacityInfos().

bool NL3D::CParticleSystemModel::_TransparencyStateTouched [private]
 

Definition at line 348 of file particle_system_model.h.

Referenced by touchTransparencyState(), and updateOpacityInfos().

CAnimatedValueBool NL3D::CParticleSystemModel::_TriggerAnimatedValue [private]
 

Definition at line 357 of file particle_system_model.h.

Referenced by CParticleSystemModel(), getValue(), and traverseAnimDetail().

NLMISC::CRGBA NL3D::CParticleSystemModel::_UserColor [private]
 

Definition at line 361 of file particle_system_model.h.

NLMISC::CMatrix NL3D::CParticleSystemModel::_UserMatrix [private]
 

Definition at line 362 of file particle_system_model.h.

Referenced by doAnimate(), forceSetUserMatrix(), getUserMatrix(), and setUserMatrix().

CAnimatedValueFloat NL3D::CParticleSystemModel::_UserParam[MaxPSUserParam] [private]
 

user params of the system

Definition at line 359 of file particle_system_model.h.

bool NL3D::CTransform::_Visible [protected, inherited]
 

set to true is the object is visible (not clipped).

Definition at line 867 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::isClipVisible(), and NL3D::CTransform::traverseClip().

sint64 NL3D::CTransform::_WorldDate [protected, inherited]
 

Definition at line 845 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::hrcLinkSon(), NL3D::CTransform::hrcUnlink(), and NL3D::CTransform::updateWorld().

CMatrix NL3D::CTransform::_WorldMatrix [protected, inherited]
 

Hrc OUT variables.

Definition at line 843 of file transform.h.

Referenced by NL3D::CTransform::updateWorld(), and NL3D::CTransform::updateWorldMatrixFromFather().

bool NL3D::CTransform::_WorldVis [protected, inherited]
 

Definition at line 844 of file transform.h.

Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::isHrcVisible(), NL3D::CTransform::traverseClip(), and NL3D::CTransform::updateWorld().

float NL3D::CParticleSystemModel::_ZBias [private]
 

Definition at line 363 of file particle_system_model.h.

sint NLMISC::CRefCount::crefs [mutable, inherited]
 

Definition at line 79 of file smart_ptr.h.

Referenced by NLMISC::CRefCount::CRefCount(), NLMISC::CRefCount::getRefCount(), and NLMISC::CRefCount::~CRefCount().

CRefCount::CPtrInfo NLMISC::CRefCount::NullPtrInfo [static, inherited]
 

Referenced by NLMISC::CRefCount::CRefCount().

CPtrInfo* NLMISC::CRefCount::pinfo [mutable, inherited]
 

Definition at line 80 of file smart_ptr.h.

Referenced by NLMISC::CRefCount::CRefCount(), and NLMISC::CRefCount::~CRefCount().

CSmartPtr<IShape> NL3D::CTransformShape::Shape [inherited]
 

The shape, the object instancied.

Definition at line 72 of file transform_shape.h.

Referenced by NL3D::CTransformShape::clip(), NL3D::CSkeletonModel::computeLodTexture(), NL3D::CWaveMakerShape::createInstance(), NL3D::CWaterShape::createInstance(), NL3D::CSkeletonShape::createInstance(), NL3D::IShape::createInstance(), NL3D::CSegRemanenceShape::createInstance(), NL3D::CScene::createInstance(), NL3D::CParticleSystemShape::createInstance(), NL3D::CMeshMultiLod::createInstance(), NL3D::CMeshMRMSkinned::createInstance(), NL3D::CMeshMRM::createInstance(), NL3D::CMesh::createInstance(), NL3D::CFlareShape::createInstance(), NL3D::CScene::deleteInstance(), NL3D::CTransformShape::getAABBox(), NL3D::CTransformShape::getNumTriangles(), NL3D::CSkeletonUser::getShapeDistMax(), NL3D::CInstanceUser::getShapeDistMax(), NL3D::CTransformShape::profileRender(), NL3D::CSkeletonUser::setShapeDistMax(), NL3D::CInstanceUser::setShapeDistMax(), and NL3D::CTransformShape::traverseRender().


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