#include <cluster.h>
Inheritance diagram for NL3D::CCluster:
The objects are in the MOT clip traversal
Nevrax France
Definition at line 62 of file cluster.h.
Herited from IAnimatable | |
enum | TAnimValues { OwnerBit = IAnimatable::AnimValueLast, PosValue, RotEulerValue, RotQuatValue, ScaleValue, PivotValue, AnimValueLast } |
Added values. More... | |
virtual IAnimatedValue * | getValue (uint valueId) |
From IAnimatable. | |
virtual const char * | getValueName (uint valueId) const |
From IAnimatable. | |
[NOHEADER] | |
void | freezeStaticLightSetup (CPointLight *pointLight[NL3D_MAX_LIGHT_CONTRIBUTION], uint numPointLights, uint8 sunContribution, CPointLight *frozenAmbientlight) |
const CLightContribution & | getLightContribution () const |
virtual void | getLightHotSpotInWorld (CVector &modelPos, float &modelRadius) const |
bool | getUserLightable () const |
uint32 | isBigLightable () const |
uint32 | isLightable () const |
void | resetLighting () |
void | setUserLightable (bool enable) |
void | unfreezeStaticLightSetup () |
bool | useMergedPointLight () const |
Derived from ITransformable. | |
virtual ITrack * | getDefaultTrack (uint valueId) |
Default Track Values are identity (pos,pivot= 0, scale= 1, rots=0). | |
virtual void | registerToChannelMixer (CChannelMixer *chanMixer, const std::string &prefix) |
Model updating/traversing features | |
virtual void | initModel () |
virtual void | profileRender () |
Called at RenderTrav to profile current render. no-op per default. | |
virtual void | traverseAnimDetail () |
call updateWorldMatrixFromFather(), then traverseAnimDetailWithoutUpdateWorldMatrix() | |
virtual void | traverseLight () |
traverse the lightedModel per default: recompute LightContribution is isLightable() | |
virtual void | traverseLoadBalancing () |
no-op by default | |
virtual void | traverseRender () |
no-op by default | |
virtual void | update () |
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 | applyMatrix (const NLMISC::CMatrix &m) |
Apply the given matrix to this cluster local / world volume & bbox. | |
void | cameraRayClip (const CVector &start, const CVector &end, std::vector< CCluster * > &clusterVisited) |
CCluster () | |
bool | compareMatrixDate (uint64 callerDate) const |
void | freeze () |
void | freezeHRC () |
virtual void | getAABBox (NLMISC::CAABBox &bbox) const |
CSkeletonModel * | getAncestorSkeletonModel () const |
NLMISC::CAABBox & | getBBox () |
bool | getChannelMixerOwnerShip () const |
CInstanceGroup * | getClusterSystem () |
bool | getForceClipRoot () const |
const CMatrix & | getMatrix () const |
Get the matrix, compute her if necessary (work in all modes). | |
uint64 | getMatrixDate () const |
uint32 | getNbPortals () |
uint | getOrderingLayer () const |
Get the ordering layer. | |
CScene * | getOwnerScene () const |
get the scene which has created us | |
CPortal * | getPortal (uint32 pos) |
const sint & | getRefCount () const |
CSkeletonModel * | getSkeletonModel () const |
Get the skeleton model. Returnr NULL in normal mode. | |
bool | getUserClipping () const |
Return the user clipping state. | |
CHrcTrav::TVisibility | getVisibility () |
Get the local visibility state. | |
const CMatrix & | getWorldMatrix () 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 | isIn (const NLMISC::CVector ¢er, float size) |
bool | isIn (const NLMISC::CAABBox &b) |
bool | isIn (const NLMISC::CVector &p) |
uint32 | isOpaque () |
uint32 | isQuadGridClipEnabled () const |
bool | isRoot () |
uint32 | isTransparent () |
void | link (CPortal *portal) |
bool | makeVolume (const NLMISC::CVector &p1, const NLMISC::CVector &p2, const NLMISC::CVector &p3) |
void | recursTraverseClip (CTransform *caller) |
void | resetPortalLinks () |
Linking. | |
void | serial (NLMISC::IStream &f) |
Serial. | |
void | setChannelMixerOwnerShip (bool enable=true) |
void | setClusterSystem (CInstanceGroup *pCS) |
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 | setWorldMatrix (const CMatrix &mat) |
void | setWorldMatrix (const NLMISC::CMatrix &WM) |
void | show () |
Show the objet and his sons. | |
void | unfreezeHRC () |
void | unlink (CPortal *portal) |
~CCluster () | |
CTransform Specialisation | |
virtual bool | clip () |
clip method called by traverseClip(). deafult is always visible | |
bool | isCameraIn () const |
void | setCameraIn (bool state) |
virtual void | traverseClip () |
virtual void | traverseHrc () |
Each method is called in its associated traversal. | |
const std::string & | getEnvironmentFx () |
NLMISC::TStringId | getEnvironmentFxId () |
const std::string & | getSoundGroup () |
NLMISC::TStringId | getSoundGroupId () |
void | setEnvironmentFx (const NLMISC::TStringId &environmentFxId) |
void | setEnvironmentFx (const std::string &environmentFx) |
void | setSoundGroup (const NLMISC::TStringId &soundGroupId) |
void | setSoundGroup (const std::string &soundGroup) |
Static Public Member Functions | |
const char * | getPivotValueName () |
const char * | getPosValueName () |
const char * | getRotEulerValueName () |
const char * | getRotQuatValueName () |
const char * | getScaleValueName () |
void | registerBasic () |
Call at the begining of the program, to register the model. | |
Data Fields | |
CQuadGrid< CCluster * >::CIterator | AccelIt |
bool | AudibleFromFather |
std::vector< CCluster * > | Children |
sint | crefs |
CCluster * | Father |
bool | FatherAudible |
bool | FatherVisible |
CInstanceGroup * | Group |
std::string | Name |
CPtrInfo * | pinfo |
bool | VisibleFromFather |
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 () |
CChannelMixer * | getChannelMixer () 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. | |
virtual void | unlinkFromQuadCluster () |
special feature for CQuadGridClipManager. called at unfreezeHRC(). Used by CTransformShape. | |
Protected Attributes | |
uint32 | _RenderFilterType |
Private Member Functions | |
void | unlinkFromClusterTree () |
void | unlinkFromParent () |
void | unlinkSons () |
Static Private Member Functions | |
CTransform * | creator () |
Private Attributes | |
NLMISC::CAABBox | _BBox |
bool | _CameraIn |
NLMISC::TStringId | _EnvironmentFxId |
Environement Fx name Id (using CStringMapper). | |
NLMISC::CAABBox | _LocalBBox |
std::vector< NLMISC::CPlane > | _LocalVolume |
All planes are oriented to the exterior of the volume. | |
std::vector< CPortal * > | _Portals |
Portals list. | |
NLMISC::TStringId | _SoundGroupId |
Sound group name id. | |
bool | _Visited |
***** Clip Traversal | |
std::vector< NLMISC::CPlane > | _Volume |
All planes are oriented to the exterior of the volume. | |
Friends | |
class | CInstanceGroup |
Friends classes. | |
struct | CPtrInfo |
|
Added values.
Reimplemented from NL3D::IAnimatable. Reimplemented in NL3D::CCamera, NL3D::CMeshBaseInstance, NL3D::CParticleSystemModel, NL3D::CSegRemanence, and NL3D::CSkeletonModel. Definition at line 280 of file transformable.h.
00281 { 00282 OwnerBit= IAnimatable::AnimValueLast, 00283 PosValue, 00284 RotEulerValue, 00285 RotQuatValue, 00286 ScaleValue, 00287 PivotValue, 00288 AnimValueLast 00289 }; |
|
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 }; |
|
Definition at line 48 of file cluster.cpp. References _CameraIn, _EnvironmentFxId, _SoundGroupId, _Visited, AudibleFromFather, Father, FatherAudible, FatherVisible, Group, and VisibleFromFather.
00049 { 00050 FatherVisible = VisibleFromFather = false; 00051 FatherAudible = AudibleFromFather = false; 00052 Father = NULL; 00053 Group = NULL; 00054 00055 // map a no fx string 00056 _EnvironmentFxId = CStringMapper::map("no fx"); 00057 // map a no soundgroup string 00058 _SoundGroupId = CStringMapper::map(""); 00059 00060 // I am a transform cluster 00061 CTransform::setIsCluster(true); 00062 00063 // Default: not traversed 00064 _Visited= false; 00065 _CameraIn= false; 00066 } |
|
Definition at line 70 of file cluster.cpp. References unlinkFromClusterTree().
00071 { 00072 unlinkFromClusterTree(); 00073 } |
|
This is a tool function which add a given value to a channel.
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(), NL3D::CParticleSystemModel::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 } |
|
Apply the given matrix to this cluster local / world volume & bbox.
Definition at line 477 of file cluster.cpp. References _BBox, _LocalBBox, _LocalVolume, _Volume, NLMISC::CMatrix::invert(), nlassert, NLMISC::CAABBox::transformAABBox(), and uint32.
00478 { 00479 uint32 i; 00480 CMatrix invM = m; 00481 invM.invert(); 00482 nlassert(_Volume.size() == _LocalVolume.size()); 00483 00484 // Transform the volume 00485 for (i = 0; i < _LocalVolume.size(); ++i) 00486 { 00487 _Volume[i] = _Volume[i] * invM; 00488 _LocalVolume[i] = _LocalVolume[i] * invM; 00489 } 00490 00491 // Transform the bounding boxes 00492 _BBox = NLMISC::CAABBox::transformAABBox(m, _BBox); 00493 _LocalBBox = NLMISC::CAABBox::transformAABBox(m, _LocalBBox); 00494 } |
|
Definition at line 498 of file cluster.cpp. References _Visited, Children, NL3D::CPortal::clipRay(), Father, FatherVisible, NL3D::CPortal::getCluster(), getNbPortals(), getPortal(), and uint.
00499 { 00500 uint i; 00501 if (_Visited) 00502 return; 00503 _Visited = true; 00504 00505 // The cluster is visible because we are in it. add it to the list of cluster (if not already inserted) 00506 for(i=0;i<clusterVisited.size();i++) 00507 { 00508 if(clusterVisited[i]==this) 00509 break; 00510 } 00511 if(i==clusterVisited.size()) 00512 clusterVisited.push_back(this); 00513 00514 // look through portals 00515 for (i = 0; i < getNbPortals(); ++i) 00516 { 00517 CPortal*pPortal = getPortal (i); 00518 CCluster *pOtherSideCluster; 00519 if (pPortal->getCluster(0) == this) 00520 pOtherSideCluster = pPortal->getCluster (1); 00521 else 00522 pOtherSideCluster = pPortal->getCluster (0); 00523 00524 /* 00525 bool backfaceclipped = false; 00526 if (Father != NULL) 00527 if (caller == Father) // If the caller is the father 00528 if (VisibleFromFather) 00529 // Backface clipping 00530 if( !pPortal->isInFront( clipTrav.CamPos )) 00531 backfaceclipped = true; 00532 if (!backfaceclipped && pOtherSideCluster)*/ 00533 00534 if (pOtherSideCluster) 00535 { 00536 if (pPortal->clipRay (start, end)) 00537 { 00538 pOtherSideCluster->cameraRayClip(start, end, clusterVisited); 00539 } 00540 } 00541 } 00542 00543 // Link up in hierarchy 00544 if ((FatherVisible)&&(Father != NULL)) 00545 { 00546 Father->cameraRayClip(start, end, clusterVisited); 00547 } 00548 00549 // Link down in hierarchy 00550 for (i = 0; i < Children.size(); ++i) 00551 { 00552 if (Children[i]->VisibleFromFather) 00553 { 00554 Children[i]->cameraRayClip(start, end, clusterVisited); 00555 } 00556 } 00557 00558 _Visited = false; 00559 } |
|
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;} |
|
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;} |
|
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(), NL3D::CParticleSystemModel::doAnimate(), and NL3D::CAnimatedMaterial::update().
00234 { 00235 _BitSet&= ~(1<<valueId); 00236 } |
|
clip method called by traverseClip(). deafult is always visible
Reimplemented from NL3D::CTransform. Definition at line 390 of file cluster.cpp.
00391 { 00392 return true; 00393 } |
|
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 } |
|
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 } |
|
Definition at line 1265 of file transform.cpp. References NL3D::CTransform::_ClipSons, index, nlassert, NL3D::CFastPtrList< CTransform >::size(), and uint. Referenced by recursTraverseClip(), NL3D::CTransform::traverseClip(), NL3D::CRootModel::traverseClip(), NL3D::CParticleSystemModel::traverseClip(), and NL3D::CTransform::~CTransform().
|
|
Definition at line 237 of file transform.h. References NL3D::CTransform::_ClipSons, NL3D::CFastPtrList< CTransform >::size(), and uint. Referenced by recursTraverseClip(), NL3D::CTransform::traverseClip(), NL3D::CRootModel::traverseClip(), NL3D::CParticleSystemModel::traverseClip(), and NL3D::CTransform::~CTransform().
00237 {return _ClipSons.size();}
|
|
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();}
|
|
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().
|
|
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 } |
|
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 } |
|
Special For Skeleton Caster. When Skeletons cast shadows, they first compute the WorldBBox. The model should compute its bbox in World (best fit).
Reimplemented in NL3D::CMeshInstance, and NL3D::CSkeletonModel. Definition at line 521 of file transform.h. Referenced by NL3D::CSkeletonModel::computeWorldBBoxForShadow().
00521 {return false;} |
|
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 {} |
|
Reimplemented from NL3D::CTransform. Definition at line 153 of file cluster.h.
00153 {return new CCluster;} |
|
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 {} |
|
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 } |
|
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);} |
|
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 } |
|
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:
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().
|
|
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 } |
|
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 } |
|
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 {} |
|
Get the untransformed AABBox of the transform. NULL (gtCenter()= 0, gtSize()==0) by default. Reimplemented in NL3D::CParticleSystemModel, and NL3D::CTransformShape. Definition at line 514 of file transform.cpp. References NLMISC::CAABBox::setCenter(), and NLMISC::CAABBox::setHalfSize(). Referenced by NL3D::CTransform::traverseLight().
00515 { 00516 bbox.setCenter(CVector::Null); 00517 bbox.setHalfSize(CVector::Null); 00518 } |
|
Definition at line 207 of file transform.h. References NL3D::CTransform::_AncestorSkeletonModel. Referenced by NL3D::CParticleSystemManager::processAnimate().
00207 { return _AncestorSkeletonModel; } |
|
Definition at line 101 of file cluster.h. References _BBox. Referenced by NL3D::CClipTrav::registerCluster().
00101 { return _BBox; } |
|
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;}
|
|
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; } |
|
Definition at line 320 of file transform.h. References NL3D::CTransform::_ClusterSystem. Referenced by NL3D::CScene::findCameraClusterSystemFromRay(), and NL3D::CClipTrav::traverse().
00320 { return _ClusterSystem; }
|
|
Default Track Values are identity (pos,pivot= 0, scale= 1, rots=0).
Implements NL3D::ITransformable. Reimplemented in NL3D::CCamera, NL3D::CMeshBaseInstance, NL3D::CParticleSystemModel, NL3D::CSegRemanence, NL3D::CWaterModel, and NL3D::CWaveMakerModel. Definition at line 311 of file transform.cpp.
00312 { 00313 // Cyril: prefer do it here in CTransform, because of CCamera, CLight etc... (which may not need a default value too!!) 00314 00315 // what value ? 00316 switch (valueId) 00317 { 00318 case PosValue: return &DefaultPos; 00319 case RotEulerValue: return &DefaultRotEuler; 00320 case RotQuatValue: return &DefaultRotQuat; 00321 case ScaleValue: return &DefaultScale; 00322 case PivotValue: return &DefaultPivot; 00323 } 00324 00325 // No, only ITrnasformable values! 00326 nlstop; 00327 // Deriver note: else call BaseClass::getDefaultTrack(valueId); 00328 00329 return NULL; 00330 00331 } |
|
Definition at line 101 of file cluster.cpp. References _EnvironmentFxId.
00102 {
00103 return CStringMapper::unmap(_EnvironmentFxId);
00104 }
|
|
Definition at line 106 of file cluster.cpp. References _EnvironmentFxId.
00107 { 00108 return _EnvironmentFxId; 00109 } |
|
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; } |
|
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; } |
|
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 in NL3D::CSkeletonModel, and NL3D::CTransformShape. Definition at line 381 of file transform.h. Referenced by NL3D::CLightingManager::computeModelLightContributions().
00381 {modelPos= CVector::Null; modelRadius=0;} |
|
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 } |
|
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;} |
|
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 } |
|
see setMeanColor()
Definition at line 437 of file transform.h. References NL3D::CTransform::_MeanColor.
00437 {return _MeanColor;}
|
|
Definition at line 111 of file cluster.h. References _Portals, and uint32. Referenced by cameraRayClip(), recursTraverseClip(), and traverseHrc().
00111 {return _Portals.size();} |
|
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; }
|
|
|
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 } |
|
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 } |
|
Definition at line 117 of file transformable.cpp. Referenced by NL3D::ITransformable::getValueName().
00118 { 00119 return "pivot"; 00120 } |
|
Definition at line 112 of file cluster.h. References _Portals, and uint32. Referenced by cameraRayClip(), recursTraverseClip(), and traverseHrc().
00112 {return _Portals[pos];} |
|
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 } |
|
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 } |
|
Definition at line 97 of file transformable.cpp. Referenced by NL3D::ITransformable::getValueName().
00098 { 00099 return "pos"; 00100 } |
|
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 } |
|
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();} |
|
Definition at line 70 of file smart_ptr.h. References NLMISC::CRefCount::crefs, and sint.
00071 { 00072 return crefs; 00073 } |
|
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 } |
|
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 } |
|
Definition at line 102 of file transformable.cpp. Referenced by NL3D::ITransformable::getValueName().
00103 { 00104 return "roteuler"; 00105 } |
|
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 }
|
|
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 } |
|
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 } |
|
Definition at line 107 of file transformable.cpp. Referenced by NL3D::ITransformable::getValueName().
00108 { 00109 return "rotquat"; 00110 } |
|
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 } |
|
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 } |
|
Definition at line 112 of file transformable.cpp. Referenced by NL3D::ITransformable::getValueName().
00113 { 00114 return "scale"; 00115 } |
|
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;}
|
|
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 NL3D::CParticleSystemModel::traverseClip().
00680 { return _ForceCLodSticked; }
|
|
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;} |
|
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;}
|
|
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;}
|
|
Definition at line 84 of file cluster.cpp. References _SoundGroupId.
00085 {
00086 return CStringMapper::unmap(_SoundGroupId);
00087 }
|
|
Definition at line 89 of file cluster.cpp. References _SoundGroupId.
00090 { 00091 return _SoundGroupId; 00092 } |
|
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 }
|
|
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 } |
|
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;} |
|
From IAnimatable.
Implements NL3D::IAnimatable. Reimplemented in NL3D::CCamera, and NL3D::CParticleSystemModel. Definition at line 58 of file transformable.cpp. References NL3D::ITransformable::_Pivot, NL3D::ITransformable::_RotEuler, NL3D::ITransformable::_RotQuat, nlstop, NL3D::ITransformable::PivotValue, NL3D::ITransformable::PosValue, NL3D::ITransformable::RotEulerValue, NL3D::ITransformable::RotQuatValue, NL3D::ITransformable::ScaleValue, and uint.
00059 { 00060 // what value ? 00061 switch (valueId) 00062 { 00063 case PosValue: return &_Pos; 00064 case RotEulerValue: return &_RotEuler; 00065 case RotQuatValue: return &_RotQuat; 00066 case ScaleValue: return &_Scale; 00067 case PivotValue: return &_Pivot; 00068 } 00069 00070 // No, only ITrnasformable values! 00071 nlstop; 00072 // Deriver note: else call BaseClass::getValue(valueId); 00073 00074 return NULL; 00075 } |
|
|
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(), NL3D::CParticleSystemModel::traverseAnimDetail(), and NL3D::CSkeletonModel::updateSkinRenderLists().
00203 {return Visibility;}
|
|
|
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 } |
|
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 } |
|
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().
|
|
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();}
|
|
Definition at line 218 of file transform.h. References NL3D::CTransform::_HrcParent. Referenced by NL3D::CMeshBaseInstance::traverseHrc(), and NL3D::CTransform::updateWorldMatrixFromFather().
00218 {return _HrcParent;}
|
|
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 } |
|
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 } |
|
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 } |
|
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);} |
|
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);} |
|
Definition at line 142 of file cluster.h. References _CameraIn. Referenced by recursTraverseClip().
00142 {return _CameraIn;} |
|
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(), NL3D::CParticleSystemModel::traverseClip(), and NL3D::CPointLightModel::traverseLight().
00314 { 00315 return _Visible; 00316 } |
|
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);} |
|
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;} |
|
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 } |
|
return true if the Sphere intersect the cluster Definition at line 216 of file cluster.cpp. References _Volume, size, and uint.
|
|
return true if the Bounding box intersect the cluster Definition at line 205 of file cluster.cpp. References _Volume, NLMISC::CAABBox::clipBack(), and uint.
|
|
return true if the vertex is in the cluster volume Definition at line 195 of file cluster.cpp. References _Volume, CLUSTERPRECISION, and uint. Referenced by NL3D::CScene::findCameraClusterSystemFromRay(), and NL3D::CClipTrav::traverse().
00196 { 00197 for (uint i = 0; i < _Volume.size(); ++i) 00198 if (_Volume[i]*p > CLUSTERPRECISION) 00199 return false; 00200 return true; 00201 } |
|
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.
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);} |
|
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);} |
|
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);} |
|
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);} |
|
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);} |
|
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); } |
|
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);} |
|
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);} |
|
Definition at line 120 of file cluster.h. References _LocalVolume. Referenced by traverseHrc().
00120 { return _LocalVolume.size() == 0; } |
|
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);} |
|
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;} |
|
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);} |
|
Return non 0 int if the value as been touched else 0.
Definition at line 184 of file animatable.h. References NL3D::IAnimatable::_BitSet, uint, and uint32. Referenced by NL3D::CParticleSystemModel::doAnimate(), NL3D::ITransformable::needCompute(), NL3D::IAnimatable::propagateTouch(), and NL3D::CAnimatedMaterial::update().
00185 {
00186 return _BitSet&(1<<valueId);
00187 }
|
|
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);} |
|
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); } |
|
Definition at line 231 of file cluster.cpp. References _Portals.
00232 { 00233 _Portals.push_back (portal); 00234 } |
|
Setup Matrix by the lookAt method. Work only in DirectMatrix mode and RotQuat mode (not euler...).
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 } |
|
Make the cluster volume from a plane made with 3 points All the faces passed must be connected with at least one of the others return false if the plane we want to add make the volume concave Definition at line 156 of file cluster.cpp. References _BBox, _LocalBBox, _LocalVolume, _Volume, CLUSTERPRECISION, NLMISC::CAABBox::extend(), NLMISC::CPlane::make(), NLMISC::CPlane::normalize(), NLMISC::CAABBox::setCenter(), and uint.
00157 { 00158 uint i; 00159 // Check if the plane is not close to a plane that already define the cluster 00160 for (i = 0; i < _LocalVolume.size(); ++i) 00161 { 00162 float f1 = fabsf (_LocalVolume[i]*p1); 00163 float f2 = fabsf (_LocalVolume[i]*p2); 00164 float f3 = fabsf (_LocalVolume[i]*p3); 00165 if ((f1 < CLUSTERPRECISION) && (f2 < CLUSTERPRECISION) && (f3 < CLUSTERPRECISION)) 00166 return true; 00167 } 00168 // Check if we want to add a triangle not completely in the predefined volume 00169 for (i = 0; i < _LocalVolume.size(); ++i) 00170 { 00171 float f1 = _LocalVolume[i]*p1; 00172 float f2 = _LocalVolume[i]*p2; 00173 float f3 = _LocalVolume[i]*p3; 00174 if ((f1 > CLUSTERPRECISION) && (f2 > CLUSTERPRECISION) && (f3 > CLUSTERPRECISION)) 00175 return false; 00176 } 00177 // Build volume 00178 CPlane p; 00179 p.make (p1, p2, p3); 00180 p.normalize(); 00181 _LocalVolume.push_back (p); 00182 // Build BBox 00183 if (_LocalVolume.size() == 1) 00184 _LocalBBox.setCenter(p1); 00185 else 00186 _LocalBBox.extend(p1); 00187 _LocalBBox.extend(p2); 00188 _LocalBBox.extend(p3); 00189 _Volume = _LocalVolume; 00190 _BBox = _LocalBBox; 00191 return true; 00192 } |
|
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);} |
|
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);} |
|
Called at RenderTrav to profile current render. no-op per default.
Reimplemented in NL3D::CLandscapeModel, NL3D::CQuadGridClipManager, and NL3D::CTransformShape. Definition at line 1137 of file transform.cpp. Referenced by NL3D::CRenderTrav::traverse().
01138 {
01139 // no-op
01140 }
|
|
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.
Reimplemented in NL3D::CLandscapeModel. Definition at line 506 of file transform.h. Referenced by NL3D::CShadowMapManager::renderProject().
00506 {} |
|
Definition at line 405 of file cluster.cpp. References _Visited, NL3D::CClipTrav::addVisibleCluster(), NL3D::CTravCameraScene::CamPos, Children, NL3D::CTransform::clipGetChild(), NL3D::CTransform::clipGetNumChildren(), NL3D::CPortal::clipPyramid(), Father, FatherVisible, NL3D::CScene::getClipTrav(), NL3D::CPortal::getCluster(), NL3D::CClipTrav::getClusterVisibilityTracking(), getNbPortals(), NL3D::CTransform::getOwnerScene(), getPortal(), isCameraIn(), NL3D::CPortal::isInFront(), num, NL3D::CTransform::traverseClip(), uint, uint32, VisibleFromFather, and NL3D::CClipTrav::WorldPyramid. Referenced by traverseClip().
00406 { 00407 if (_Visited) 00408 return; 00409 _Visited = true; 00410 00411 // The cluster is visible because we are in it 00412 // So clip the models attached (with MOT links) to the cluster 00413 uint num= clipGetNumChildren(); 00414 uint32 i; 00415 for(i=0;i<num;i++) 00416 clipGetChild(i)->traverseClip(); 00417 00418 // Debug visible clusters 00419 CClipTrav &clipTrav = getOwnerScene()->getClipTrav(); 00420 if (clipTrav.getClusterVisibilityTracking()) 00421 { 00422 clipTrav.addVisibleCluster(this); 00423 } 00424 00425 // And look through portals 00426 for (i = 0; i < getNbPortals(); ++i) 00427 { 00428 CPortal*pPortal = getPortal (i); 00429 vector<CPlane> WorldPyrTemp = clipTrav.WorldPyramid; 00430 bool backfaceclipped = false; 00431 CCluster *pOtherSideCluster; 00432 if (pPortal->getCluster(0) == this) 00433 pOtherSideCluster = pPortal->getCluster (1); 00434 else 00435 pOtherSideCluster = pPortal->getCluster (0); 00436 00437 if (Father != NULL) 00438 if (caller == Father) // If the caller is the father 00439 if (VisibleFromFather) 00440 // Backface clipping 00441 if( !pPortal->isInFront( clipTrav.CamPos )) 00442 backfaceclipped = true; 00443 00444 if (!backfaceclipped && pOtherSideCluster) 00445 { 00446 /* If the otherSide cluster is fully visible because the camera is IN, then don't need to clip. 00447 This is important to landscape test, to ensure that pyramid are strictly equal from 2 paths which 00448 come from the 2 clusters where the camera start 00449 */ 00450 if (pOtherSideCluster->isCameraIn() || pPortal->clipPyramid (clipTrav.CamPos, clipTrav.WorldPyramid)) 00451 { 00452 pOtherSideCluster->recursTraverseClip(this); 00453 } 00454 } 00455 00456 clipTrav.WorldPyramid = WorldPyrTemp; 00457 } 00458 00459 // Link up in hierarchy 00460 if ((FatherVisible)&&(Father != NULL)) 00461 { 00462 Father->recursTraverseClip(this); 00463 } 00464 00465 // Link down in hierarchy 00466 for (i = 0; i < Children.size(); ++i) 00467 if (Children[i]->VisibleFromFather) 00468 { 00469 Children[i]->recursTraverseClip(this); 00470 } 00471 00472 _Visited = false; 00473 } |
|
Call at the begining of the program, to register the model.
Reimplemented from NL3D::CTransform. Definition at line 150 of file cluster.cpp. References NL3D::ClusterId.
00151 { 00152 CScene::registerModel (ClusterId, 0, CCluster::creator); 00153 } |
|
register transform channels (in global anim mode).
Implements NL3D::ITransformable. Reimplemented in NL3D::CCamera, NL3D::CMeshBaseInstance, NL3D::CParticleSystemModel, NL3D::CSegRemanence, and NL3D::CSkeletonModel. Definition at line 334 of file transform.cpp. References NL3D::CTransform::_FatherSkeletonModel, NL3D::IAnimatable::addValue(), NL3D::CSkeletonModel::dirtSkinRenderLists(), NL3D::CTransform::getChannelMixerOwnerShip(), NL3D::CTransform::getStateFlag(), NL3D::CTransform::IsAnimDetailable, NL3D::CTransform::IsForceAnimDetail, NL3D::CTransform::isSkinned(), nlassert, NL3D::CTransform::setChannelMixerOwnerShip(), and NL3D::CTransform::setStateFlag(). Referenced by NL3D::CPlayListUser::registerTransform().
00335 { 00336 if (getChannelMixerOwnerShip() && chanMixer != _ChannelMixer) 00337 { 00338 delete _ChannelMixer; 00339 setChannelMixerOwnerShip(false); 00340 } 00341 00342 // Hey!! we are animated!! 00343 _ChannelMixer= chanMixer; 00344 00345 // Update flag, if we must be inserted in AnimDetail 00346 setStateFlag(IsAnimDetailable, _ChannelMixer || getStateFlag(IsForceAnimDetail) ); 00347 00348 // If skinned, then must inform skeleton parent that it must recompute skin render/animDetail lists 00349 if(isSkinned()) 00350 { 00351 nlassert(_FatherSkeletonModel); 00352 _FatherSkeletonModel->dirtSkinRenderLists(); 00353 } 00354 00355 // For CTransfom, channels are not detailled. 00356 addValue(chanMixer, PosValue, OwnerBit, prefix, false); 00357 addValue(chanMixer, RotEulerValue, OwnerBit, prefix, false); 00358 addValue(chanMixer, RotQuatValue, OwnerBit, prefix, false); 00359 addValue(chanMixer, ScaleValue, OwnerBit, prefix, false); 00360 addValue(chanMixer, PivotValue, OwnerBit, prefix, false); 00361 00362 // Deriver note: if necessary, call BaseClass::registerToChannelMixer(chanMixer, prefix); 00363 } |
|
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!!
Reimplemented in NL3D::CMeshInstance, and NL3D::CSkeletonModel. Definition at line 527 of file transform.h. Referenced by NL3D::CSkeletonModel::renderIntoSkeletonShadowMap().
00527 {} |
|
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;}
|
|
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 {} |
|
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 {} |
|
if supportSkinGrouping(), called to transform the VBuffer, and store it into dest.
Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance. Definition at line 601 of file transform.h. References sint, uint, and uint8.
00601 {return 0;}
|
|
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).
Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance. Definition at line 606 of file transform.h. References uint.
00606 {} |
|
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 {} |
|
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 } |
|
Linking.
Definition at line 225 of file cluster.cpp. References _Portals.
00226 { 00227 _Portals.clear(); 00228 } |
|
Change value count, bit are set to 0
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 } |
|
Serial.
Definition at line 250 of file cluster.cpp. References _BBox, _EnvironmentFxId, _LocalBBox, _LocalVolume, _SoundGroupId, _Volume, AudibleFromFather, FatherAudible, FatherVisible, NLMISC::IStream::isReading(), NLMISC::IStream::serial(), NLMISC::IStream::serialCont(), NLMISC::IStream::serialVersion(), sint, and VisibleFromFather.
00251 { 00252 sint version = f.serialVersion (3); 00253 00254 if (version >= 1) 00255 f.serial (Name); 00256 00257 f.serialCont (_LocalVolume); 00258 f.serial (_LocalBBox); 00259 f.serial (FatherVisible); 00260 f.serial (VisibleFromFather); 00261 if (f.isReading()) 00262 { 00263 _Volume = _LocalVolume; 00264 _BBox = _LocalBBox; 00265 } 00266 00267 if (version >= 2) 00268 { 00269 if (f.isReading()) 00270 { 00271 std::string soundGroup; 00272 std::string envFxName; 00273 00274 f.serial(soundGroup); 00275 _SoundGroupId = CStringMapper::map(soundGroup); 00276 00277 f.serial(envFxName); 00278 if (envFxName == "") 00279 envFxName = "no fx"; 00280 _EnvironmentFxId = CStringMapper::map(envFxName); 00281 } 00282 else 00283 { 00284 // write the sound group 00285 std::string soundGroup = CStringMapper::unmap(_SoundGroupId); 00286 f.serial(soundGroup); 00287 // write the env fx name 00288 std::string envFxName = CStringMapper::unmap(_EnvironmentFxId); 00289 if (envFxName == "no fx") 00290 envFxName = ""; 00291 f.serial(envFxName); 00292 } 00293 00294 // nldebug("Cluster %s, sound group [%s]", Name.c_str(), CStringMapper::unmap(_SoundGroupId).c_str()); 00295 } 00296 00297 if (version >= 3) 00298 { 00299 f.serial(AudibleFromFather); 00300 f.serial(FatherAudible); 00301 } 00302 else 00303 { 00304 // copy the visual property 00305 AudibleFromFather = VisibleFromFather; 00306 FatherAudible = FatherVisible; 00307 } 00308 } |
|
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 } |
|
Definition at line 141 of file cluster.h. References _CameraIn.
00141 {_CameraIn= state;} |
|
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); } |
|
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 } |
|
Definition at line 378 of file transform.cpp. References NL3D::CTransform::_DontUnfreezeChildren. Referenced by NL3D::CInstanceGroup::createRoot().
00379 { 00380 _DontUnfreezeChildren = val; 00381 } |
|
Definition at line 97 of file cluster.cpp. References _EnvironmentFxId.
00098 { 00099 _EnvironmentFxId = environmentFxId; 00100 } |
|
Definition at line 93 of file cluster.cpp. References _EnvironmentFxId. Referenced by NLSOUND::CBackgroundSoundManager::updateBackgroundStatus().
00094 { 00095 _EnvironmentFxId = CStringMapper::map(environmentFx); 00096 } |
|
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).
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 } |
|
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 } |
|
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 } |
|
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);} |
|
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 } |
|
For CCluster only.
Definition at line 671 of file transform.h. References NL3D::CTransform::IsCluster, and NL3D::CTransform::setStateFlag().
00671 {setStateFlag(IsCluster, val);} |
|
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 } |
|
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 } |
|
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 } |
|
For CMeshBaseInstance only.
Definition at line 667 of file transform.h. References NL3D::CTransform::IsMeshBaseInstance, and NL3D::CTransform::setStateFlag().
00667 {setStateFlag(IsMeshBaseInstance, val);} |
|
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 } |
|
ShadowMap.
Definition at line 674 of file transform.h. References NL3D::CTransform::IsShadowMapCaster, and NL3D::CTransform::setStateFlag().
00674 {setStateFlag(IsShadowMapCaster, val);} |
|
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);} |
|
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 } |
|
For CTransformShape only.
Definition at line 669 of file transform.h. References NL3D::CTransform::IsTransformShape, and NL3D::CTransform::setStateFlag().
00669 {setStateFlag(IsTransformShape, val);} |
|
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 } |
|
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;} |
|
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 } |
|
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 } |
|
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(), NL3D::CParticleSystemModel::CParticleSystemModel(), NL3D::CSkeletonModel::CSkeletonModel(), NL3D::CVegetableBlendLayerModel::CVegetableBlendLayerModel(), NL3D::CWaterModel::CWaterModel(), NL3D::CMeshBase::instanciateMeshBase(), NL3D::CTransformUser::setOpacity(), NL3D::CMeshMultiLodInstance::traverseLoadBalancing(), NL3D::CSegRemanence::updateOpacityFromShape(), and NL3D::CParticleSystemModel::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 } |
|
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; } |
|
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 } |
|
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().
|
|
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 } |
|
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().
|
|
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 } |
|
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().
|
|
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().
|
|
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 } |
|
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 } |
|
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().
|
|
Definition at line 80 of file cluster.cpp. References _SoundGroupId.
00081 { 00082 _SoundGroupId = soundGroupId; 00083 } |
|
Definition at line 76 of file cluster.cpp. References _SoundGroupId.
00077 { 00078 _SoundGroupId = CStringMapper::map(soundGroup); 00079 } |
|
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 } |
|
|
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 } |
|
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 } |
|
Definition at line 302 of file transform.h. Referenced by NL3D::CParticleSystemManager::processAnimate().
00302 { _WorldMatrix = mat;} |
|
Definition at line 311 of file cluster.cpp. References _BBox, _LocalBBox, _LocalVolume, _Volume, NLMISC::CMatrix::invert(), NLMISC::CAABBox::transformAABBox(), and uint32. Referenced by traverseHrc().
00312 { 00313 uint32 i; 00314 CMatrix invWM = WM; 00315 invWM.invert(); 00316 00317 // Transform the volume 00318 for (i = 0; i < _LocalVolume.size(); ++i) 00319 _Volume[i] = _LocalVolume[i] * invWM; 00320 00321 _BBox = NLMISC::CAABBox::transformAABBox(WM, _LocalBBox); 00322 00323 // Transform the bounding box 00324 /*CVector p[8]; 00325 p[0].x = _LocalBBox.getMin().x; 00326 p[0].y = _LocalBBox.getMin().y; 00327 p[0].z = _LocalBBox.getMin().z; 00328 00329 p[1].x = _LocalBBox.getMax().x; 00330 p[1].y = _LocalBBox.getMin().y; 00331 p[1].z = _LocalBBox.getMin().z; 00332 00333 p[2].x = _LocalBBox.getMin().x; 00334 p[2].y = _LocalBBox.getMax().y; 00335 p[2].z = _LocalBBox.getMin().z; 00336 00337 p[3].x = _LocalBBox.getMax().x; 00338 p[3].y = _LocalBBox.getMax().y; 00339 p[3].z = _LocalBBox.getMin().z; 00340 00341 p[4].x = _LocalBBox.getMin().x; 00342 p[4].y = _LocalBBox.getMin().y; 00343 p[4].z = _LocalBBox.getMax().z; 00344 00345 p[5].x = _LocalBBox.getMax().x; 00346 p[5].y = _LocalBBox.getMin().y; 00347 p[5].z = _LocalBBox.getMax().z; 00348 00349 p[6].x = _LocalBBox.getMin().x; 00350 p[6].y = _LocalBBox.getMax().y; 00351 p[6].z = _LocalBBox.getMax().z; 00352 00353 p[7].x = _LocalBBox.getMax().x; 00354 p[7].y = _LocalBBox.getMax().y; 00355 p[7].z = _LocalBBox.getMax().z; 00356 00357 for (i = 0; i < 8; ++i) 00358 p[i] = WM.mulPoint(p[i]); 00359 00360 CAABBox boxTemp; 00361 00362 boxTemp.setCenter(p[0]); 00363 for (i = 1; i < 8; ++i) 00364 boxTemp.extend(p[i]); 00365 _BBox = boxTemp;*/ 00366 } |
|
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 } |
|
Special Skinning For ShadowMapping.
Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance. Definition at line 611 of file transform.h.
00611 {return false;} |
|
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;} |
|
|
call updateWorldMatrixFromFather(), then traverseAnimDetailWithoutUpdateWorldMatrix()
Reimplemented in NL3D::CMeshBaseInstance, NL3D::CParticleSystemModel, NL3D::CQuadGridClipManager, NL3D::CRootModel, NL3D::CSegRemanence, NL3D::CSkeletonModel, and NL3D::CWaveMakerModel. Definition at line 953 of file transform.cpp. References NL3D::CTransform::traverseAnimDetailWithoutUpdateWorldMatrix(), and NL3D::CTransform::updateWorldMatrixFromFather(). Referenced by NL3D::CAnimDetailTrav::traverse(), and NL3D::CAnimDetailTrav::traverseHrcRecurs().
00954 { 00955 // First, test if I must update my worldMatrix because of the ancestorSkeleton scheme 00956 updateWorldMatrixFromFather(); 00957 00958 // eval channelMixer. 00959 traverseAnimDetailWithoutUpdateWorldMatrix(); 00960 00961 // NB: if want to add something, do it in traverseAnimDetailWithoutUpdateWorldMatrix(), because 00962 // CSkeletonModel doesn't call CTransform::traverseAnimDetail() 00963 } |
|
traverse without updatin WorldMatrixFromFather:
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 } |
|
The base traverseClip method. The behavior is to:
Reimplemented from NL3D::CTransform. Definition at line 397 of file cluster.cpp. References recursTraverseClip().
00398 { 00399 // This is the root call called by the SceneRoot 00400 recursTraverseClip(NULL); 00401 } |
|
Each method is called in its associated traversal.
Reimplemented from NL3D::CTransform. Definition at line 369 of file cluster.cpp. References NL3D::CInstanceGroup::_ClipTrav, NL3D::CClipTrav::Accel, AccelIt, NL3D::CQuadGrid< CCluster * >::erase(), getNbPortals(), getPortal(), Group, isRoot(), NL3D::CClipTrav::registerCluster(), NL3D::CPortal::setWorldMatrix(), setWorldMatrix(), and uint32.
00370 { 00371 CTransform::traverseHrc (); 00372 00373 setWorldMatrix (_WorldMatrix); 00374 00375 for (uint32 i = 0; i < getNbPortals(); ++i) 00376 { 00377 CPortal *pPortal = getPortal(i); 00378 pPortal->setWorldMatrix (_WorldMatrix); 00379 } 00380 00381 // Re affect the cluster to the accelerator if not the root 00382 if (!isRoot()) 00383 { 00384 Group->_ClipTrav->Accel.erase (AccelIt); 00385 Group->_ClipTrav->registerCluster (this); 00386 } 00387 } |
|
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 } |
|
no-op by default
Reimplemented in NL3D::CMeshMultiLodInstance, NL3D::CQuadGridClipManager, NL3D::CRootModel, and NL3D::CTransformShape. Definition at line 974 of file transform.cpp. Referenced by NL3D::CLoadBalancingTrav::traverseVisibilityList().
00975 {
00976 // noop
00977 }
|
|
no-op by default
Reimplemented in NL3D::CFlareModel, NL3D::CLandscapeModel, NL3D::CMeshInstance, NL3D::CParticleSystemModel, NL3D::CQuadGridClipManager, NL3D::CRootModel, NL3D::CSkeletonModel, NL3D::CTransformShape, NL3D::CVegetableBlendLayerModel, and NL3D::CWaterModel. Definition at line 1131 of file transform.cpp. Referenced by NL3D::CRenderTrav::traverse().
01132 {
01133 // no-op
01134 }
|
|
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 } |
|
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 } |
|
Definition at line 237 of file cluster.cpp. References _Portals, and uint32.
|
|
Definition at line 141 of file cluster.cpp. References unlinkFromParent(), and unlinkSons(). Referenced by ~CCluster().
00142 { 00143 unlinkFromParent(); 00144 unlinkSons(); 00145 } |
|
Definition at line 114 of file cluster.cpp. References Children, and Father. Referenced by unlinkFromClusterTree().
|
|
special feature for CQuadGridClipManager. called at unfreezeHRC(). Used by CTransformShape.
Reimplemented in NL3D::CTransformShape. Definition at line 561 of file transform.h. Referenced by NL3D::CTransform::unfreezeHRC().
00561 {} |
|
Definition at line 125 of file cluster.cpp. References Children, NLMISC::contReset(), and uint. Referenced by unlinkFromClusterTree().
00126 { 00127 // tells all sons that they have no more father 00128 for(uint k = 0; k < Children.size(); ++k) 00129 { 00130 if (Children[k]->Father == this) 00131 { 00132 Children[k]->Father = NULL; 00133 } 00134 } 00135 NLMISC::contReset(Children); 00136 } |
|
This function update the model (called by CScene::updateModels()) Deriver Must :
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 } |
|
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 } |
|
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 } |
|
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 } |
|
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 classes.
|
|
Definition at line 67 of file smart_ptr.h. |
|
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(). |
|
World bounding box and volume (valid after hrc trav) ----------------------------- Definition at line 183 of file cluster.h. Referenced by applyMatrix(), NL3D::CInstanceGroup::displayDebugClusters(), getBBox(), makeVolume(), serial(), and setWorldMatrix(). |
|
Definition at line 203 of file cluster.h. Referenced by CCluster(), isCameraIn(), and setCameraIn(). |
|
date of last traverseClip()
Definition at line 865 of file transform.h. Referenced by NL3D::CTransform::CTransform(), and NL3D::CTransform::traverseClip(). |
|
Definition at line 849 of file transform.h. Referenced by NL3D::CSkeletonModel::bindSkin(), NL3D::CTransform::CTransform(), and NL3D::CTransform::updateClipTravForAncestorSkeleton(). |
|
Definition at line 848 of file transform.h. Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::setDontUnfreezeChildren(), and NL3D::CTransform::updateWorld(). |
|
Environement Fx name Id (using CStringMapper).
Definition at line 190 of file cluster.h. Referenced by CCluster(), getEnvironmentFx(), getEnvironmentFxId(), serial(), and setEnvironmentFx(). |
|
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(). |
|
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(). |
|
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(). |
|
date of last traverseClip()
Definition at line 869 of file transform.h. Referenced by NL3D::CClipTrav::addVisibleModel(), NL3D::CTransform::CTransform(), and NL3D::CTransform::~CTransform(). |
|
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(). |
|
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(). |
|
Definition at line 894 of file transform.h. Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::getLoadBalancingGroup(), NL3D::CTransform::initModel(), and NL3D::CTransform::setLoadBalancingGroup(). |
|
Local bounding box and volume ----------------------------- The bounding box of the volume Definition at line 177 of file cluster.h. Referenced by applyMatrix(), makeVolume(), serial(), and setWorldMatrix(). |
|
Definition at line 841 of file transform.h. Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::update(), and NL3D::CTransform::updateWorld(). |
|
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(). |
|
Definition at line 840 of file transform.h. Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::update(), and NL3D::CTransform::updateWorld(). |
|
All planes are oriented to the exterior of the volume.
Definition at line 179 of file cluster.h. Referenced by applyMatrix(), isRoot(), makeVolume(), serial(), and setWorldMatrix(). |
|
Portals list.
Definition at line 172 of file cluster.h. Referenced by NL3D::CInstanceGroup::displayDebugClusters(), getNbPortals(), getPortal(), link(), resetPortalLinks(), and unlink(). |
|
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(). |
|
Sound group name id.
Definition at line 188 of file cluster.h. Referenced by CCluster(), getSoundGroup(), getSoundGroupId(), serial(), and setSoundGroup(). |
|
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(). |
|
***** Clip Traversal
Definition at line 201 of file cluster.h. Referenced by cameraRayClip(), CCluster(), and recursTraverseClip(). |
|
All planes are oriented to the exterior of the volume.
Definition at line 185 of file cluster.h. Referenced by applyMatrix(), NL3D::CInstanceGroup::displayDebugClusters(), isIn(), makeVolume(), serial(), and setWorldMatrix(). |
|
Definition at line 845 of file transform.h. Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::hrcLinkSon(), NL3D::CTransform::hrcUnlink(), and NL3D::CTransform::updateWorld(). |
|
Hrc OUT variables.
Definition at line 843 of file transform.h. Referenced by NL3D::CTransform::updateWorld(), and NL3D::CTransform::updateWorldMatrixFromFather(). |
|
Definition at line 844 of file transform.h. Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::isHrcVisible(), NL3D::CTransform::traverseClip(), and NL3D::CTransform::updateWorld(). |
|
Definition at line 157 of file cluster.h. Referenced by NL3D::CClipTrav::registerCluster(), and traverseHrc(). |
|
Definition at line 164 of file cluster.h. Referenced by CCluster(), and serial(). |
|
Definition at line 166 of file cluster.h. Referenced by cameraRayClip(), recursTraverseClip(), unlinkFromParent(), and unlinkSons(). |
|
Definition at line 79 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), NLMISC::CRefCount::getRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
Definition at line 165 of file cluster.h. Referenced by cameraRayClip(), CCluster(), recursTraverseClip(), and unlinkFromParent(). |
|
Definition at line 163 of file cluster.h. Referenced by CCluster(), serial(), and NLSOUND::CClusteredSound::soundTraverse(). |
|
Definition at line 161 of file cluster.h. Referenced by cameraRayClip(), CCluster(), recursTraverseClip(), and serial(). |
|
Definition at line 167 of file cluster.h. Referenced by CCluster(), NL3D::CScene::findCameraClusterSystemFromRay(), NL3D::CScene::initDefaultRoots(), NL3D::CClipTrav::traverse(), and traverseHrc(). |
|
Definition at line 160 of file cluster.h. Referenced by NL3D::CInstanceGroup::displayDebugClusters(), and NL3D::CScene::initDefaultRoots(). |
|
Referenced by NLMISC::CRefCount::CRefCount(). |
|
Definition at line 80 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
Definition at line 162 of file cluster.h. Referenced by CCluster(), recursTraverseClip(), and serial(). |