#include <water_model.h>
Inheritance diagram for NL3D::CWaterModel:
Nevrax France
Definition at line 57 of file water_model.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. | |
Model updating/traversing features | |
virtual void | initModel () |
virtual void | traverseAnimDetail () |
call updateWorldMatrixFromFather(), then traverseAnimDetailWithoutUpdateWorldMatrix() | |
virtual void | traverseClip () |
virtual void | traverseHrc () |
Each method is called in its associated traversal. | |
virtual void | traverseLight () |
traverse the lightedModel per default: recompute LightContribution is isLightable() | |
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 | |
virtual bool | canStartStop () |
Test if there is a start/stop caps in the objects (some fxs such as remanence). | |
bool | compareMatrixDate (uint64 callerDate) const |
CWaterModel () | |
ctor | |
void | freeze () |
void | freezeHRC () |
virtual void | getAABBox (NLMISC::CAABBox &bbox) const |
CSkeletonModel * | getAncestorSkeletonModel () const |
virtual float | getAttenuatedHeight (const NLMISC::CVector2f &pos, const NLMISC::CVector &viewer) |
inherited from UWaterInstance | |
bool | getChannelMixerOwnerShip () const |
CInstanceGroup * | getClusterSystem () |
virtual ITrack * | getDefaultTrack (uint valueId) |
Default Track Values are identity (pos,pivot= 0, scale= 1, rots=0). | |
float | getDistMax () const |
bool | getForceClipRoot () const |
virtual float | getHeight (const NLMISC::CVector2f &pos) |
inherited from UWaterInstance | |
virtual float | getHeightFactor () const |
inherited from UWaterInstance | |
CLightContribution & | getLightContribution () |
virtual void | getLightHotSpotInWorld (CVector &modelPos, float &modelRadius) const |
virtual CMaterial * | getMaterial (uint materialId) |
virtual const CMaterial * | getMaterial (uint materialId) const |
const CMatrix & | getMatrix () const |
Get the matrix, compute her if necessary (work in all modes). | |
uint64 | getMatrixDate () const |
virtual uint | getNumMaterial () const |
uint | getOrderingLayer () const |
Get the ordering layer. | |
CScene * | getOwnerScene () const |
get the scene which has created us | |
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. | |
virtual uint32 | getWaterHeightMapID () const |
inherited from UWaterInstance | |
const CMatrix & | getWorldMatrix () const |
void | heritVisibility () |
herit the visibility from his father. (default behavior). | |
void | hide () |
Hide the object and his sons. | |
void | init () |
bool | isClipVisible () const |
bool | isHrcVisible () const |
bool | isLinkToQuadCluster () const |
true if the model is linked to a quadCluster | |
uint32 | isOpaque () |
uint32 | isQuadGridClipEnabled () const |
virtual bool | isStarted () const |
uint32 | isTransparent () |
void | setChannelMixerOwnerShip (bool enable=true) |
void | setClusterSystem (CInstanceGroup *pCS) |
void | setDistMax (float distMax) |
void | setDontUnfreezeChildren (bool val) |
void | setForceClipRoot (bool forceClipRoot) |
void | setLogicInfo (ILogicInfo *logicInfo) |
void | setOpacity (bool v) |
void | setOrderingLayer (uint layer) |
void | setTransparency (bool v) |
void | setUserClipping (bool enable) |
void | setWorldMatrix (const CMatrix &mat) |
void | show () |
Show the objet and his sons. | |
virtual void | start () |
virtual void | stop () |
void | unfreezeHRC () |
CTransform traverse specialisation | |
virtual bool | clip () |
clip method called by traverseClip(). deafult is always visible | |
virtual void | traverseRender () |
Static Public Member Functions | |
CTransform * | creator () |
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 | |
sint | crefs |
CPtrInfo * | pinfo |
CSmartPtr< IShape > | Shape |
The shape, the object instancied. | |
Static Public Attributes | |
CPtrInfo | NullPtrInfo |
Protected Member Functions | |
sint | addValue (CChannelMixer *chanMixer, uint valueId, uint ownerValueId, const std::string &prefix, bool detail) |
void | clearFlag (uint valueId) |
This method clear a bit in the bitset. | |
void | computeClippedPoly () |
void | computeSimpleClippedPoly () |
void | doSimpleRender (IDriver *drv) |
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. | |
void | setupCurrentLightContribution (CLightContribution *lightContrib, bool useLocalAtt) |
void | setupMaterialNVertexShader (IDriver *drv, CWaterShape *shape, const NLMISC::CVector &obsPos, bool above, float maxDist, float zHeight) |
virtual void | unlinkFromQuadCluster () |
special feature for CQuadGridClipManager. remove from it. | |
Protected Attributes | |
uint32 | _RenderFilterType |
Private Member Functions | |
void | updateDiffuseMapMatrix (bool force=false) |
Private Attributes | |
NLMISC::CPolygon | _ClippedPoly |
NLMISC::CVector2f | _ColorMapMatColumn0 |
NLMISC::CVector2f | _ColorMapMatColumn1 |
NLMISC::CVector2f | _ColorMapMatPos |
CSmartPtr< CTextureEmboss > | _EmbossTexture |
NLMISC::CPolygon | _EndClippedPoly |
uint64 | _MatrixUpdateDate |
Static Private Attributes | |
CVertexBuffer | _SimpleRenderVB |
CMaterial | _SimpleWaterMat |
CMaterial | _WaterMat |
Friends | |
struct | CPtrInfo |
class | CWaterShape |
|
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 }; |
|
ctor
Definition at line 63 of file water_model.cpp. References NL3D::CTransform::setOpacity(), NL3D::CTransform::setOrderingLayer(), and NL3D::CTransform::setTransparency().
00064 { 00065 setOpacity(false); 00066 setTransparency(true); 00067 setOrderingLayer(1); 00068 00069 // RenderFilter: We are a SegRemanece 00070 _RenderFilterType= UScene::FilterWater; 00071 } |
|
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 } |
|
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;} |
|
Test if there is a start/stop caps in the objects (some fxs such as remanence).
Reimplemented in NL3D::CSegRemanence. Definition at line 126 of file transform_shape.h. Referenced by NL3D::CInstanceUser::canStartStop().
00126 { return false; } |
|
setup lighting for this instance into driver. The traverseRender().
Definition at line 105 of file transform_shape.cpp. References NL3D::CTransformShape::_CurrentLightContribution, NL3D::CTransformShape::_CurrentUseLocalAttenuation, and NL3D::CRenderTrav::changeLightSetup(). Referenced by NL3D::CMeshMRMGeom::activeInstance(), NL3D::CMeshGeom::activeInstance(), NL3D::CSkeletonModel::renderSkins(), and NL3D::CTransformShape::traverseRender().
00106 {
00107 // setup the instance lighting.
00108 rdrTrav->changeLightSetup(_CurrentLightContribution, _CurrentUseLocalAttenuation);
00109 }
|
|
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::CTransformShape. Definition at line 1130 of file water_model.cpp. References _ClippedPoly, _EndClippedPoly, computeClippedPoly(), computeSimpleClippedPoly(), NL3D::CScene::getClipTrav(), NL3D::CScene::getDriver(), NL3D::CTransform::getOwnerScene(), H_AUTO, NL3D::IDriver::isWaterShaderSupported(), and NLMISC::CPolygon::Vertices.
01131 { 01132 H_AUTO( NL3D_Water_Render ); 01133 CClipTrav &clipTrav= getOwnerScene()->getClipTrav(); 01134 01135 if(Shape) 01136 { 01137 IDriver *drv = getOwnerScene()->getDriver(); 01138 01139 #ifndef FORCE_SIMPLE_WATER_RENDER 01140 if (drv->isWaterShaderSupported()) 01141 { 01142 computeClippedPoly(); 01143 if (_ClippedPoly.Vertices.empty() && _EndClippedPoly.Vertices.empty()) return false; 01144 } 01145 else 01146 #endif 01147 { 01148 01149 computeSimpleClippedPoly(); 01150 if (_ClippedPoly.Vertices.empty()) 01151 { 01152 return false; 01153 } 01154 } 01155 01156 return true; 01157 } 01158 else 01159 return false; 01160 } |
|
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 NL3D::CCluster::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 NL3D::CCluster::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 updateDiffuseMapMatrix().
00083 { 00084 return callerDate<_LocalMatrixDate || needCompute(); 00085 } |
|
Definition at line 1054 of file water_model.cpp. References _ClippedPoly, _EndClippedPoly, NL3D::CWaterShape::_Poly, NL3D::CWaterShape::_TransitionRatio, NLMISC::CPolygon::clip(), NLMISC::CPlane::d, NL3D::CTravCameraScene::Far, NL3D::CScene::getClipTrav(), NL3D::CTransform::getOwnerScene(), NL3D::CTransform::getWorldMatrix(), NLMISC::CPlane::make(), NL3D::CTravCameraScene::Near, NL3D::CTravCameraScene::Right, sint, NL3D::CTravCameraScene::Top, uint, NLMISC::CPolygon2D::Vertices, NLMISC::CPolygon::Vertices, NL3D::CTravCameraScene::ViewMatrix, and NL3D::CClipTrav::WorldFrustumPyramid. Referenced by clip().
01055 { 01056 CWaterShape *shape = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 01057 CClipTrav &clipTrav = getOwnerScene()->getClipTrav(); 01058 const std::vector<CPlane> &worldPyramid = getOwnerScene()->getClipTrav().WorldFrustumPyramid; 01059 01060 _ClippedPoly.Vertices.resize(shape->_Poly.Vertices.size()); 01061 uint k; 01062 for (k = 0; k < shape->_Poly.Vertices.size(); ++k) 01063 { 01064 _ClippedPoly.Vertices[k].set(shape->_Poly.Vertices[k].x, 01065 shape->_Poly.Vertices[k].y, 01066 0 01067 ); 01068 } 01069 01070 _EndClippedPoly = _ClippedPoly; 01071 01072 const sint numStepX = CWaterShape::getScreenXGridSize(); 01073 const sint numStepY = CWaterShape::getScreenYGridSize(); 01074 const NLMISC::CMatrix &viewMat = clipTrav.ViewMatrix; 01075 01076 // Build the view pyramid. We need to rebuild it because we use a wider one to avoid holes on the border of the screen 01077 01078 NLMISC::CPlane plvect[6]; 01079 01080 const float borderFactor = 0.67f; // we must avoid numerical imprecision as well as the rotation case (must divide by sqrt(2)) 01081 const float fRight = clipTrav.Right * (2.f * borderFactor * (float) CWaterShape::_XGridBorder + (float) numStepX) / numStepX; 01082 const float fTop = clipTrav.Top * (2.f * borderFactor * (float) CWaterShape::_YGridBorder + (float) numStepY) / numStepY; 01083 01084 // build pyramid corners 01085 const float nearDist = clipTrav.Near; 01086 const float farDist = clipTrav.Far; 01087 #ifdef NO_WATER_TESSEL 01088 const float transitionDist = nearDist * 0.99f; 01089 #else 01090 const float transitionDist = shape->_TransitionRatio * farDist; 01091 #endif 01092 01093 01094 const NLMISC::CVector pfoc(0,0,0); 01095 const NLMISC::CVector lb(-fRight, nearDist, - fTop ); 01096 const NLMISC::CVector lt(-fRight, nearDist, fTop ); 01097 const NLMISC::CVector rb( fRight, nearDist, -fTop ); 01098 const NLMISC::CVector rt(fRight, nearDist, fTop ); 01099 01100 const NLMISC::CVector lbfarDist(-fRight, transitionDist, -fTop); 01101 const NLMISC::CVector ltfarDist(-fRight, transitionDist, fTop ); 01102 const NLMISC::CVector rtfarDist(fRight , transitionDist, fTop ); 01103 01104 01105 plvect[0].make(lt, lb, rt); // near plane 01106 plvect[1].make(lbfarDist, ltfarDist, rtfarDist); // far plane 01107 01108 plvect[2].make(pfoc, lt, lb); 01109 plvect[3].make(pfoc, rt, lt); 01110 plvect[4].make(pfoc, rb, rt); 01111 plvect[5].make(pfoc, lb, rb); 01112 01113 01114 const NLMISC::CMatrix pyramidMat = viewMat * getWorldMatrix(); 01115 for (k = 0; k < worldPyramid.size(); ++k) 01116 { 01117 plvect[k] = plvect[k] * pyramidMat; // put the plane in object space 01118 } 01119 01120 _ClippedPoly.clip(plvect, 6); // get the tesselated part of the poly 01121 01122 // modify the pyramid to get the transition part of the poly (no tesselated) 01123 plvect[0].d += (transitionDist - nearDist); 01124 plvect[1].d -= (farDist - transitionDist); 01125 _EndClippedPoly.clip(plvect, 6); 01126 } |
|
Definition at line 1026 of file water_model.cpp. References _ClippedPoly, NL3D::CWaterShape::_Poly, NLMISC::CPolygon::clip(), NL3D::CScene::getClipTrav(), NL3D::CTransform::getOwnerScene(), NL3D::CTransform::getWorldMatrix(), uint, NLMISC::CPolygon2D::Vertices, NLMISC::CPolygon::Vertices, and NL3D::CClipTrav::WorldFrustumPyramid. Referenced by clip().
01027 { 01028 CWaterShape *shape = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 01029 CClipTrav &clipTrav = getOwnerScene()->getClipTrav(); 01030 const std::vector<CPlane> &worldPyramid = getOwnerScene()->getClipTrav().WorldFrustumPyramid; 01031 01032 _ClippedPoly.Vertices.resize(shape->_Poly.Vertices.size()); 01033 uint k; 01034 for (k = 0; k < shape->_Poly.Vertices.size(); ++k) 01035 { 01036 _ClippedPoly.Vertices[k].set(shape->_Poly.Vertices[k].x, 01037 shape->_Poly.Vertices[k].y, 01038 0 01039 ); 01040 } 01041 01042 static std::vector<CPlane> xformPyram; 01043 const uint numPlanes = (uint) worldPyramid.size(); 01044 xformPyram.resize(numPlanes); 01045 for (k = 0; k < numPlanes; ++k) 01046 { 01047 xformPyram[k] = worldPyramid[k] * getWorldMatrix(); // put the plane in object space 01048 } 01049 // do the clip 01050 _ClippedPoly.clip(xformPyram); 01051 } |
|
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::CTransformShape. Definition at line 71 of file water_model.h.
00071 { return new CWaterModel; } |
|
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 {} |
|
Definition at line 1170 of file water_model.cpp. References NL3D::CWaterShape::_BumpMap, _ClippedPoly, NL3D::CWaterShape::_ColorMap, NL3D::CWaterShape::_ColorMapMatColumn0, NL3D::CWaterShape::_ColorMapMatColumn1, NL3D::CWaterShape::_ColorMapMatPos, _EmbossTexture, NL3D::CWaterShape::_EnvMap, NL3D::CWaterShape::_HeightMapScale, NL3D::CWaterShape::_HeightMapSpeed, NL3D::CWaterShape::_Poly, _SimpleRenderVB, _SimpleWaterMat, NL3D::IDriver::activeVertexBuffer(), NL3D::IDriver::activeVertexProgram(), NL3D::CTravCameraScene::CamPos, data, NL3D::CTextureBump::getHeightMap(), NLMISC::CTime::getLocalTime(), NL3D::CTransform::getOwnerScene(), NLMISC::CMatrix::getPos(), NL3D::CScene::getRenderTrav(), NL3D::CVertexBuffer::getVertexCoordPointer(), NL3D::CTransform::getWorldMatrix(), min, NL3D::IDriver::renderSimpleTriangles(), NL3D::CMaterial::setBlend(), NL3D::CMaterial::setColor(), NL3D::CMaterial::setDoubleSided(), NL3D::CMaterial::setDstBlend(), NL3D::CMaterial::setLighting(), NL3D::CVertexBuffer::setNumVertices(), NL3D::CMaterial::setShader(), NL3D::CMaterial::setSrcBlend(), NL3D::CMaterial::setTexture(), NL3D::IDriver::setupMaterial(), NL3D::IDriver::setupModelMatrix(), NL3D::CVertexBuffer::setVertexFormat(), NL3D::CMaterial::setZWrite(), NL3D::CMaterial::texEnvArg0Alpha(), NL3D::CMaterial::texEnvArg0RGB(), NL3D::CMaterial::texEnvArg1Alpha(), NL3D::CMaterial::texEnvArg1RGB(), NL3D::CMaterial::texEnvOpAlpha(), NL3D::CMaterial::texEnvOpRGB(), uint, uint8, NLMISC::CPolygon2D::Vertices, NLMISC::CPolygon::Vertices, NLMISC::CVector::x, NLMISC::CVector2f::x, NLMISC::CVector::y, NLMISC::CVector2f::y, and NLMISC::CVector::z. Referenced by traverseRender().
01171 { 01172 if (_ClippedPoly.Vertices.empty()) return; 01173 // rendering of water when no vertex / pixel shaders are available 01174 CWaterShape *shape = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 01175 CRenderTrav &renderTrav = getOwnerScene()->getRenderTrav(); 01176 static bool init = false; 01177 if (!init) 01178 { 01179 // setup the material, no special shader is used here 01180 _SimpleWaterMat.setLighting(false); 01181 _SimpleWaterMat.setDoubleSided(true); 01182 _SimpleWaterMat.setColor(NLMISC::CRGBA::White); 01183 01184 _SimpleWaterMat.setBlend(true); 01185 _SimpleWaterMat.setSrcBlend(CMaterial::srcalpha); 01186 _SimpleWaterMat.setDstBlend(CMaterial::invsrcalpha); 01187 _SimpleWaterMat.setZWrite(true); 01188 _SimpleWaterMat.setShader(CMaterial::Normal); 01189 01190 // stage 0 01191 _SimpleWaterMat.texEnvOpRGB(0, CMaterial::Replace); 01192 _SimpleWaterMat.texEnvOpAlpha(0, CMaterial::Replace); 01193 _SimpleWaterMat.texEnvArg0RGB(0, CMaterial::Texture, CMaterial::SrcColor); 01194 _SimpleWaterMat.texEnvArg0Alpha(0, CMaterial::Texture, CMaterial::SrcAlpha); 01195 01196 // stage 1 01197 _SimpleWaterMat.texEnvOpRGB(1, CMaterial::Modulate); 01198 _SimpleWaterMat.texEnvOpAlpha(1, CMaterial::Modulate); 01199 _SimpleWaterMat.texEnvArg0RGB(0, CMaterial::Texture, CMaterial::SrcColor); 01200 _SimpleWaterMat.texEnvArg0Alpha(0, CMaterial::Texture, CMaterial::SrcAlpha); 01201 _SimpleWaterMat.texEnvArg1RGB(0, CMaterial::Previous, CMaterial::SrcColor); 01202 _SimpleWaterMat.texEnvArg1Alpha(0, CMaterial::Previous, CMaterial::SrcAlpha); 01203 01204 // setup the vb : one position & two tex coords 01205 _SimpleRenderVB.setVertexFormat(CVertexBuffer::PositionFlag | CVertexBuffer::TexCoord0Flag | CVertexBuffer::TexCoord1Flag); 01206 init = true; 01207 } 01208 01209 const NLMISC::CMatrix &worldMatrix = getWorldMatrix(); 01210 const NLMISC::CVector &obsPos = renderTrav.CamPos; 01211 01212 // setup the material 01213 bool isAbove = obsPos.z > worldMatrix.getPos().z; 01214 01215 // envmap is always present and is in stage 0 01216 if (!isAbove && shape->_EnvMap[1]) 01217 { 01218 _SimpleWaterMat.setTexture(0, shape->_EnvMap[1]); 01219 } 01220 else 01221 { 01222 _SimpleWaterMat.setTexture(0, shape->_EnvMap[0]); 01223 } 01224 // 01225 static std::vector<CSimpleVertexInfo> verts; 01226 static std::vector<uint32> indices; 01227 // 01228 NLMISC::CPolygon2D &poly = shape->_Poly; 01229 uint numVerts = poly.Vertices.size(); 01230 uint k; 01231 // 01232 if (shape->_ColorMap == NULL) 01233 { 01234 // version with no color map 01235 if (!_EmbossTexture) 01236 { 01237 _EmbossTexture = new CTextureEmboss; 01238 _EmbossTexture->setSlopeFactor(4.f); 01239 /*te->setAmbient(CRGBA(127, 127, 127)); 01240 te->setDiffuse(CRGBA(127, 127, 127)); */ 01241 } 01242 if (shape->_BumpMap[1] && shape->_BumpMap[1]->isBumpMap()) 01243 { 01244 CTextureBump *bm = static_cast<CTextureBump *>((ITexture *) shape->_BumpMap[1]); 01245 if (bm->getHeightMap()) 01246 { 01247 _EmbossTexture->setHeightMap(bm->getHeightMap()); 01248 } 01249 } 01250 _SimpleWaterMat.setTexture(1, _EmbossTexture); 01251 _SimpleRenderVB.setNumVertices(numVerts); 01252 // retrieve current time 01253 float date = 0.001f * (NLMISC::CTime::getLocalTime() & 0xffffff); // must keep some precision. 01258 verts.resize(numVerts); 01259 for(k = 0; k < numVerts; ++k) 01260 { 01261 verts[k].XFormPos = worldMatrix * NLMISC::CVector(poly.Vertices[k].x, poly.Vertices[k].y ,0.f); 01262 verts[k].UV.U = shape->_HeightMapScale[0].x * verts[k].XFormPos.x + date * shape->_HeightMapSpeed[0].x; 01263 verts[k].UV.V = shape->_HeightMapScale[0].y * verts[k].XFormPos.y + date * shape->_HeightMapSpeed[0].y; 01264 } 01265 // get min tex coords 01266 float minU = verts[0].UV.U; 01267 float minV = verts[0].UV.V; 01268 for(k = 1; k < numVerts; ++k) 01269 { 01270 minU = std::min(minU, verts[k].UV.U); 01271 minV = std::min(minV, verts[k].UV.V); 01272 } 01273 // 01274 minU = floorf(minU); 01275 minV = floorf(minV); 01276 // 01277 uint8 *data = (uint8 *) _SimpleRenderVB.getVertexCoordPointer(); 01278 for(k = 0; k < numVerts; ++k) 01279 { 01280 ((NLMISC::CVector *) data)->set(poly.Vertices[k].x, poly.Vertices[k].y, 0.f); 01281 data += sizeof(NLMISC::CVector); 01282 // texture coord 0 is reflected vector into envmap 01283 // xform position in world space to compute the reflection 01284 CVector surfToEye = (obsPos - verts[k].XFormPos).normed(); 01285 // we assume that normal is (0, 0, 1) 01286 * (float *) data = 0.5f - 0.5f * surfToEye.x; 01287 ((float *) data)[1] = 0.5f - 0.5f * surfToEye.y; 01288 data += sizeof(float[2]); 01289 // texture coord 1 is the embossed map 01290 * (float *) data = verts[k].UV.U - minU; 01291 ((float *) data)[1] = verts[k].UV.V - minV; 01292 data += sizeof(float[2]); 01293 } 01294 } 01295 else 01296 { 01297 // version with a color map : it remplace the emboss texture 01298 _SimpleWaterMat.setTexture(1, shape->_ColorMap); 01299 _SimpleRenderVB.setNumVertices(numVerts); 01300 // 01301 uint8 *data = (uint8 *) _SimpleRenderVB.getVertexCoordPointer(); 01302 for(k = 0; k < numVerts; ++k) 01303 { 01304 * (NLMISC::CVector *) data = poly.Vertices[k]; 01305 data += sizeof(CVector); 01306 // texture coord 0 is reflected vector into envmap 01307 // xform position in world space to compute the reflection 01308 NLMISC::CVector xformPos = worldMatrix * poly.Vertices[k]; 01309 NLMISC::CVector surfToEye = (obsPos - xformPos).normed(); 01310 // we assume that normal is (0, 0, 1) 01311 * (float *) data = 0.5f - 0.5f * surfToEye.x; 01312 ((float *) data)[1] = 0.5f * - 0.5f * surfToEye.y; 01313 data += sizeof(float[2]); 01314 // texture coord 1 is the color map 01315 * (float *) data = shape->_ColorMapMatColumn0.x * xformPos.x + shape->_ColorMapMatColumn1.x * xformPos.y + shape->_ColorMapMatPos.x; 01316 ((float *) data)[1] = shape->_ColorMapMatColumn0.y * xformPos.x + shape->_ColorMapMatColumn1.y * xformPos.y + shape->_ColorMapMatPos.y; 01317 data += sizeof(float[2]); 01318 } 01319 } 01320 01321 drv->activeVertexProgram(NULL); 01322 drv->setupModelMatrix(worldMatrix); 01323 drv->activeVertexBuffer(_SimpleRenderVB); 01324 01325 // create an index buffer to do the display 01326 indices.resize((numVerts - 2) * 3); 01327 for(k = 0; k < (numVerts - 2); ++k) 01328 { 01329 01330 indices[ k * 3 ] = 0; 01331 indices[ k * 3 + 1 ] = k + 1; 01332 indices[ k * 3 + 2 ] = k + 2; 01333 } 01334 drv->setupMaterial(_SimpleWaterMat); 01335 drv->renderSimpleTriangles(&indices[0], numVerts - 2); 01336 } |
|
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 mesh. NULL (gtSize()==0) if no mesh. Reimplemented from NL3D::CTransform. Reimplemented in NL3D::CParticleSystemModel. Definition at line 83 of file transform_shape.cpp. References NLMISC::CAABBox::setCenter(), NLMISC::CAABBox::setHalfSize(), and NL3D::CTransformShape::Shape. Referenced by NL3D::CTransformShape::getLightHotSpotInWorld(), NL3D::CInstanceUser::getShapeAABBox(), NL3D::CQuadGridClipManager::linkModel(), and NL3D::CClipTrav::traverse().
00084 { 00085 if(Shape) 00086 { 00087 Shape->getAABBox(bbox); 00088 } 00089 else 00090 { 00091 bbox.setCenter(CVector::Null); 00092 bbox.setHalfSize(CVector::Null); 00093 } 00094 } |
|
Definition at line 207 of file transform.h. References NL3D::CTransform::_AncestorSkeletonModel. Referenced by NL3D::CParticleSystemManager::processAnimate().
00207 { return _AncestorSkeletonModel; } |
|
inherited from UWaterInstance
Implements NL3D::UWaterInstance. Definition at line 127 of file water_model.cpp. References NL3D::CWaterShape::_WaterPoolID, NL3D::CWaterShape::_WaveHeightFactor, NL3D::CWaterHeightMap::getHeight(), NL3D::ITransformable::getMatrix(), NL3D::CWaterPoolManager::getPoolByID(), NLMISC::CMatrix::getPos(), NL3D::CWaterHeightMap::getSize(), NL3D::CWaterHeightMap::getUnitSize(), NL3D::GetWaterPoolManager(), height, NLMISC::CVector2f::x, and NLMISC::CVector2f::y.
00128 { 00129 CWaterShape *ws = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 00130 CWaterHeightMap &whm = GetWaterPoolManager().getPoolByID(ws->_WaterPoolID); 00131 const float maxDist = whm.getUnitSize() * (whm.getSize() >> 1); 00132 const NLMISC::CVector planePos(pos.x, pos.y, this->getMatrix().getPos().z); 00133 const float userDist = (planePos - viewer).norm(); 00134 00135 if (userDist > maxDist) 00136 { 00137 return this->getMatrix().getPos().z; 00138 } 00139 else 00140 { 00141 const float height = whm.getHeight(pos); 00142 return ws->_WaveHeightFactor * height * (1.f - userDist / maxDist) + this->getMatrix().getPos().z; 00143 } 00144 } |
|
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).
Reimplemented from NL3D::CTransform. Definition at line 83 of file water_model.cpp. References NL3D::CWaterShape::getDefaultPos(), NL3D::CWaterShape::getDefaultRotQuat(), NL3D::CWaterShape::getDefaultScale(), nlassert, and uint.
00084 { 00085 nlassert(Shape); 00086 CWaterShape *ws = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 00087 switch (valueId) 00088 { 00089 case PosValue: return ws->getDefaultPos(); break; 00090 case ScaleValue: return ws->getDefaultScale(); break; 00091 case RotQuatValue: return ws->getDefaultRotQuat(); break; 00092 default: // delegate to parent 00093 return CTransformShape::getDefaultTrack(valueId); 00094 break; 00095 } 00096 } |
|
Definition at line 135 of file transform_shape.h. Referenced by NL3D::CQuadGridClipCluster::addModel(), NL3D::CTransformShape::clip(), and NL3D::CInstanceUser::getDistMax().
00135 { return _DistMax; }
|
|
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; } |
|
inherited from UWaterInstance
Implements NL3D::UWaterInstance. Definition at line 117 of file water_model.cpp. References NL3D::CWaterShape::_WaterPoolID, NL3D::CWaterShape::_WaveHeightFactor, NL3D::CWaterHeightMap::getHeight(), NL3D::CWaterPoolManager::getPoolByID(), NL3D::ITransformable::getPos(), NL3D::GetWaterPoolManager(), height, and NLMISC::CVector::z.
00118 { 00119 CWaterShape *ws = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 00120 CWaterHeightMap &whm = GetWaterPoolManager().getPoolByID(ws->_WaterPoolID); 00121 const float height = whm.getHeight(pos); 00122 return height * ws->_WaveHeightFactor + this->getPos().z; 00123 } |
|
inherited from UWaterInstance
Implements NL3D::UWaterInstance. Definition at line 108 of file water_model.cpp. References NL3D::CWaterShape::_WaveHeightFactor.
00109 { 00110 CWaterShape *ws = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 00111 return ws->_WaveHeightFactor; 00112 } |
|
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; } |
|
Reimplemented in NL3D::CMeshMultiLodInstance. Definition at line 155 of file transform_shape.h. Referenced by NL3D::CTransformShape::traverseRender(), and NL3D::CParticleSystemModel::traverseRender().
00155 { 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 from NL3D::CTransform. Reimplemented in NL3D::CSkeletonModel. Definition at line 316 of file transform_shape.cpp. References NL3D::CTransformShape::getAABBox(), NLMISC::CMatrix::getPos(), NLMISC::CAABBox::getRadius(), NL3D::CTransform::getWorldMatrix(), and NL3D::CTransform::isBigLightable().
00317 { 00318 /* 00319 // get the untransformed bbox from the model. 00320 CAABBox bbox; 00321 getAABBox(bbox); 00322 // get transformed center pos of bbox 00323 modelPos= getWorldMatrix() * bbox.getCenter(); 00324 // If the model is a big lightable, must take radius from aabbox, else suppose 0 radius. 00325 if(isBigLightable()) 00326 { 00327 // get size of the bbox (bounding sphere) 00328 modelRadius= bbox.getRadius(); 00329 } 00330 else 00331 { 00332 // Assume 0 radius => faster computeLinearAttenuation() 00333 modelRadius= 0; 00334 } 00335 */ 00336 00337 // This method works well for Big Trees. 00338 // TODO: generalize, saving a LightHotSpot per shape. 00339 00340 // get pos of object. Ie the hotSpot is the pivot. 00341 modelPos= getWorldMatrix().getPos(); 00342 // If the model is a big lightable, must take radius from aabbox, else suppose 0 radius. 00343 if(isBigLightable()) 00344 { 00345 // get the untransformed bbox from the model. 00346 CAABBox bbox; 00347 getAABBox(bbox); 00348 // get size of the bbox (bounding sphere) 00349 modelRadius= bbox.getRadius(); 00350 } 00351 else 00352 { 00353 // Assume 0 radius => faster computeLinearAttenuation() 00354 modelRadius= 0; 00355 } 00356 00357 } |
|
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 a material of the transform shape Reimplemented in NL3D::CMeshBaseInstance. Definition at line 127 of file transform_shape.cpp. References uint.
00128 {
00129 return NULL;
00130 }
|
|
Get a material of the transform shape Reimplemented in NL3D::CMeshBaseInstance. Definition at line 120 of file transform_shape.cpp. References uint.
00121 {
00122 return NULL;
00123 }
|
|
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(), 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 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;}
|
|
If the model support MRM, return the level detail setup. default is return NULL.
Reimplemented in NL3D::CMeshMRMInstance, and NL3D::CMeshMRMSkinnedInstance. Definition at line 114 of file transform_shape.h. Referenced by NL3D::CSkeletonModel::updateSkinRenderLists().
00114 {return NULL;}
|
|
Get the count of material in this transform shape Reimplemented in NL3D::CMeshBaseInstance. Definition at line 113 of file transform_shape.cpp. References uint.
00114 {
00115 return 0;
00116 }
|
|
get an approximation of the number of triangles this instance want render for a fixed distance.
Reimplemented in NL3D::CMeshMultiLodInstance, NL3D::CParticleSystemModel, and NL3D::CSkeletonModel. Definition at line 75 of file transform_shape.cpp. References NL3D::CTransformShape::Shape. Referenced by NL3D::CTransformShape::traverseLoadBalancingPass0().
00076 { 00077 // Call shape method 00078 return Shape->getNumTriangles (distance); 00079 } |
|
get an approximation of the number of triangles this instance should render. This method is valid only for IShape classes (in render()), after LoadBalancing traversal is performed. NB: It is not guaranted that this instance will render those number of triangles. Definition at line 111 of file transform_shape.h. References NL3D::CTransformShape::_NumTrianglesAfterLoadBalancing. Referenced by NL3D::CParticleSystemModel::doAnimate(), NL3D::CMeshMRMSkinned::profileSceneRender(), NL3D::CMeshMRM::profileSceneRender(), NL3D::CMeshMRMSkinned::render(), NL3D::CMeshMRM::render(), NL3D::CSkeletonModel::renderSkins(), NL3D::CMeshMRM::supportMeshBlockRendering(), and NL3D::CMeshMultiLodInstance::traverseLoadBalancing().
00111 {return _NumTrianglesAfterLoadBalancing;}
|
|
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 } |
|
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(), 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;}
|
|
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;}
|
|
inherited from UWaterInstance
Implements NL3D::UWaterInstance. Definition at line 100 of file water_model.cpp. References NL3D::CWaterShape::_WaterPoolID, and uint32.
00101 { 00102 CWaterShape *ws = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 00103 return ws->_WaterPoolID; 00104 } |
|
|
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 } |
|
Definition at line 64 of file water_model.h. References updateDiffuseMapMatrix(). Referenced by NL3D::CWaterShape::createInstance().
00065 { 00066 updateDiffuseMapMatrix(true); 00067 } |
|
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);} |
|
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 } |
|
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);} |
|
true if the model is linked to a quadCluster
Definition at line 141 of file transform_shape.h. References NL3D::CTransformShape::_QuadClusterListNode, and NL3D::CFastPtrListNode::isLinked().
00141 {return _QuadClusterListNode.isLinked();}
|
|
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);} |
|
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);} |
|
Reimplemented in NL3D::CSegRemanence. Definition at line 132 of file transform_shape.h. Referenced by NL3D::CInstanceUser::isStarted().
00132 { return false; } |
|
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); } |
|
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 } |
|
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 from NL3D::CTransform. Definition at line 248 of file transform_shape.cpp. References NL3D::CTransform::getOwnerScene(), NL3D::CScene::getRenderTrav(), NL3D::CRenderTrav::isCurrentPassOpaque(), and NL3D::CTransformShape::Shape.
00249 { 00250 // profile the shape. 00251 if(Shape) 00252 { 00253 CRenderTrav &rdrTrav= getOwnerScene()->getRenderTrav(); 00254 bool currentPassOpaque= rdrTrav.isCurrentPassOpaque(); 00255 00256 Shape->profileSceneRender( &rdrTrav, this, currentPassOpaque ); 00257 } 00258 } |
|
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 {} |
|
Call at the begining of the program, to register the model.
Reimplemented from NL3D::CTransformShape. Definition at line 75 of file water_model.cpp. References NL3D::TransformShapeId, and NL3D::WaterModelClassId.
00076 { 00077 CScene::registerModel(WaterModelClassId, TransformShapeId, CWaterModel::creator); 00078 } |
|
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 } |
|
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 } |
|
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 } |
|
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 137 of file transform_shape.h. Referenced by NL3D::CScene::createInstance(), and NL3D::CInstanceUser::setDistMax().
00137 { _DistMax = distMax; } |
|
Definition at line 378 of file transform.cpp. References NL3D::CTransform::_DontUnfreezeChildren. Referenced by NL3D::CInstanceGroup::createRoot().
00379 { 00380 _DontUnfreezeChildren = val; 00381 } |
|
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(), 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 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().
|
|
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 } |
|
|
For deriver who wants to setup their own current lightContribution setup (as skeleton). Must call changeLightSetup() so change are effectively made in driver Definition at line 98 of file transform_shape.cpp. References NL3D::CTransformShape::_CurrentLightContribution, and NL3D::CTransformShape::_CurrentUseLocalAttenuation. Referenced by NL3D::CSkeletonModel::renderSkins().
00099 { 00100 _CurrentLightContribution= lightContrib; 00101 _CurrentUseLocalAttenuation= useLocalAtt; 00102 } |
|
set matrix set all our constants in one call Definition at line 831 of file water_model.cpp. References NL3D::CWaterShape::_BumpMap, NL3D::CWaterShape::_ColorMap, _ColorMapMatColumn0, _ColorMapMatColumn1, _ColorMapMatPos, NL3D::CWaterShape::_EnvMap, NL3D::CWaterShape::_HeightMapScale, NL3D::CWaterShape::_HeightMapSpeed, NL3D::CWaterShape::_VertexProgramBump2, NL3D::CWaterShape::_VertexProgramBump2Diffuse, _WaterMat, NL3D::CWaterShape::_WaveHeightFactor, NL3D::IDriver::activeVertexProgram(), NL3D::CWaterShape::envMapUpdate(), NL3D::CWaterShape::getColorMap(), NLMISC::CTime::getLocalTime(), NL3D::CWaterShape::initVertexProgram(), nlwarning, NLMISC::CVectorH::set(), NL3D::CMaterial::setBlend(), NL3D::CMaterial::setColor(), NL3D::IDriver::setConstant(), NL3D::IDriver::setConstantMatrix(), NL3D::CMaterial::setDoubleSided(), NL3D::CMaterial::setDstBlend(), NL3D::CMaterial::setLighting(), NL3D::CMaterial::setShader(), NL3D::CMaterial::setSrcBlend(), NL3D::CMaterial::setZWrite(), uint, updateDiffuseMapMatrix(), NLMISC::CVector::x, NLMISC::CVector2f::x, NLMISC::CVector2f::y, NLMISC::CVector::y, and NLMISC::CVector::z. Referenced by traverseRender().
00832 { 00833 static bool matSetupped = false; 00834 if (!matSetupped) 00835 { 00836 _WaterMat.setLighting(false); 00837 _WaterMat.setDoubleSided(true); 00838 _WaterMat.setColor(NLMISC::CRGBA::White); 00839 _WaterMat.setBlend(true); 00840 _WaterMat.setSrcBlend(CMaterial::srcalpha); 00841 _WaterMat.setDstBlend(CMaterial::invsrcalpha); 00842 _WaterMat.setZWrite(true); 00843 _WaterMat.setShader(CMaterial::Water); 00844 } 00845 00846 00847 const uint cstOffset = 4; // 4 places for the matrix 00848 NLMISC::CVectorH cst[13]; 00849 00850 00851 //=========================// 00852 // setup Water material // 00853 //=========================// 00854 00855 CWaterModel::_WaterMat.setTexture(0, shape->_BumpMap[0]); 00856 CWaterModel::_WaterMat.setTexture(1, shape->_BumpMap[1]); 00857 CWaterModel::_WaterMat.setTexture(3, shape->_ColorMap); 00858 00859 if (!above && shape->_EnvMap[1]) 00860 { 00861 CWaterModel::_WaterMat.setTexture(2, shape->_EnvMap[1]); 00862 } 00863 else 00864 { 00865 CWaterModel::_WaterMat.setTexture(2, shape->_EnvMap[0]); 00866 } 00867 00868 00869 shape->envMapUpdate(); 00870 00871 const uint alphaMapStage = 3; 00872 if (shape->_ColorMap) 00873 { 00874 //WaterMat.setTexture(alphaMapStage, shape->_ColorMap); 00875 //if (shape->_ColorMap->supportSharing()) nlinfo(shape->_ColorMap->getShareName().c_str()); 00876 00877 00878 // setup 2x3 matrix for lookup in diffuse map 00879 updateDiffuseMapMatrix(); 00880 cst[13 - cstOffset].set(_ColorMapMatColumn0.x, _ColorMapMatColumn1.x, 0, _ColorMapMatColumn0.x * obsPos.x + _ColorMapMatColumn1.x * obsPos.y + _ColorMapMatPos.x); 00881 cst[14 - cstOffset].set(_ColorMapMatColumn0.y, _ColorMapMatColumn1.y, 0, _ColorMapMatColumn0.y * obsPos.x + _ColorMapMatColumn1.y * obsPos.y + _ColorMapMatPos.y); 00882 } 00883 else 00884 { 00885 cst[13 - cstOffset].set(0, 0, 0, 0); 00886 cst[14 - cstOffset].set(0, 0, 0, 0); 00887 } 00888 00889 cst[16 - cstOffset].set(0.1f, 0.1f, 0.1f, 0.1f); // used to avoid imprecision when performing a RSQ to get distance from the origin 00890 // cst[16 - cstOffset].set(0.0f, 0.0f, 0.0f, 0.0f); // used to avoid imprecision when performing a RSQ to get distance from the origin 00891 00892 00893 00894 00895 cst[5 - cstOffset].set(0.f, 0.f, 0.f, 0.f); // claping negative values to 0 00896 00897 // slope of attenuation of normal / height with distance 00898 const float invMaxDist = shape->_WaveHeightFactor / maxDist; 00899 cst[6 - cstOffset].set(invMaxDist, shape->_WaveHeightFactor, 0, 0); 00900 00901 /*cst[6 - cstOffset].set(invMaxDist, invMaxDist, invMaxDist, invMaxDist); // upcoming light vectorshape->_WaveHeightFactor 00902 cst[15 - cstOffset].set(shape->_WaveHeightFactor, shape->_WaveHeightFactor, shape->_WaveHeightFactor, shape->_WaveHeightFactor); 00903 */ 00904 00905 00906 00907 00909 drv->setConstantMatrix(0, IDriver::ModelViewProjection, IDriver::Identity); 00910 00911 // retrieve current time 00912 float date = 0.001f * (NLMISC::CTime::getLocalTime() & 0xffffff); // must keep some precision. 00913 // set bumpmaps pos 00914 cst[9 - cstOffset].set(fmodf(obsPos.x * shape->_HeightMapScale[0].x, 1.f) + fmodf(date * shape->_HeightMapSpeed[0].x, 1.f), fmodf(shape->_HeightMapScale[0].y * obsPos.y, 1.f) + fmodf(date * shape->_HeightMapSpeed[0].y, 1.f), 0.f, 1.f); // bump map 0 offset 00915 cst[10 - cstOffset].set(shape->_HeightMapScale[0].x, shape->_HeightMapScale[0].y, 0, 1); // bump map 0 scale 00916 cst[11 - cstOffset].set(fmodf(shape->_HeightMapScale[1].x * obsPos.x, 1.f) + fmodf(date * shape->_HeightMapSpeed[1].x, 1.f), fmodf(shape->_HeightMapScale[1].y * obsPos.y, 1.f) + fmodf(date * shape->_HeightMapSpeed[1].y, 1.f), 0.f, 0.f); // bump map 1 offset 00917 cst[12 - cstOffset].set(shape->_HeightMapScale[1].x, shape->_HeightMapScale[1].y, 0, 1); // bump map 1 scale 00918 00919 00920 00921 00922 cst[4 - cstOffset].set(1.f, 1.f, 1.f, 1.f); // use with min man, and to get the 1 constant 00923 cst[7 - cstOffset].set(0, 0, obsPos.z - zHeight, 1.f); 00924 cst[8 - cstOffset].set(0.5f, 0.5f, 0.f, 0.f); // used to scale reflected ray into the envmap 00925 00926 00927 00928 00930 drv->setConstant(4, sizeof(cst) / sizeof(cst[0]), (float *) &cst[0]); 00931 00932 shape->initVertexProgram(); 00933 bool result; 00934 /* 00935 if (useBumpedVersion) 00936 { 00937 if (!useEMBM) 00938 { 00939 result = shape->getColorMap() ? drv->activeVertexProgram((shape->_VertexProgramBump2Diffuse).get()) 00940 : drv->activeVertexProgram((shape->_VertexProgramBump2).get()); 00941 } 00942 else 00943 { 00944 result = shape->getColorMap() ? drv->activeVertexProgram((shape->_VertexProgramBump1Diffuse).get()) 00945 : drv->activeVertexProgram((shape->_VertexProgramBump1).get()); 00946 } 00947 } 00948 else 00949 { 00950 result = shape->getColorMap() ? drv->activeVertexProgram((shape->_VertexProgramNoBumpDiffuse).get()) 00951 : drv->activeVertexProgram((shape->_VertexProgramNoBump).get()); 00952 } 00953 */ 00954 00955 00956 00957 result = shape->getColorMap() ? drv->activeVertexProgram((shape->_VertexProgramBump2Diffuse).get()) 00958 : drv->activeVertexProgram((shape->_VertexProgramBump2).get()); 00959 00960 // 00961 if (!result) nlwarning("no vertex program setupped"); 00962 } |
|
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;} |
|
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 } |
|
Reimplemented in NL3D::CSegRemanence. Definition at line 128 of file transform_shape.h. Referenced by NL3D::CInstanceUser::start().
00128 {}; |
|
Reimplemented in NL3D::CSegRemanence. Definition at line 130 of file transform_shape.h. Referenced by NL3D::CInstanceUser::stop().
00130 {}; |
|
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 in NL3D::CCluster, NL3D::CLandscapeModel, NL3D::CParticleSystemModel, NL3D::CQuadGridClipManager, and NL3D::CRootModel. Definition at line 806 of file transform.cpp. References NL3D::CTransform::_AncestorSkeletonModel, NL3D::CTransform::_ClipDate, NL3D::CTransform::_FatherSkeletonModel, NL3D::CTransform::_ForceCLodSticked, NL3D::CTransform::_RenderFilterType, NL3D::CTransform::_StateFlags, NL3D::CTransform::_Visible, NL3D::CTransform::_WorldVis, NL3D::CLightTrav::addLightedModel(), NL3D::CRenderTrav::addRenderModel(), NL3D::CLoadBalancingTrav::addVisibleModel(), NL3D::CAnimDetailTrav::addVisibleModel(), NL3D::CClipTrav::addVisibleModel(), NL3D::CTransform::clip(), NL3D::CTransform::clipGetChild(), NL3D::CTransform::clipGetNumChildren(), NL3D::CClipTrav::CurrentDate, NL3D::CScene::getAnimDetailTrav(), NL3D::CScene::getClipTrav(), NL3D::CScene::getFilterRenderFlags(), NL3D::CScene::getLightTrav(), NL3D::CScene::getLoadBalancingTrav(), NL3D::CTransform::getOwnerScene(), NL3D::CScene::getRenderTrav(), NL3D::CTransform::isAnimDetailable(), NL3D::CTransform::isClipVisible(), NL3D::CSkeletonModel::isDisplayedAsLodCharacter(), NL3D::CTransform::isLightable(), NL3D::CTransform::isLoadBalancable(), NL3D::CTransform::isRenderable(), num, uint, and NL3D::CTransform::UserClipping. Referenced by NL3D::CCluster::recursTraverseClip(), NL3D::CClipTrav::traverse(), NL3D::CRootModel::traverseClip(), and NL3D::CParticleSystemModel::traverseClip().
00807 { 00808 // disable H_AUTO, because slowdown when lot of models (eg 1000-2000 tested in forest) 00809 //H_AUTO( NL3D_TransformClip ); 00810 00811 CScene *scene= getOwnerScene(); 00812 CClipTrav &clipTrav= scene->getClipTrav(); 00813 00814 if ((_ClipDate == clipTrav.CurrentDate) && _Visible) 00815 return; 00816 _ClipDate = clipTrav.CurrentDate; 00817 00818 // clip: update Visible flag. 00819 _Visible= false; 00820 // if at least visible. 00821 if(_WorldVis) 00822 { 00823 // If linked to a SkeletonModel anywhere in the hierarchy, don't clip, and use skeleton model clip result. 00824 // This works because we are sons of a special node which is not in the clip traversal, and 00825 // which is traversed at end of the traversal. 00826 if( _AncestorSkeletonModel!=NULL ) 00827 { 00828 _Visible= _AncestorSkeletonModel->isClipVisible(); 00829 // Special test: if we are sticked to a skeletonModel, and if we are still visible, maybe we don't have to 00830 if(_Visible && _FatherSkeletonModel) 00831 { 00832 // if our skeletonModel father is displayed with a Lod, maybe we are not to be displayed 00833 if(_FatherSkeletonModel->isDisplayedAsLodCharacter()) 00834 { 00835 // We are visible only if we where sticked to the skeleton with forceCLod==true. 00836 // This is also true if we are actually a skeletonModel 00837 if(!_ForceCLodSticked) 00838 // otherWise we are not visible. eg: this is the case of skins and some sticked object 00839 _Visible= false; 00840 } 00841 } 00842 } 00843 // else, clip. 00844 else 00845 { 00846 // If the instance is not filtered 00847 if(scene->getFilterRenderFlags() & _RenderFilterType) 00848 { 00849 // User cliping enabled ? 00850 if (_StateFlags & UserClipping) 00851 _Visible= true; 00852 else 00853 _Visible= clip(); 00854 } 00855 } 00856 } 00857 00858 // if visible, add to list. 00859 if(_Visible) 00860 { 00861 // add this model to the visibility list. 00862 clipTrav.addVisibleModel(this); 00863 00864 // Has not an ancestor skeleton model? 00865 if( _AncestorSkeletonModel==NULL ) 00866 { 00867 // If needed, insert the model in the lighted list. 00868 // don't insert if has an ancestorSkeletonModel, because in this case, result is driven by 00869 // the _LightContribution of the _AncestorSkeletonModel. 00870 if( isLightable() ) 00871 scene->getLightTrav().addLightedModel(this); 00872 00873 // If needed, insert the model in the animDetail list. 00874 // don't insert if has an ancestoreSkeletonModel, because in this case, this ancestore will 00875 // animDetail through the hierarchy... 00876 if( isAnimDetailable() ) 00877 scene->getAnimDetailTrav().addVisibleModel(this); 00878 } 00879 00880 // If needed, Add it to the loadBalancing trav 00881 if( isLoadBalancable() ) 00882 scene->getLoadBalancingTrav().addVisibleModel(this); 00883 00884 // If needed, insert the model in the render list. 00885 if( isRenderable() ) 00886 scene->getRenderTrav().addRenderModel(this); 00887 } 00888 00889 // Traverse the Clip sons. 00890 uint num= clipGetNumChildren(); 00891 for(uint i=0;i<num;i++) 00892 clipGetChild(i)->traverseClip(); 00893 } |
|
Each method is called in its associated traversal.
Reimplemented in NL3D::CCluster, NL3D::CLandscapeModel, NL3D::CMeshBaseInstance, NL3D::CQuadGridClipManager, and NL3D::CRootModel. Definition at line 786 of file transform.cpp. References NL3D::CTransform::hrcGetChild(), NL3D::CTransform::hrcGetNumChildren(), num, uint, and NL3D::CTransform::updateWorld(). Referenced by NL3D::CHrcTrav::traverse(), and NL3D::CRootModel::traverseHrc().
00787 { 00788 // Recompute the matrix, according to _HrcParent matrix mode, and local matrix. 00789 updateWorld(); 00790 00791 // Traverse the Hrc sons. 00792 uint num= hrcGetNumChildren(); 00793 for(uint i=0;i<num;i++) 00794 hrcGetChild(i)->traverseHrc(); 00795 } |
|
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 from NL3D::CTransform. Reimplemented in NL3D::CMeshMultiLodInstance. Definition at line 262 of file transform_shape.cpp. References NL3D::CScene::getLoadBalancingTrav(), NL3D::CLoadBalancingTrav::getLoadPass(), NL3D::CTransform::getOwnerScene(), NL3D::CTransformShape::traverseLoadBalancingPass0(), and NL3D::CTransformShape::traverseLoadBalancingPass1().
00263 { 00264 CLoadBalancingTrav &loadTrav= getOwnerScene()->getLoadBalancingTrav(); 00265 if(loadTrav.getLoadPass()==0) 00266 traverseLoadBalancingPass0(); 00267 else 00268 traverseLoadBalancingPass1(); 00269 } |
|
Compute the origin of the area of Water covered by the height map. We use this to converted from object space to 2d map space We don't store a heighmap for a complete Water area we just consider the height of Water columns that are near the observer Compute a quad in Water height field space that contains the useful heights This helps us to decide wether we should do a lookup in the height map get the pos used in the height map (may not be the same than our current pos, has it is taken in account every 'PropagationTime' second Reimplemented from NL3D::CTransformShape. Definition at line 437 of file water_model.cpp. References _ClippedPoly, _EndClippedPoly, NL3D::CWaterShape::_GridSizeTouched, NL3D::CWaterShape::_MaxGridSize, NL3D::CWaterShape::_TransitionRatio, NL3D::CWaterShape::_VB, NL3D::CWaterShape::_WaterPoolID, NL3D::CWaterShape::_XGridBorder, NL3D::IDriver::activeVertexBuffer(), NL3D::IDriver::activeVertexProgram(), NL3D::CWaterHeightMap::animate(), NL3D::IDriver::beginMaterialMultiPass(), NL3D::CTravCameraScene::Bottom, NL3D::CTravCameraScene::CamMatrix, NL3D::CTravCameraScene::CamPos, NLMISC::CPolygon2D::computeBorders(), NL3D::ComputeUpMatrix(), count, NL3D::CHrcTrav::CurrentDate, NL3D::CWaterHeightMap::Date, doSimpleRender(), NL3D::DrawPoly2D(), NL3D::IDriver::endMaterialMultiPass(), NL3D::CTravCameraScene::Far, NL3D::CRenderTrav::getDriver(), NL3D::CScene::getHrcTrav(), NLMISC::CMatrix::getI(), NLMISC::CMatrix::getJ(), NLMISC::CMatrix::getK(), NL3D::CTransform::getOwnerScene(), NL3D::CWaterPoolManager::getPoolByID(), NLMISC::CMatrix::getPos(), NL3D::CScene::getRenderTrav(), NL3D::CWaterHeightMap::getSize(), NL3D::CWaterHeightMap::getUnitSize(), NL3D::CWaterHeightMap::getUserPos(), NL3D::CVertexBuffer::getVertexCoordPointer(), NL3D::CVertexBuffer::getVertexSize(), NL3D::GetWaterPoolManager(), NL3D::CTransform::getWorldMatrix(), H_AUTO, NLMISC::CMatrix::inverted(), NL3D::IDriver::isWaterShaderSupported(), NL3D::CTravCameraScene::Left, min, NLMISC::CMatrix::movePos(), NL3D::CTravCameraScene::Near, nlassert, NL3D::IDriver::renderSimpleTriangles(), NL3D::CTravCameraScene::Right, NLMISC::CMatrix::setPos(), NL3D::IDriver::setupMaterial(), setupMaterialNVertexShader(), NL3D::IDriver::setupMaterialPass(), NL3D::IDriver::setupModelMatrix(), NL3D::CWaterShape::setupVertexBuffer(), NL3D::SetupWaterVertex(), NL3D::CWaterHeightMap::setUserPos(), sint, sint64, t, NL3D::CTravCameraScene::Top, NLMISC::CPolygon2D::TRasterVect, uint, uint8, NLMISC::CPolygon2D::Vertices, NLMISC::CPolygon::Vertices, NL3D::CTravCameraScene::ViewMatrix, NLMISC::CVector::x, NLMISC::CVector::y, and NLMISC::CVector::z.
00438 { 00439 H_AUTO( NL3D_Water_Render ); 00440 00441 CRenderTrav &renderTrav = getOwnerScene()->getRenderTrav(); 00442 IDriver *drv = renderTrav.getDriver(); 00443 00444 00445 #ifndef FORCE_SIMPLE_WATER_RENDER 00446 if (!drv->isWaterShaderSupported()) 00447 #endif 00448 { 00449 doSimpleRender(drv); 00450 return; 00451 } 00452 00453 CWaterShape *shape = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 00454 00455 00456 if (shape->_GridSizeTouched) 00457 { 00458 shape->setupVertexBuffer(); 00459 } 00460 00461 // inverted object world matrix 00462 //NLMISC::CMatrix invObjMat = getWorldMatrix().inverted(); 00463 00464 // viewer pos in world space 00465 const NLMISC::CVector &obsPos = /*invObjMat **/ renderTrav.CamPos; 00466 00467 // camera matrix in world space 00468 const NLMISC::CMatrix &camMat = renderTrav.CamMatrix; 00469 00470 // view matrix (inverted cam matrix) 00471 const NLMISC::CMatrix &viewMat = renderTrav.ViewMatrix; 00472 00473 // compute the camera matrix such as there is no rotation around the y axis 00474 NLMISC::CMatrix camMatUp; 00475 ComputeUpMatrix(camMat.getJ(), camMatUp, camMat); 00476 camMatUp.setPos(camMat.getPos()); 00477 00478 const NLMISC::CMatrix matViewUp = camMatUp.inverted(); 00479 00480 // plane z pos in world 00481 const float zHeight = getWorldMatrix().getPos().z; 00482 00483 const sint numStepX = CWaterShape::getScreenXGridSize(); 00484 const sint numStepY = CWaterShape::getScreenYGridSize(); 00485 00486 const float invNumStepX = 1.f / numStepX; 00487 const float invNumStepY = 1.f / numStepY; 00488 00489 const uint rotBorderSize = (shape->_MaxGridSize + (shape->_XGridBorder << 1) - numStepX) >> 1; 00490 00491 const sint isAbove = obsPos.z > zHeight ? 1 : 0; 00492 00493 00494 #ifdef NO_WATER_TESSEL 00495 const float transitionDist = renderTrav.Near * 0.99f; 00496 #else 00497 const float transitionDist = shape->_TransitionRatio * renderTrav.Far; 00498 #endif 00499 00500 00501 NLMISC::CMatrix modelMat; 00502 modelMat.setPos(NLMISC::CVector(obsPos.x, obsPos.y, zHeight)); 00503 drv->setupModelMatrix(modelMat); 00504 00505 00506 00507 00508 //==================// 00509 // material setup // 00510 //==================// 00511 00512 CWaterHeightMap &whm = GetWaterPoolManager().getPoolByID(shape->_WaterPoolID); 00513 00514 setupMaterialNVertexShader(drv, shape, obsPos, isAbove > 0, whm.getUnitSize() * (whm.getSize() >> 1), zHeight); 00515 00516 00517 drv->setupMaterial(CWaterModel::_WaterMat); 00518 00519 00520 00521 sint numPass = drv->beginMaterialMultiPass(); 00522 nlassert(numPass == 1); // for now, we assume water is always rendered in a single pass ! 00523 drv->setupMaterialPass(0); 00524 00525 00526 //setAttenuationFactor(drv, false, obsPos, camMat.getJ(), farDist); 00527 //disableAttenuation(drv); 00528 00529 00530 //================================// 00531 // Vertex buffer setup // 00532 //================================// 00533 00534 drv->activeVertexBuffer(shape->_VB); 00535 00536 //================================// 00537 // tesselated part of the poly // 00538 //================================// 00539 00540 if (_ClippedPoly.Vertices.size()) 00541 { 00542 00543 00544 00545 //======================================// 00546 // Polygon projection on the near plane // 00547 //======================================// 00548 00549 static NLMISC::CPolygon2D projPoly; // projected poly 00550 projPoly.Vertices.resize(_ClippedPoly.Vertices.size()); 00551 const float Near = renderTrav.Near; 00552 const float xFactor = (numStepX >> 1) * Near / renderTrav.Right; 00553 const float xOffset = (float) (numStepX >> 1) + 0.5f; 00554 const float yFactor = - (numStepX >> 1) * Near / renderTrav.Top; 00555 const float yOffset = (float) (numStepY >> 1) - 0.5f * isAbove; 00556 00557 const NLMISC::CMatrix projMat = matViewUp * getWorldMatrix(); 00558 uint k; 00559 for (k = 0; k < _ClippedPoly.Vertices.size(); ++k) 00560 { 00561 // project points in the view 00562 NLMISC::CVector t = projMat * _ClippedPoly.Vertices[k]; 00563 float invY = 1.f / t.y; 00564 projPoly.Vertices[k].set(xFactor * t.x * invY + xOffset, yFactor * t.z * invY + yOffset); 00565 } 00566 00567 00568 00569 //=============================================// 00570 // compute borders of poly at a low resolution // 00571 //=============================================// 00572 00573 NLMISC::CPolygon2D::TRasterVect rasters; 00574 sint startY; 00575 projPoly.computeBorders(rasters, startY); 00576 00577 if (rasters.size()) 00578 { 00579 //===========================// 00580 // perform Water animation // 00581 //===========================// 00582 00583 const float WaterRatio = whm.getUnitSize(); 00584 const float invWaterRatio = 1.f / WaterRatio; 00585 const uint WaterHeightMapSize = whm.getSize(); 00586 const uint doubleWaterHeightMapSize = (WaterHeightMapSize << 1); 00587 00588 00589 sint64 idate = getOwnerScene()->getHrcTrav().CurrentDate; 00590 00591 00592 00593 if (idate != whm.Date) 00594 { 00595 whm.setUserPos((sint) (obsPos.x * invWaterRatio) - (WaterHeightMapSize >> 1), 00596 (sint) (obsPos.y * invWaterRatio) - (WaterHeightMapSize >> 1) 00597 ); 00598 nlassert(getOwnerScene()); // this object should have been created from a CWaterShape! 00599 whm.animate((float) (getOwnerScene()->getEllapsedTime())); 00600 whm.Date = idate; 00601 } 00602 00603 //float startDate = (float) (1000.f * NLMISC::CTime::ticksToSecond(NLMISC::CTime::getPerformanceTime())); 00604 00605 //=====================================// 00606 // compute heightmap useful area // 00607 //=====================================// 00608 00616 sint mapPosX, mapPosY; 00617 00620 whm.getUserPos(mapPosX, mapPosY); 00621 00622 const uint mapBorder = 3; 00623 /*const sint qRight = (sint) mapPosX + (WaterHeightMapSize >> 1) - mapBorder; 00624 sint qLeft = (sint) mapPosX - (WaterHeightMapSize >> 1); 00625 const sint qUp = (sint) mapPosY + (WaterHeightMapSize >> 1) - mapBorder; 00626 sint qDown = (sint) mapPosY - (WaterHeightMapSize >> 1); */ 00627 00628 00629 const sint qRight = (sint) mapPosX + WaterHeightMapSize - mapBorder; 00630 sint qLeft = (sint) mapPosX; 00631 const sint qUp = (sint) mapPosY + WaterHeightMapSize - mapBorder; 00632 sint qDown = (sint) mapPosY; 00633 00635 const sint qSubLeft = qLeft - (uint) qLeft % WaterHeightMapSize; 00636 const sint qSubDown = qDown - (uint) qDown % WaterHeightMapSize; 00637 00638 qLeft += mapBorder; 00639 qDown += mapBorder; 00640 00641 00642 00643 00644 //==============================================// 00645 // setup rays to be traced, and their increment // 00646 //==============================================// 00647 00648 00649 // compute camera rays in world space 00650 NLMISC::CVector currHV = renderTrav.Left * camMatUp.getI() + renderTrav.Near * camMatUp.getJ() + renderTrav.Top * camMatUp.getK(); // current border vector, incremented at each line 00651 NLMISC::CVector currV; // current ray vector 00652 NLMISC::CVector xStep = (renderTrav.Right - renderTrav.Left) * invNumStepX * camMatUp.getI(); // xStep for the ray vector 00653 NLMISC::CVector yStep = (renderTrav.Bottom - renderTrav.Top) * invNumStepY * camMatUp.getK(); // yStep for the ray vector 00654 00655 00656 00657 //===============================================// 00658 // perform display // 00659 //===============================================// 00660 00661 // scale currHV at the top of the poly 00662 currHV += (startY - 0.5f * isAbove) * yStep; 00663 00664 // current index buffer used. We swap each time a row has been drawn 00665 std::vector<uint32> *currIB = &CWaterShape::_IBUpDown, *otherIB = &CWaterShape::_IBDownUp; 00666 00667 00668 sint vIndex = 0; // index in vertices 00669 00670 // current raster position 00671 sint oldStartX, oldEndX, realStartX, realEndX; 00672 //float invNearWidth = numStepX / (renderTrav.Right - renderTrav.Left); 00673 00674 //nlinfo("size = %d, maxSize = ", rasters.size(), numStepY); 00675 00676 00677 const uint wqHeight = rasters.size(); 00678 if (wqHeight) 00679 { 00680 // denominator of the intersection equation 00681 const float denom = - obsPos.z + zHeight; 00682 // test the upper raster 00683 // if it is above the horizon, we modify it to reach the correct location 00684 const float horizonEpsilon = 10E-4f; // we must be a little below the horizon 00685 00686 // distance from the viewer along the traced ray 00687 float t; 00688 00689 00690 00691 00692 NLMISC::CPolygon2D::TRasterVect::const_iterator it = rasters.begin(); 00693 for (uint l = 0; l <= wqHeight; ++l) 00694 { 00695 //nlinfo("start = %d, end = %d", it->first, it->second); 00696 const sint startX = it->first; 00697 const sint endX = (it->second + 1); 00698 00699 nlassert(startX >= - (sint) rotBorderSize); 00700 nlassert(endX <= (sint) (numStepX + rotBorderSize)); 00701 00702 if (l != 0) 00703 { 00704 realStartX = std::min(startX, oldStartX); 00705 realEndX = std::max(endX, oldEndX); 00706 } 00707 else 00708 { 00709 realStartX = startX; 00710 realEndX = endX; 00711 } 00712 00713 00714 // current view vector 00715 currV = currHV + (realStartX - 0.5f) * xStep; 00716 00717 if (l == 0) 00718 { 00719 if (isAbove) 00720 { 00721 // test wether the first row is out of horizon. 00722 // if this is the case, we make a correction 00723 if (denom * currV.z <= 0) 00724 { 00725 // correct for the first line only by adding a y offset 00726 currV += yStep * ((denom > 0 ? horizonEpsilon : - horizonEpsilon) - currV.z) / yStep.z; 00727 } 00728 00729 // now, for the transition, check wether the first raster does not go over the transition dist 00730 00731 t = denom / currV.z; 00732 const float VJ = camMat.getJ() * currV; 00733 if ( t * VJ > transitionDist) 00734 { 00735 float delta = (1.f / yStep.z) * ( denom * VJ / transitionDist - currV.z); 00736 // correct the first line to reach that position 00737 currV += delta * yStep; 00738 } 00739 } 00740 } 00741 00742 00743 uint8 *vbPointer = (uint8 *) shape->_VB.getVertexCoordPointer() + shape->_VB.getVertexSize() * (vIndex + realStartX + rotBorderSize); 00744 00745 00746 for (sint k = realStartX; k <= realEndX; ++k) 00747 { 00748 t = denom / currV.z; 00749 // compute intersection with plane 00750 NLMISC::CVector inter = t * currV; 00751 inter.z += obsPos.z; 00752 SetupWaterVertex(qLeft, qRight, qUp, qDown, qSubLeft, qSubDown, inter, invWaterRatio, doubleWaterHeightMapSize, whm, vbPointer, obsPos.x, obsPos.y); 00753 currV += xStep; 00754 } 00755 00756 if (l != 0) // 2 line of the ib done ? 00757 { 00758 sint count = oldEndX - oldStartX; 00759 if (count > 0) 00760 { 00761 drv->renderSimpleTriangles(&((*currIB)[(oldStartX + rotBorderSize) * 6]), 00762 2 * count ); 00763 } 00764 } 00765 00766 oldStartX = startX; 00767 oldEndX = endX; 00768 currHV += yStep; 00769 vIndex = (numStepX + 2 * rotBorderSize + 1) - vIndex; // swap first row and second row 00770 std::swap(currIB, otherIB); 00771 if (l < (wqHeight - 1)) 00772 { 00773 ++it; 00774 } 00775 else 00776 { 00777 if (!isAbove) 00778 { 00779 // last line 00780 // test wether we are out of horizon 00781 if (denom * currHV.z <= 0) 00782 { 00783 // correct for the first line only by adding a y offset 00784 currHV += yStep * ((denom > 0 ? horizonEpsilon : - horizonEpsilon) - currHV.z) / yStep.z; 00785 } 00786 00787 // now, for the transition, check wether the first raster does not go over the transition dist 00788 00789 t = denom / currHV.z; 00790 const float VJ = camMat.getJ() * currHV; 00791 if ( t * VJ > transitionDist) 00792 { 00793 float delta = (1.f / yStep.z) * ( denom * VJ / transitionDist - currHV.z); 00794 // correct the first line to reach that position 00795 currHV += delta * yStep; 00796 } 00797 } 00798 00799 } 00800 } 00801 00802 } 00803 //nlinfo("display: %f ms", (float) (1000.f * NLMISC::CTime::ticksToSecond(NLMISC::CTime::getPerformanceTime()) - startDate)); 00804 } 00805 } 00806 00807 //=========================================// 00808 // display end poly // 00809 //=========================================// 00810 00811 if (_EndClippedPoly.Vertices.size() != 0) 00812 { 00813 00814 CMatrix xform = _WorldMatrix; 00815 xform.movePos(NLMISC::CVector(- obsPos.x, - obsPos.y, _WorldMatrix.getPos().z)); 00816 DrawPoly2D(shape->_VB, drv, xform, _EndClippedPoly); 00817 } 00818 00819 drv->endMaterialMultiPass(); 00820 00821 00822 drv->activeVertexProgram(NULL); 00823 00824 } |
|
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 } |
|
special feature for CQuadGridClipManager. remove from it.
Reimplemented from NL3D::CTransform. Definition at line 133 of file transform_shape.cpp. References NL3D::CTransformShape::_QuadClusterListNode, and NL3D::CFastPtrListNode::unlink().
00134 {
00135 // if linked to a quadGridClipCluster, unlink it
00136 _QuadClusterListNode.unlink();
00137 }
|
|
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 } |
|
Definition at line 1339 of file water_model.cpp. References _ColorMapMatColumn0, NL3D::CWaterShape::_ColorMapMatColumn0, _ColorMapMatColumn1, NL3D::CWaterShape::_ColorMapMatColumn1, _ColorMapMatPos, NL3D::CWaterShape::_ColorMapMatPos, _MatrixUpdateDate, NL3D::ITransformable::compareMatrixDate(), NLMISC::CMatrix::getI(), NLMISC::CMatrix::getJ(), NLMISC::CMatrix::getK(), NL3D::ITransformable::getMatrixDate(), NLMISC::CMatrix::getPos(), NL3D::CTransform::getWorldMatrix(), NLMISC::CMatrix::inverted(), NLMISC::CVector2f::set(), NLMISC::CMatrix::setRot(), NLMISC::CVector::x, NLMISC::CVector2f::x, NLMISC::CVector::y, and NLMISC::CVector2f::y. Referenced by init(), and setupMaterialNVertexShader().
01340 { 01341 if (compareMatrixDate(_MatrixUpdateDate) ||force) 01342 { 01343 CWaterShape *shape = NLMISC::safe_cast<CWaterShape *>((IShape *) Shape); 01344 if (shape) 01345 { 01346 _MatrixUpdateDate = getMatrixDate(); 01347 // update the uv matrix 01348 CMatrix uvMat; 01349 uvMat.setRot(CVector(shape->_ColorMapMatColumn0.x, shape->_ColorMapMatColumn0.y, 0.f), 01350 CVector(shape->_ColorMapMatColumn1.x, shape->_ColorMapMatColumn1.y, 0.f), 01351 CVector(shape->_ColorMapMatPos.x, shape->_ColorMapMatPos.y, 1.f)); 01352 CMatrix xformMat; 01353 CMatrix invMat = this->getWorldMatrix().inverted(); 01354 xformMat.setRot(CVector(invMat.getI().x, invMat.getI().y, 0.f), 01355 CVector(invMat.getJ().x, invMat.getJ().y, 0.f), 01356 CVector(invMat.getPos().x, invMat.getPos().y, 1.f)); 01357 uvMat = uvMat * xformMat; 01358 _ColorMapMatColumn0.set(uvMat.getI().x, uvMat.getI().y); 01359 _ColorMapMatColumn1.set(uvMat.getJ().x, uvMat.getJ().y); 01360 _ColorMapMatPos.set(uvMat.getK().x, uvMat.getK().y); 01361 } 01362 } 01363 } |
|
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;} |
|
Definition at line 67 of file smart_ptr.h. |
|
Definition at line 95 of file water_model.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(). |
|
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 105 of file water_model.h. Referenced by clip(), computeClippedPoly(), computeSimpleClippedPoly(), doSimpleRender(), and traverseRender(). |
|
Definition at line 109 of file water_model.h. Referenced by setupMaterialNVertexShader(), and updateDiffuseMapMatrix(). |
|
Definition at line 109 of file water_model.h. Referenced by setupMaterialNVertexShader(), and updateDiffuseMapMatrix(). |
|
Definition at line 109 of file water_model.h. Referenced by setupMaterialNVertexShader(), and updateDiffuseMapMatrix(). |
|
Definition at line 848 of file transform.h. Referenced by NL3D::CTransform::CTransform(), NL3D::CTransform::setDontUnfreezeChildren(), and NL3D::CTransform::updateWorld(). |
|
Definition at line 107 of file water_model.h. Referenced by doSimpleRender(). |
|
Definition at line 106 of file water_model.h. Referenced by clip(), computeClippedPoly(), and traverseRender(). |
|
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(). |
|
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(). |
|
Definition at line 110 of file water_model.h. Referenced by updateDiffuseMapMatrix(). |
|
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(). |
|
Definition at line 58 of file water_model.cpp. Referenced by doSimpleRender(). |
|
Definition at line 57 of file water_model.cpp. Referenced by doSimpleRender(). |
|
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(). |
|
Definition at line 55 of file water_model.cpp. Referenced by setupMaterialNVertexShader(). |
|
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 79 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), NLMISC::CRefCount::getRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
Referenced by NLMISC::CRefCount::CRefCount(). |
|
Definition at line 80 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
The shape, the object instancied.
Definition at line 72 of file transform_shape.h. Referenced by NL3D::CTransformShape::clip(), NL3D::CSkeletonModel::computeLodTexture(), NL3D::CWaveMakerShape::createInstance(), NL3D::CWaterShape::createInstance(), NL3D::CSkeletonShape::createInstance(), NL3D::IShape::createInstance(), NL3D::CSegRemanenceShape::createInstance(), NL3D::CScene::createInstance(), NL3D::CParticleSystemShape::createInstance(), NL3D::CMeshMultiLod::createInstance(), NL3D::CMeshMRMSkinned::createInstance(), NL3D::CMeshMRM::createInstance(), NL3D::CMesh::createInstance(), NL3D::CFlareShape::createInstance(), NL3D::CScene::deleteInstance(), NL3D::CTransformShape::getAABBox(), NL3D::CTransformShape::getNumTriangles(), NL3D::CSkeletonUser::getShapeDistMax(), NL3D::CInstanceUser::getShapeDistMax(), NL3D::CTransformShape::profileRender(), NL3D::CSkeletonUser::setShapeDistMax(), NL3D::CInstanceUser::setShapeDistMax(), and NL3D::CTransformShape::traverseRender(). |