#include <landscape.h>
Inheritance diagram for NL3D::CLandscape:
Limits:
If you use the tiles mapped on the patches, load the near bank file (.bank) and the far bank file (.farbank) by seralizing TileBank and TileFarBank with those files. Then call initTileBanks.
Nevrax France
Definition at line 141 of file landscape.h.
Accessors. | |
const CZone * | getZone (sint zoneId) const |
CZone * | getZone (sint zoneId) |
void | getZoneList (std::vector< uint16 > &zoneIds) const |
void | buildZoneName (sint zoneId, std::string &zoneName) |
From an Id, return the name of the zone, in the form "150_EM", without extension. | |
Visual Collision system. | |
void | addPatchBlocksInBBox (const CPatchIdentEx &paIdEx, const CAABBox &bbox, std::vector< CPatchBlockIdent > &paBlockIds) |
void | addTrianglesInBBox (const CPatchIdentEx &paIdEx, const CAABBox &bbox, std::vector< CTrianglePatch > &triangles, uint8 tileTessLevel) const |
CQuadGrid< CPatchIdentEx > | _PatchQuadGrid |
The QuadGrid of patch. | |
const float | _PatchQuadGridEltSize = 16 |
const uint | _PatchQuadGridSize = 128 |
Dynamic ShadowMap | |
void | appendToShadowPolyReceiver (CTessFace *face) |
void | removeFromShadowPolyReceiver (CTessFace *face) |
CShadowPolyReceiver | _ShadowPolyReceiver |
Allocators. | |
void | deleteTessFace (CTessFace *f) |
void | deleteTessFarVertex (CTessFarVertex *v) |
void | deleteTessNearVertex (CTessNearVertex *v) |
void | deleteTessVertex (CTessVertex *v) |
void | deleteTileFace (CTileFace *tf) |
void | deleteTileMaterial (CTileMaterial *tm) |
CTessFace * | newTessFace () |
CTessFarVertex * | newTessFarVertex () |
CTessNearVertex * | newTessNearVertex () |
CTessVertex * | newTessVertex () |
CTileFace * | newTileFace () |
CTileMaterial * | newTileMaterial () |
CLandscapeFaceVectorManager | _FaceVectorManager |
CTessBlock | _TessBlockModificationRoot |
CBlockMemory< CTessFace > | TessFaceAllocator |
CBlockMemory< CTessFarVertex > | TessFarVertexAllocator |
CBlockMemory< CTessNearVertex > | TessNearVertexAllocator |
CBlockMemory< CTessVertex > | TessVertexAllocator |
CBlockMemory< CTileFace > | TileFaceAllocator |
CBlockMemory< CTileMaterial > | TileMaterialAllocator |
DynamicLighting management | |
CPatchDLMContextList * | getPatchDLMContextList () const |
for CPatch. | |
CTextureDLM * | getTextureDLM () const |
for CPatch. | |
CRGBA | _DLMGlobalVegetableColor |
an approximate value used to simulate diffuse material of vegetables | |
float | _DLMMaxAttEnd |
Max AttEnd. | |
CPatchDLMContextList * | _PatchDLMContextList |
List of DLM Context. | |
CRGBA | _PointLightDiffuseMaterial |
The diffuse material of landscape, used for StaticPointLights and DynamicPointLights. | |
NLMISC::CSmartPtr< ITexture > | _TextureDLM |
The dynamic lightmap Texture. | |
[NOHEADER] | |
const CTileVegetableDesc & | getTileVegetableDesc (uint16 tileId) |
bool | _DriverOkForVegetable |
Tells if the current dirver support vegetable. | |
CTessList< CLandscapeVegetableBlock > | _VegetableBlockList |
List of VegetableBlock, to be tested for creation each frame. | |
CVegetableManager * | _VegetableManager |
The VegetableManager. (ptr only for include speed). | |
bool | _VegetableManagerEnabled |
Tells if the Vegetable Managemnt is enabled. | |
UpdateLighting management | |
void | linkPatchToNearUL (CPatch *patch) |
Used by Patch to link/unlink from _ULRootNearPatch. | |
void | unlinkPatchFromNearUL (CPatch *patch) |
Used by Patch to link/unlink from _ULRootNearPatch. | |
void | updateLightingTextureFar (float ratio) |
Update All Far texture, given a ratio along total lumels. | |
void | updateLightingTextureNear (float ratio) |
Update All Near texture, given a ratio along total lumels. | |
float | _ULFarPixelsToUpdate |
Current number of far pixels to update. If negative, I have some advance. | |
float | _ULFrequency |
Frequency of update. | |
uint | _ULNearCurrentTessBlockId |
Current tessBlock id in the current patch processed. | |
float | _ULNearPixelsToUpdate |
Current number of near pixels to update. If negative, I have some advance. | |
double | _ULPrecTime |
Used by Patch to link/unlink from _ULRootNearPatch. | |
bool | _ULPrecTimeInit |
Used by Patch to link/unlink from _ULRootNearPatch. | |
CPatch * | _ULRootNearPatch |
The current patch rendered. | |
CTextureFar * | _ULRootTextureFar |
The current TextureFar rendered. | |
double | _ULTime |
Used by Patch to link/unlink from _ULRootNearPatch. | |
sint | _ULTotalFarPixels |
Far UpdateLighting. | |
sint | _ULTotalNearPixels |
Near UpdateLighting. | |
Public Member Functions | |
CLandscape () | |
Constructor. | |
const sint & | getRefCount () const |
~CLandscape () | |
Destructor. clear(). | |
Init/Build. | |
bool | addZone (const CZone &newZone) |
void | checkBinds (uint16 zoneId) throw (EBadBind) |
Verify the binding of patchs of one zone. throw EBadBind if error. nop if zone not loaded. | |
void | checkBinds () throw (EBadBind) |
Verify the binding of patchs of all zones. throw EBadBind if error. | |
void | clear () |
Disconnect, and Delete all zones. | |
void | init () |
init the landscape VBuffers, texture cache etc... | |
void | initTileBank () |
Reinit the tile bank if the bank change. | |
bool | initTileBanks () |
bool | removeZone (uint16 zoneId) |
Lightmap get interface. | |
void | appendTileLightInfluences (const CPatchIdent &patchId, const CUV &uv, std::vector< CPointLightInfluence > &pointLightList) const |
Append lights under the position to pointLightList. Do nothing if invalid patchId. | |
uint8 | getLumel (const CPatchIdent &patchId, const CUV &uv) const |
Get the lumel under the position. return 255 if invalid patchId. | |
Render methods. | |
void | averageTesselationVertices () |
void | clip (const CVector &refineCenter, const std::vector< CPlane > &pyramid) |
void | excludePatchFromRefineAll (sint zoneId, uint patch, bool exclude) |
This is especially for Pacs. exlude a patch to be refineAll()ed. | |
const CVector & | getOldRefineCenter () const |
void | profileRender () |
void | refine (const CVector &refineCenter) |
void | refineAll (const CVector &refineCenter) |
Refine/Geomorph ALL the tesselation of the landscape, from the view point refineCenter. Even if !RefineMode. | |
void | render (const CVector &refineCenter, const CVector &frontVector, const CPlane pyramid[NL3D_TESSBLOCK_NUM_CLIP_PLANE], bool doTileAddPass=false) |
void | setDriver (IDriver *drv) |
Collision methods. | |
void | buildCollideFaces (sint zoneId, sint patch, std::vector< CTriangle > &faces) |
void | buildCollideFaces (const CAABBoxExt &bbox, std::vector< CTriangle > &faces, bool faceSplit) |
void | buildPatchBlocksInBBox (const CAABBox &bbox, std::vector< CPatchBlockIdent > &paBlockIds) |
void | buildTrianglesInBBox (const CAABBox &bbox, std::vector< CTrianglePatch > &triangles, uint8 tileTessLevel) |
void | fillPatchQuadBlock (CPatchQuadBlock &quadBlock) const |
float | getCameraCollision (const CVector &start, const CVector &end, float radius, bool cone) |
CVector | getTesselatedPos (const CPatchIdent &patchId, const CUV &uv) const |
void | getTessellationLeaves (std::vector< const CTessFace * > &leaves) const |
Dynamic Lighting management | |
void | computeDynamicLighting (const std::vector< CPointLight * > &pls) |
CRGBA | getDLMGlobalVegetableColor () const |
float | getDynamicLightingMaxAttEnd () const |
uint | getDynamicLightingMemoryLoad () const |
void | setDLMGlobalVegetableColor (CRGBA gvc) |
void | setDynamicLightingMaxAttEnd (float maxAttEnd) |
void | createVegetableBlendLayersModels (CScene *scene) |
void | enableVegetable (bool enable) |
uint | getNumVegetableFaceRendered () const |
bool | isVegetableActive () const |
void | loadVegetableTexture (const std::string &textureFileName) |
void | setupColorsFromTileFlags (const NLMISC::CRGBA colors[4]) |
void | setupVegetableLighting (const CRGBA &ambient, const CRGBA &diffuse, const CVector &directionalLight) |
void | setVegetableTime (double time) |
void | setVegetableUpdateLightingFrequency (float freq) |
void | setVegetableUpdateLightingTime (double time) |
void | setVegetableWind (const CVector &windDir, float windFreq, float windPower, float windBendMin) |
Lighting. | |
void | enableAutomaticLighting (bool enable) |
const CVector & | getAutomaticLightDir () const |
return the light direction setuped in enableAutomaticLighting(). | |
bool | getAutomaticLighting () const |
return true if AutomaticLighting is enabled. | |
CRGBA | getPointLightDiffuseMaterial () const |
const CRGBA * | getStaticLight () const |
void | initAnimatedLightIndex (const CScene &scene) |
void | removeAllPointLights () |
void | setPointLightDiffuseMaterial (CRGBA diffuse) |
void | setPointLightFactor (const CScene &scene) |
update the Light factor for all pointLights in All zones, according to scene LightGroups and AnimatedLights. | |
void | setupAutomaticLightDir (const CVector &lightDir) |
void | setupStaticLight (const CRGBA &diffuse, const CRGBA &ambiant, float multiply) |
Tile mgt. | |
void | flushTiles (IDriver *drv, uint16 tileStart, uint16 nbTiles) |
Force a range of tiles to be loaded in the driver... | |
CTileElement * | getTileElement (const CPatchIdent &patchId, const CUV &uv) |
Return the tile element for a patch at specific UV. UseFull for getting surface data. Return NULL if not found. | |
NLMISC::CSmartPtr< ITexture > | getTileTexture (uint16 tileId, CTile::TBitmap bitmapType, CVector &uvScaleBias) |
Return the texture for a tile Id. UseFull for Tile edition. | |
void | releaseTiles (uint16 tileStart, uint16 nbTiles) |
Force a range of tiles to be loaded in the driver... | |
HeightField DeltaZ. | |
CVector | getHeightFieldDeltaZ (float x, float y) const |
return the HeightField DeltaZ for the 2D position. (0,0,dZ) is returned. | |
void | setHeightField (const CHeightMap &hf) |
Landscape Parameters. | |
bool | getNoiseMode () const |
bool | getRefineMode () const |
float | getThreshold () const |
Get threshold. | |
uint | getTileMaxSubdivision () |
Get Maximum Tile subdivision. | |
float | getTileNear () const |
Get tile near distance. | |
void | invalidateAllTiles () |
void | setNoiseMode (bool enabled) |
Enable the noise or not. NB: only new tesselation computed is modified, so you should call it only at init time. | |
void | setRefineMode (bool enabled) |
void | setThreshold (float thre) |
Set threshold for subdivsion quality. The lower is threshold, the more the landscape is subdivided. Default: 0.001. | |
void | setTileMaxSubdivision (uint tileDiv) |
Set Maximum Tile subdivision. Valid values must be in [0..4] (assert). Default is 0 (for now :) ). | |
void | setTileNear (float tileNear) |
Set tile near distance. Default 50.f. maximized to length of Far alpha transition). | |
Precision ZBuffer mgt. | |
const CVector & | getPZBModelPosition () const |
setPZBModelPosition() | |
void | setPZBModelPosition (const CVector &pos) |
Tile added/removed callback | |
ULandscapeTileCallback * | getTileCallback () const |
void | setTileCallback (ULandscapeTileCallback *cb) |
Dynamic ShadowMap | |
void | receiveShadowMap (IDriver *drv, CShadowMap *shadowMap, const CVector &casterPos, const CMaterial &shadowMat, const CVector &pzb) |
UpdateLighting management | |
void | setUpdateLightingFrequency (float freq) |
void | updateLighting (double time) |
void | updateLightingAll () |
Data Fields | |
sint | crefs |
CLandscapeModel * | OwnerModel |
CPtrInfo * | pinfo |
CTileBank | TileBank |
CTileFarBank | TileFarBank |
Static Public Attributes | |
CPtrInfo | NullPtrInfo |
Private Types | |
typedef std::vector< TSPRenderPass >::iterator | ItSPRenderPassVector |
typedef TTileRdrPassSet::iterator | ItTileRdrPassSet |
typedef TTileTextureMap::iterator | ItTileTextureMap |
typedef NLMISC::CRefPtr< ITexture > | RPTexture |
typedef NLMISC::CSmartPtr< CPatchRdrPass > | TSPRenderPass |
typedef std::set< CPatchRdrPass > | TTileRdrPassSet |
typedef std::map< std::string, RPTexture > | TTileTextureMap |
Private Member Functions | |
void | checkZoneBinds (CZone &curZone, EBadBind &bindError) |
void | clearFarRenderPass (CPatchRdrPass *pass) |
bool | eraseTileFarIfNotGood (uint tileNumber, uint sizeOrder0, uint sizeOrder1, uint sizeOrder2) |
CPatchRdrPass * | findTileRdrPass (const CPatchRdrPass &pass) |
ITexture * | findTileTexture (const std::string &textName) |
void | forceMergeAtTileLevel () |
For changing TileMaxSubdivision. force tesselation to be under tile. | |
void | freeFarRenderPass (CPatch *pPatch, CPatchRdrPass *pass, uint farIndex) |
CPatchRdrPass * | getFarRenderPass (CPatch *pPatch, uint farIndex, float &far1UScale, float &far1VScale, float &far1UBias, float &far1VBias, bool &bRot) |
CPatchRdrPass * | getTileRenderPass (uint16 tileId, bool additiveRdrPass) |
void | getTileUvScaleBiasRot (uint16 tileId, CTile::TBitmap bitmapType, CVector &uvScaleBias, uint8 &rotAlpha) |
void | loadTile (uint16 tileId) |
void | lockBuffers () |
void | releaseTile (uint16 tileId) |
void | resetRenderFarAndDeleteVBFV () |
void | synchronizeATIVBHards () |
void | unlockBuffers () |
void | updateGlobalsAndLockBuffers (const CVector &refineCenter) |
void | updateTessBlocksFaceVector () |
uint | getTileLightMap (CRGBA map[NL_TILE_LIGHTMAP_SIZE *NL_TILE_LIGHTMAP_SIZE], CPatchRdrPass *&lightmapRdrPass) |
void | getTileLightMapUvInfo (uint tileLightMapId, CVector &uvScaleBias) |
void | refillTileLightMap (uint tileLightMapId, CRGBA map[NL_TILE_LIGHTMAP_SIZE *NL_TILE_LIGHTMAP_SIZE]) |
void | releaseTileLightMap (uint tileLightMapId) |
Private Attributes | |
CVector | _AutomaticLightDir |
bool | _AutomaticLighting |
bool | _FarInitialized |
float | _FarTransition |
CHeightField | _HeightField |
CRGBA | _LightValue [256] |
uint | _NFreeLightMaps |
bool | _RefineMode |
std::vector< TSPRenderPass > | _TextureFars |
std::vector< TSPRenderPass > | _TextureNears |
float | _Threshold |
ULandscapeTileCallback * | _TileCallback |
float | _TileDistNear |
uint | _TileMaxSubdivision |
float | _VPThresholdChange |
CMaterial | FarMaterial |
std::vector< CTileInfo * > | TileInfos |
CMaterial | TileMaterial |
TTileRdrPassSet | TileRdrPassSet |
TTileTextureMap | TileTextureMap |
TZoneMap | Zones |
VertexBuffer mgt. | |
CRefPtr< IDriver > | _Driver |
CLandscapeVBAllocator | _Far0VB |
CLandscapeVBAllocator | _Far1VB |
bool | _RenderMustRefillVB |
CLandscapeVBAllocator | _TileVB |
bool | _VertexShaderOk |
CTessFacePriorityList | _MergePriorityList |
The priority list of faces which may need to merge. | |
CVector | _OldRefineCenter |
OldRefineCenter setuped in prec refine(). | |
bool | _OldRefineCenterSetuped |
The priority list of faces which may need to merge. | |
CTessFacePListNode | _RootNewLeaves |
newTessFace() append the face to _RootNewLeaves. | |
CTessFacePriorityList | _SplitPriorityList |
The priority list of faces which may need to split. | |
bool | _NoiseEnabled |
Precision ZBuffer mgt. | |
CVector | _PZBModelPosition |
setPZBModelPosition() | |
Friends | |
class | CPatch |
struct | CPtrInfo |
class | CTessFace |
class | CZone |
|
Definition at line 781 of file landscape.h. |
|
Definition at line 731 of file landscape.h. Referenced by findTileRdrPass(), flushTiles(), releaseTiles(), and render(). |
|
Definition at line 728 of file landscape.h. |
|
Definition at line 726 of file landscape.h. |
|
Definition at line 732 of file landscape.h. Referenced by getFarRenderPass(), and getTileLightMap(). |
|
Definition at line 730 of file landscape.h. |
|
Definition at line 727 of file landscape.h. |
|
Constructor.
Definition at line 178 of file landscape.cpp. References _AutomaticLightDir, _AutomaticLighting, _DLMGlobalVegetableColor, _DLMMaxAttEnd, _DriverOkForVegetable, _FarInitialized, _FarTransition, _MergePriorityList, _NFreeLightMaps, _NoiseEnabled, _OldRefineCenter, _OldRefineCenterSetuped, _PatchDLMContextList, _PointLightDiffuseMaterial, _PZBModelPosition, _RefineMode, _RenderMustRefillVB, _SplitPriorityList, _TextureDLM, _Threshold, _TileCallback, _TileDistNear, _TileMaxSubdivision, _ULFarPixelsToUpdate, _ULFrequency, _ULNearCurrentTessBlockId, _ULNearPixelsToUpdate, _ULPrecTimeInit, _ULRootNearPatch, _ULRootTextureFar, _ULTotalFarPixels, _ULTotalNearPixels, _VegetableManager, _VegetableManagerEnabled, _VertexShaderOk, _VPThresholdChange, NL3D::CTessFacePriorityList::init(), initTileBank(), NL3D_LANDSCAPE_DLM_HEIGHT, NL3D_LANDSCAPE_DLM_WIDTH, NL3D_LANDSCAPE_VEGETABLE_MAX_AGP_VERTEX_LIGHTED, NL3D_LANDSCAPE_VEGETABLE_MAX_AGP_VERTEX_UNLIT, NL3D_REFINE_PLIST_DIST_MAX_MOD, NL3D_REFINE_PLIST_DIST_STEP, NL3D_REFINE_PLIST_NUM_ENTRIES, NL3D_REFINE_PLIST_SPLIT_NUMQUADRANT, NL3D_TESS_ALLOC_BLOCKSIZE, NL3D_TESSRDR_ALLOC_BLOCKSIZE, OwnerModel, NLMISC::CRGBA::set(), and setupStaticLight().
00178 : 00179 TessFaceAllocator(NL3D_TESS_ALLOC_BLOCKSIZE), 00180 TessVertexAllocator(NL3D_TESS_ALLOC_BLOCKSIZE), 00181 TessNearVertexAllocator(NL3D_TESSRDR_ALLOC_BLOCKSIZE), 00182 TessFarVertexAllocator(NL3D_TESSRDR_ALLOC_BLOCKSIZE), 00183 TileMaterialAllocator(NL3D_TESSRDR_ALLOC_BLOCKSIZE), 00184 TileFaceAllocator(NL3D_TESSRDR_ALLOC_BLOCKSIZE), 00185 _Far0VB(CLandscapeVBAllocator::Far0, "LandscapeFar0VB"), 00186 _Far1VB(CLandscapeVBAllocator::Far1, "LandscapeFar1VB"), 00187 _TileVB(CLandscapeVBAllocator::Tile, "LandscapeTileVB") 00188 { 00189 OwnerModel = NULL; 00190 00191 initTileBank(); 00192 00193 // Far texture not initialized till initTileBanks is not called 00194 _FarInitialized=false; 00195 00196 // Init far lighting with White/black 00197 setupStaticLight (CRGBA(255,255,255), CRGBA(0,0,0), 1.f); 00198 // Default material for pointLights 00199 _PointLightDiffuseMaterial= CRGBA::White; 00200 00201 _FarTransition= 10; // 10 meters. 00202 _TileDistNear=100.f; 00203 _Threshold= 0.001f; 00204 _RefineMode=true; 00205 00206 _TileMaxSubdivision= 0; 00207 00208 _NFreeLightMaps= 0; 00209 00210 // By default Automatic light comes from up. 00211 _AutomaticLighting = false; 00212 _AutomaticLightDir= -CVector::K; 00213 00214 // By default, noise is enabled. 00215 _NoiseEnabled= true; 00216 00217 // By default, we compute Geomorph and Alpha in software. 00218 _VertexShaderOk= false; 00219 _VPThresholdChange= false; 00220 00221 _RenderMustRefillVB= false; 00222 00223 // priority list. 00224 _OldRefineCenterSetuped= false; 00225 _SplitPriorityList.init(NL3D_REFINE_PLIST_DIST_STEP, NL3D_REFINE_PLIST_NUM_ENTRIES, NL3D_REFINE_PLIST_DIST_MAX_MOD, NL3D_REFINE_PLIST_SPLIT_NUMQUADRANT); 00226 // See updateRefine* Doc in tesselation.cpp for why the merge list do not need quadrants. 00227 _MergePriorityList.init(NL3D_REFINE_PLIST_DIST_STEP, NL3D_REFINE_PLIST_NUM_ENTRIES, NL3D_REFINE_PLIST_DIST_MAX_MOD, 0); 00228 // just for getTesselatedPos to work properly. 00229 _OldRefineCenter= CVector::Null; 00230 00231 // create / Init the vegetable manager. 00232 _VegetableManager= new CVegetableManager(NL3D_LANDSCAPE_VEGETABLE_MAX_AGP_VERTEX_UNLIT, NL3D_LANDSCAPE_VEGETABLE_MAX_AGP_VERTEX_LIGHTED); 00233 00234 // Init vegetable setup. 00235 _VegetableManagerEnabled= false; 00236 _DriverOkForVegetable= false; 00237 // default global vegetable color, used for dynamic lighting only (arbitrary). 00238 _DLMGlobalVegetableColor.set(180, 180, 180); 00239 00240 _PZBModelPosition= CVector::Null; 00241 00242 00243 // Default: no updateLighting. 00244 _ULFrequency= 0; 00245 _ULPrecTimeInit= false; 00246 // Default: no textureFar created. 00247 _ULTotalFarPixels= 0; 00248 _ULFarPixelsToUpdate= 0; 00249 _ULRootTextureFar= NULL; 00250 // Default: no patch created 00251 _ULTotalNearPixels= 0; 00252 _ULNearPixelsToUpdate= 0; 00253 _ULRootNearPatch= NULL; 00254 _ULNearCurrentTessBlockId= 0; 00255 00256 00257 // Dynamic Lighting. 00258 _TextureDLM= new CTextureDLM(NL3D_LANDSCAPE_DLM_WIDTH, NL3D_LANDSCAPE_DLM_HEIGHT); 00259 _PatchDLMContextList= new CPatchDLMContextList; 00260 _DLMMaxAttEnd= 30.f; 00261 00262 00263 // Alloc some global space for tri rendering. 00264 if( CLandscapeGlobals::PassTriArray.size() < 1000 ) 00265 CLandscapeGlobals::PassTriArray.resize( 1000 ); 00266 00267 _TileCallback = NULL; 00268 00269 } |
|
Destructor. clear().
Definition at line 271 of file landscape.cpp. References _PatchDLMContextList, _TextureDLM, _VegetableManager, and clear().
00272 { 00273 clear(); 00274 00275 // release the VegetableManager. 00276 delete _VegetableManager; 00277 _VegetableManager= NULL; 00278 00279 // Dynamic Lighting. 00280 // smartPtr delete 00281 _TextureDLM= NULL; 00282 delete _PatchDLMContextList; 00283 _PatchDLMContextList= NULL; 00284 } |
|
private version of buildPatchBlocksInBBox, searching only for one patch. Definition at line 2327 of file landscape.cpp. References NL3D::CPatch::addPatchBlocksInBBox(), NL3D::CLandscape::CPatchIdentEx::Patch, NL3D::CPatchIdent::PatchId, and NL3D::CPatchIdent::ZoneId. Referenced by buildPatchBlocksInBBox().
02328 { 02329 // No clear here, just add blocks to the array. 02330 const CPatch *pa= paIdEx.Patch; 02331 02332 CPatchIdent paId; 02333 paId.ZoneId= paIdEx.ZoneId; 02334 paId.PatchId= paIdEx.PatchId; 02335 pa->addPatchBlocksInBBox(paId, bbox, paBlockIds); 02336 } |
|
This method search only on the given patch. NB: this method use a convex hull subdivion to search in O(logn) what part of the patch to insert.
Definition at line 2294 of file landscape.cpp. References NL3D::CPatch::addTrianglesInBBox(), NL3D::CLandscape::CPatchIdentEx::Patch, NL3D::CPatchIdent::PatchId, uint8, and NL3D::CPatchIdent::ZoneId. Referenced by buildTrianglesInBBox().
02295 { 02296 // No clear here, just add triangles to the array. 02297 const CPatch *pa= paIdEx.Patch; 02298 02299 CPatchIdent paId; 02300 paId.ZoneId= paIdEx.ZoneId; 02301 paId.PatchId= paIdEx.PatchId; 02302 pa->addTrianglesInBBox(paId, bbox, triangles, tileTessLevel); 02303 } |
|
Add a zone which should be builded (or loaded), but not compiled. CLandscape compile it. The contents of newZone are copied into the landscape.
Definition at line 385 of file landscape.cpp. References _PatchQuadGrid, NL3D::CZone::_PointLightArray, NL3D::CZone::applyHeightField(), NL3D::CZone::build(), NL3D::CPatch::buildBBox(), NL3D::CZone::compile(), NLMISC::CAABBoxExt::getAABBox(), NLMISC::CAABBox::getHalfSize(), NLMISC::CAABBox::getMax(), NLMISC::CAABBox::getMin(), NL3D::CZone::getNumPatchs(), NL3D::CTransform::getOwnerScene(), NL3D::CZone::getZoneBB(), NL3D::CZone::getZoneId(), NLMISC::CAABBox::include(), NL3D::CPointLightNamedArray::initAnimatedLightIndex(), NL3D::CQuadGrid< CPatchIdentEx >::insert(), nlassert, OwnerModel, NL3D::CLandscape::CPatchIdentEx::Patch, NL3D::CPatchIdent::PatchId, NLMISC::CAABBox::setHalfSize(), NL3D::CPointLightNamedArray::setPointLightFactor(), sint, uint16, unlockBuffers(), updateGlobalsAndLockBuffers(), updateTessBlocksFaceVector(), NL3D::CPatchIdent::ZoneId, and Zones. Referenced by NL3D::CLandscapeUser::loadAllZonesAround(), and NL3D::CLandscapeUser::refreshZonesAround().
00386 { 00387 // -1. Update globals 00388 updateGlobalsAndLockBuffers (CVector::Null); 00389 // NB: adding a zone may add vertices in VB in visible patchs (because of binds)=> buffers are locked. 00390 00391 uint16 zoneId= newZone.getZoneId(); 00392 00393 if(Zones.find(zoneId)!=Zones.end()) 00394 { 00395 unlockBuffers(); 00396 return false; 00397 } 00398 CZone *zone= new CZone; 00399 00400 // copy zone. 00401 zone->build(newZone); 00402 00403 // Affect the current lighting of pointLight to the zone. 00404 if (OwnerModel) 00405 { 00406 CScene *scene = OwnerModel->getOwnerScene(); 00407 zone->_PointLightArray.initAnimatedLightIndex(*scene); 00408 zone->_PointLightArray.setPointLightFactor(*scene); 00409 } 00410 00411 // apply the landscape heightField, modifying BBoxes. 00412 zone->applyHeightField(*this); 00413 00414 // compile the zone for this landscape. 00415 zone->compile(this, Zones); 00416 00417 // For test of _PatchQuadGrid erase. 00418 CAABBox zoneBBForErase= zone->getZoneBB().getAABBox(); 00419 // Avoid precision problems by enlarging a little bbox size of zone for erase 00420 zoneBBForErase.setHalfSize( zoneBBForErase.getHalfSize() * 1.1f); 00421 00422 // add patchs of this zone to the quadgrid. 00423 for(sint i= 0; i<zone->getNumPatchs(); i++) 00424 { 00425 const CPatch *pa= ((const CZone*)zone)->getPatch(i); 00426 CPatchIdentEx paId; 00427 paId.ZoneId= zoneId; 00428 paId.PatchId= i; 00429 paId.Patch= pa; 00430 CAABBox bb= pa->buildBBox(); 00431 _PatchQuadGrid.insert(bb.getMin(), bb.getMax(), paId); 00432 // NB: the bbox of zone is used to remove patch. Hence it is VERY important that zoneBBox includes 00433 // all patchs bbox (else some patchs entries may not be deleted in removeZone()). 00434 nlassert(zoneBBForErase.include(bb)); 00435 } 00436 00437 // Must realase VB Buffers 00438 unlockBuffers(); 00439 00440 // Because bind may add faces in other (visible) zones because of enforced split, we must check 00441 // and update any FaceVector. 00442 updateTessBlocksFaceVector(); 00443 00444 return true; 00445 } |
|
Append lights under the position to pointLightList. Do nothing if invalid patchId.
Definition at line 3273 of file landscape.cpp. References NL3D::CPatch::appendTileLightInfluences(), nlassert, NL3D::CPatchIdent::PatchId, sint, uint16, NL3D::CPatchIdent::ZoneId, and Zones.
03275 { 03276 // \todo yoyo: TODO_ZONEID: change ZoneId in 32 bits... 03277 std::map<uint16, CZone*>::const_iterator it= Zones.find((uint16)patchId.ZoneId); 03278 if(it!=Zones.end()) 03279 { 03280 sint N= (*it).second->getNumPatchs(); 03281 // patch must exist in the zone. 03282 nlassert(patchId.PatchId<N); 03283 const CPatch *pa= const_cast<const CZone*>((*it).second)->getPatch(patchId.PatchId); 03284 03285 pa->appendTileLightInfluences(uv, pointLightList); 03286 } 03287 } |
|
Definition at line 3658 of file landscape.cpp. References _ShadowPolyReceiver, NL3D::CShadowPolyReceiver::addTriangle(), NL3D::CTessVertex::EndPos, NL3D::CTessFace::ShadowMapTriId, NLMISC::CTriangle::V0, NLMISC::CTriangle::V1, NLMISC::CTriangle::V2, NL3D::CTessFace::VBase, NL3D::CTessFace::VLeft, and NL3D::CTessFace::VRight. Referenced by NL3D::CPatch::appendFaceToTileRenderList().
03659 { 03660 CTriangle tri; 03661 tri.V0= face->VBase->EndPos; 03662 tri.V1= face->VLeft->EndPos; 03663 tri.V2= face->VRight->EndPos; 03664 // Add and store id for remove 03665 face->ShadowMapTriId= _ShadowPolyReceiver.addTriangle(tri); 03666 } |
|
This is especially for Pacs. Each Vertex->EndPos which is not a corner of a patch is set to the mean of its 2 shared Patchs. NB: Works with special cases of rectangular patchs and binded patchs. Definition at line 772 of file landscape.cpp. References _TessBlockModificationRoot, NL3D::CTessBlock::getNextToModify(), NL3D::ItZoneMap, nlassert, unlockBuffers(), updateGlobalsAndLockBuffers(), updateTessBlocksFaceVector(), and Zones.
00773 { 00774 // -1. Update globals 00775 updateGlobalsAndLockBuffers (CVector::Null); 00776 // NB: averageTesselationVertices may change vertices in VB in visible patchs => buffers are locked. 00777 00778 // Increment the update date. 00779 CLandscapeGlobals::CurrentDate++; 00780 00781 for(ItZoneMap it= Zones.begin();it!=Zones.end();it++) 00782 { 00783 (*it).second->averageTesselationVertices(); 00784 } 00785 00786 // Must realase VB Buffers 00787 unlockBuffers(); 00788 00789 // averageTesselationVertices() should not cause change in faces in any patchs. 00790 // It should not happens, but check for security. 00791 nlassert(_TessBlockModificationRoot.getNextToModify()==NULL); 00792 updateTessBlocksFaceVector(); 00793 00794 } |
|
Build the set of faces of landscape, from a certain patch. Usefull for collisions. Triangles are built first in S then T order. There is two triangles by tiles. So the number of triangles for a patch is 2*OrderS*OrderT. Definition at line 2456 of file landscape.cpp. References NL3D::CPatch::computeVertex(), NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), NL3D::ItZoneMap, nlassert, sint, NLMISC::CTriangle::V0, NLMISC::CTriangle::V1, NLMISC::CTriangle::V2, x, y, and Zones.
02457 { 02458 faces.clear(); 02459 02460 ItZoneMap it= Zones.find(zoneId); 02461 if(it!=Zones.end()) 02462 { 02463 // Then trace all patch. 02464 sint N= (*it).second->getNumPatchs(); 02465 nlassert(patch>=0); 02466 nlassert(patch<N); 02467 const CPatch *pa= const_cast<const CZone*>((*it).second)->getPatch(patch); 02468 02469 // Build the faces. 02470 //================= 02471 sint ordS= pa->getOrderS(); 02472 sint ordT= pa->getOrderT(); 02473 sint x,y; 02474 float OOS= 1.0f/ordS; 02475 float OOT= 1.0f/ordT; 02476 for(y=0;y<ordT;y++) 02477 { 02478 for(x=0;x<ordS;x++) 02479 { 02480 CTriangle f; 02481 f.V0= pa->computeVertex(x*OOS, y*OOT); 02482 f.V1= pa->computeVertex(x*OOS, (y+1)*OOT); 02483 f.V2= pa->computeVertex((x+1)*OOS, (y+1)*OOT); 02484 faces.push_back(f); 02485 f.V0= pa->computeVertex(x*OOS, y*OOT); 02486 f.V1= pa->computeVertex((x+1)*OOS, (y+1)*OOT); 02487 f.V2= pa->computeVertex((x+1)*OOS, y*OOT); 02488 faces.push_back(f); 02489 } 02490 } 02491 } 02492 } |
|
Build the set of faces of landscape, which are IN a bbox. Usefull for collisions. The faces are builded at Tile level (2m*2m).
Definition at line 2380 of file landscape.cpp. References NL3D::CPatch::computeVertex(), NLMISC::CAABBoxExt::getCenter(), NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), NLMISC::CAABBoxExt::getRadius(), NLMISC::CAABBoxExt::intersect(), NLMISC::CBSphere::intersect(), NL3D::ItZoneMap, sint, NLMISC::CTriangle::V0, NLMISC::CTriangle::V1, NLMISC::CTriangle::V2, x, y, and Zones.
02381 { 02382 CBSphere bsWanted(bbox.getCenter(), bbox.getRadius()); 02383 02384 faces.clear(); 02385 // For all zones. 02386 for(ItZoneMap it= Zones.begin();it!=Zones.end();it++) 02387 { 02388 const CAABBoxExt &bb= (*it).second->getZoneBB(); 02389 CBSphere bs(bb.getCenter(), bb.getRadius()); 02390 // If zone intersect the wanted area. 02391 //=================================== 02392 if(bs.intersect(bsWanted)) 02393 { 02394 // Then trace all patch. 02395 sint N= (*it).second->getNumPatchs(); 02396 for(sint i=0;i<N;i++) 02397 { 02398 const CPatch *pa= const_cast<const CZone*>((*it).second)->getPatch(i); 02399 02400 // If patch in wanted area.... 02401 //============================ 02402 if(bsWanted.intersect((*it).second->getPatchBSphere(i))) 02403 { 02404 // 0. Build the faces. 02405 //==================== 02406 sint ordS= pa->getOrderS(); 02407 sint ordT= pa->getOrderT(); 02408 sint x,y,j; 02409 vector<CTriangle> tmpFaces; 02410 tmpFaces.reserve(ordS*ordT); 02411 float OOS= 1.0f/ordS; 02412 float OOT= 1.0f/ordT; 02413 for(y=0;y<ordT;y++) 02414 { 02415 for(x=0;x<ordS;x++) 02416 { 02417 CTriangle f; 02418 f.V0= pa->computeVertex(x*OOS, y*OOT); 02419 f.V1= pa->computeVertex(x*OOS, (y+1)*OOT); 02420 f.V2= pa->computeVertex((x+1)*OOS, (y+1)*OOT); 02421 tmpFaces.push_back(f); 02422 f.V0= pa->computeVertex(x*OOS, y*OOT); 02423 f.V1= pa->computeVertex((x+1)*OOS, (y+1)*OOT); 02424 f.V2= pa->computeVertex((x+1)*OOS, y*OOT); 02425 tmpFaces.push_back(f); 02426 } 02427 } 02428 02429 // 1. Clip the faces. 02430 //=================== 02431 if(faceClip) 02432 { 02433 // Insert only faces which are In the area. 02434 for(j=0;j<(sint)tmpFaces.size();j++) 02435 { 02436 CTriangle &f= tmpFaces[j]; 02437 if(bbox.intersect(f.V0, f.V1, f.V2)) 02438 { 02439 faces.push_back(f); 02440 } 02441 } 02442 } 02443 else 02444 { 02445 // Else insert ALL. 02446 faces.insert(faces.end(), tmpFaces.begin(), tmpFaces.end()); 02447 } 02448 } 02449 } 02450 } 02451 } 02452 } |
|
Same as buildTrianglesInBBox(), but fill blockId instead of raw triangles. NB: this method use first a quadgrid to locate patchs of interest, then for each patch, it uses a convex hull subdivion to search in O(logn) what part of the patch to insert.
Definition at line 2340 of file landscape.cpp. References _PatchQuadGrid, addPatchBlocksInBBox(), NL3D::CQuadGrid< CPatchIdentEx >::begin(), NL3D::CQuadGrid< CPatchIdentEx >::clearSelection(), NL3D::CQuadGrid< CPatchIdentEx >::end(), NLMISC::CAABBox::getMax(), NLMISC::CAABBox::getMin(), and NL3D::CQuadGrid< CPatchIdentEx >::select().
02341 { 02342 // clear selection. 02343 paBlockIds.clear(); 02344 02345 // search path of interest. 02346 _PatchQuadGrid.clearSelection(); 02347 _PatchQuadGrid.select(bbox.getMin(), bbox.getMax()); 02348 CQuadGrid<CPatchIdentEx>::CIterator it; 02349 02350 // for each patch, add blocks to the array. 02351 for(it= _PatchQuadGrid.begin(); it!= _PatchQuadGrid.end(); it++) 02352 { 02353 addPatchBlocksInBBox((*it), bbox, paBlockIds); 02354 } 02355 } |
|
method relatively identical than buildCollideFaces(bbox....). Differences below: NB: this method use first a quadgrid to locate patchs of interest, then for each patch, it uses a convex hull subdivion to search in O(logn) what part of the patch to insert.
Definition at line 2307 of file landscape.cpp. References _PatchQuadGrid, addTrianglesInBBox(), NL3D::CQuadGrid< CPatchIdentEx >::begin(), NL3D::CQuadGrid< CPatchIdentEx >::clearSelection(), NL3D::CQuadGrid< CPatchIdentEx >::end(), NLMISC::CAABBox::getMax(), NLMISC::CAABBox::getMin(), NL3D::CQuadGrid< CPatchIdentEx >::select(), and uint8.
02308 { 02309 // clear selection. 02310 triangles.clear(); 02311 02312 // search path of interest. 02313 _PatchQuadGrid.clearSelection(); 02314 _PatchQuadGrid.select(bbox.getMin(), bbox.getMax()); 02315 CQuadGrid<CPatchIdentEx>::CIterator it; 02316 02317 // for each patch, add triangles to the array. 02318 for(it= _PatchQuadGrid.begin(); it!= _PatchQuadGrid.end(); it++) 02319 { 02320 addTrianglesInBBox((*it), bbox, triangles, tileTessLevel); 02321 } 02322 } |
|
From an Id, return the name of the zone, in the form "150_EM", without extension.
Definition at line 513 of file landscape.cpp.
|
|
Verify the binding of patchs of one zone. throw EBadBind if error. nop if zone not loaded.
Definition at line 2277 of file landscape.cpp. References NL3D::EBadBind::BindErrors, NL3D::ItZoneMap, and uint16.
02278 { 02279 EBadBind bindError; 02280 02281 ItZoneMap it= Zones.find(zoneId); 02282 if(it!= Zones.end()) 02283 { 02284 CZone &curZone= *(*it).second; 02285 checkZoneBinds(curZone, bindError); 02286 if(!bindError.BindErrors.empty()) 02287 throw bindError; 02288 } 02289 } |
|
Verify the binding of patchs of all zones. throw EBadBind if error.
Definition at line 2261 of file landscape.cpp. References NL3D::EBadBind::BindErrors, and NL3D::ItZoneMap. Referenced by NL3D::CLandscapeUser::loadAllZonesAround(), and NL3D::CLandscapeUser::refreshZonesAround().
02262 { 02263 EBadBind bindError; 02264 02265 for(ItZoneMap it= Zones.begin();it!=Zones.end();it++) 02266 { 02267 CZone &curZone= *(*it).second; 02268 checkZoneBinds(curZone, bindError); 02269 } 02270 02271 if(!bindError.BindErrors.empty()) 02272 throw bindError; 02273 } |
|
Definition at line 2232 of file landscape.cpp. References NL3D::CZone::CPatchConnect::BindEdges, NL3D::EBadBind::BindErrors, NL3D::CPatchInfo::CBindInfo::Edge, NL3D::CZone::getNumPatchs(), NL3D::CZone::getPatchConnect(), getZone(), NL3D::CZone::getZoneId(), NL3D::CPatchInfo::CBindInfo::Next, NL3D::CPatchInfo::CBindInfo::NPatchs, sint, and NL3D::CPatchInfo::CBindInfo::ZoneId.
02233 { 02234 for(sint i=0;i<curZone.getNumPatchs();i++) 02235 { 02236 const CZone::CPatchConnect &pa= *curZone.getPatchConnect(i); 02237 02238 // Check the bindInfos. 02239 for(sint j=0;j<4;j++) 02240 { 02241 const CPatchInfo::CBindInfo &bd=pa.BindEdges[j]; 02242 // Just 1/1 for now. 02243 if(bd.NPatchs==1) 02244 { 02245 CZone *oZone= getZone(bd.ZoneId); 02246 // If loaded zone. 02247 if(oZone) 02248 { 02249 const CZone::CPatchConnect &po= *(oZone->getPatchConnect(bd.Next[0])); 02250 const CPatchInfo::CBindInfo &bo= po.BindEdges[bd.Edge[0]]; 02251 if(bo.NPatchs!=1 || bo.Next[0]!=i || bo.Edge[0]!=j) 02252 bindError.BindErrors.push_back( EBadBind::CBindError(curZone.getZoneId(), i)); 02253 } 02254 } 02255 } 02256 } 02257 } |
|
Disconnect, and Delete all zones.
Definition at line 522 of file landscape.cpp. References _Far0VB, _Far1VB, _PatchQuadGrid, _TextureFars, _TileVB, NL3D::CLandscapeVBAllocator::clear(), NL3D::CQuadGrid< CPatchIdentEx >::clear(), clearFarRenderPass(), getZoneList(), ItSPRenderPassVector, nlverify, removeZone(), and sint. Referenced by NL3D::CLandscapeUser::removeAllZones(), and ~CLandscape().
00523 { 00524 // Build the list of zoneId. 00525 vector<uint16> zoneIds; 00526 getZoneList(zoneIds); 00527 00528 // Remove each zone one by one. 00529 sint i; 00530 for(i=0;i<(sint)zoneIds.size();i++) 00531 { 00532 nlverify(removeZone(zoneIds[i])); 00533 } 00534 00535 // ensure the quadgrid is empty. 00536 _PatchQuadGrid.clear(); 00537 00538 00539 // If not done, delete all VBhards allocated. 00540 _Far0VB.clear(); 00541 _Far1VB.clear(); 00542 _TileVB.clear(); 00543 00544 00545 // Reset All Far Texture and unlink _ULRootTextureFar ciruclarList. 00546 ItSPRenderPassVector itFar= _TextureFars.begin(); 00547 // unitl set is empty 00548 while( itFar != _TextureFars.end() ) 00549 { 00550 // erase with link update. 00551 clearFarRenderPass(*itFar); 00552 itFar++; 00553 } 00554 // delete all 00555 _TextureFars.clear(); 00556 00557 00558 // reset driver. 00559 _Driver= NULL; 00560 } |
|
Definition at line 2176 of file landscape.cpp. References _ULRootTextureFar, NL3D::CTextureFar::getNextUL(), NL3D::CPatchRdrPass::TextureDiffuse, and NL3D::CTextureFar::unlinkUL(). Referenced by clear().
02177 { 02178 // Before deleting, must remove TextureFar from UpdateLighting list. 02179 02180 // Get a pointer on the diffuse far texture 02181 CTextureFar *pTextureFar=(CTextureFar*)(&*(pass->TextureDiffuse)); 02182 02183 // If I delete the textureFar which is the current root 02184 if(_ULRootTextureFar==pTextureFar) 02185 { 02186 // switch to next 02187 _ULRootTextureFar= pTextureFar->getNextUL(); 02188 // if still the same, it means that the circular list is now empty 02189 if(_ULRootTextureFar==pTextureFar) 02190 _ULRootTextureFar= NULL; 02191 } 02192 02193 // unlink the texture from list 02194 pTextureFar->unlinkUL(); 02195 } |
|
Clip the landscape according to frustum. Planes must be normalized. Definition at line 583 of file landscape.cpp. References _TessBlockModificationRoot, NL3D::CTessBlock::getNextToModify(), NL3D::ItZoneMap, nlassert, unlockBuffers(), updateGlobalsAndLockBuffers(), updateTessBlocksFaceVector(), and Zones. Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
00584 { 00585 // -1. Update globals 00586 updateGlobalsAndLockBuffers (refineCenter); 00587 // NB: clip may add/remove vertices in VB in visible patchs => buffers are locked. 00588 00589 00590 for(ItZoneMap it= Zones.begin();it!=Zones.end();it++) 00591 { 00592 (*it).second->clip(pyramid); 00593 } 00594 00595 // Must realase VB Buffers 00596 unlockBuffers(); 00597 00598 // clip() should not cause change in faces in visible patchs. 00599 // It should not happens, but check for security. 00600 nlassert(_TessBlockModificationRoot.getNextToModify()==NULL); 00601 updateTessBlocksFaceVector(); 00602 00603 } |
|
Compute dynamic lightmaps
Definition at line 3489 of file landscape.cpp. References _DLMMaxAttEnd, _PatchDLMContextList, _PatchQuadGrid, _PointLightDiffuseMaterial, NL3D::CPatchDLMPointLight::BBox, NL3D::CQuadGrid< CPatchIdentEx >::begin(), NL3D::CTessList< CPatchDLMContext >::begin(), NL3D::CPatch::beginDLMLighting(), NL3D::CPatchDLMPointLight::BSphere, NL3D::CQuadGrid< CPatchIdentEx >::clearSelection(), NL3D::CQuadGrid< CPatchIdentEx >::end(), NL3D::CPatch::endDLMLighting(), NLMISC::CAABBox::getMax(), NLMISC::CAABBox::getMin(), NL3D::CPatchDLMContext::getPatch(), NL3D::CZone::getPatchBSphere(), NL3D::CPatch::getPatchId(), NL3D::CPatch::getZone(), NLMISC::CBSphere::intersect(), NL3D::CTessNodeList::Next, NL3D::CQuadGrid< CPatchIdentEx >::select(), uint, unlockBuffers(), and updateGlobalsAndLockBuffers(). Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
03490 { 03491 uint i; 03492 03493 // Update globals, and lock buffers 03494 //==================== 03495 updateGlobalsAndLockBuffers (CVector::Null); 03496 // NB: averageTesselationVertices may change vertices in VB in visible patchs => buffers are locked. 03497 03498 03499 // Run all DLM Context create, to init Lighting process. 03500 //=============== 03501 CPatchDLMContext *ctxPtr= _PatchDLMContextList->begin(); 03502 while(ctxPtr!=NULL) 03503 { 03504 // init lighting process, do differential from last computeDynamicLighting() 03505 ctxPtr->getPatch()->beginDLMLighting(); 03506 03507 // next 03508 ctxPtr= (CPatchDLMContext*)ctxPtr->Next; 03509 } 03510 03511 03512 // compile all pointLights 03513 //=============== 03514 static vector<CPatchDLMPointLight> dlmPls; 03515 dlmPls.resize(pls.size()); 03516 for(i=0;i<dlmPls.size();i++) 03517 { 03518 // compile the pl. 03519 dlmPls[i].compile(*pls[i], _PointLightDiffuseMaterial, _DLMMaxAttEnd); 03520 } 03521 03522 03523 // For all pointLight, intersect patch. 03524 //=============== 03525 for(i=0;i<dlmPls.size();i++) 03526 { 03527 CPatchDLMPointLight &pl= dlmPls[i]; 03528 03529 // search patchs of interest: those which interssect the pointLight 03530 _PatchQuadGrid.clearSelection(); 03531 _PatchQuadGrid.select(pl.BBox.getMin(), pl.BBox.getMax()); 03532 CQuadGrid<CPatchIdentEx>::CIterator it; 03533 03534 // for each patch, light it with the light. 03535 for(it= _PatchQuadGrid.begin(); it!= _PatchQuadGrid.end(); it++) 03536 { 03537 // get the patch 03538 const CPatch *pa= (*it).Patch; 03539 03540 // More precise clipping: 03541 if( pa->getZone()->getPatchBSphere(pa->getPatchId()).intersect( pl.BSphere ) ) 03542 { 03543 // Ok, light the patch with this spotLight 03544 const_cast<CPatch*>(pa)->processDLMLight(pl); 03545 } 03546 } 03547 03548 } 03549 03550 03551 // Run all DLM Context create, to end Lighting process. 03552 //=============== 03553 ctxPtr= _PatchDLMContextList->begin(); 03554 while(ctxPtr!=NULL) 03555 { 03556 // get enxt now, because the DLM itself may be deleted in endDLMLighting() 03557 CPatchDLMContext *next= (CPatchDLMContext*)ctxPtr->Next; 03558 03559 // delete the DLM if no more needed (near don't use nor pointLights) 03560 ctxPtr->getPatch()->endDLMLighting(); 03561 03562 // next 03563 ctxPtr= next; 03564 } 03565 03566 03567 // Must realase VB Buffers 03568 //==================== 03569 unlockBuffers(); 03570 03571 } |
|
init the vegetable layer models in the CScene (see CVegetableManager). NB: MOT stuff (called by CLandscapeModel), don't use it. Definition at line 3225 of file landscape.cpp. References _VegetableManager, and NL3D::CVegetableManager::createVegetableBlendLayersModels(). Referenced by NL3D::CLandscapeModel::initModel().
03226 { 03227 _VegetableManager->createVegetableBlendLayersModels(scene); 03228 } |
|
Definition at line 3052 of file landscape.cpp. References NLMISC::CBlockMemory< CTessFace >::free(), TessFaceAllocator, and NL3D::CTessFacePListNode::unlinkInPList(). Referenced by NL3D::CTessFace::doMerge(), and NL3D::CPatch::release().
03053 { 03054 // for refine() mgt, must remove from refine priority list, or from the temp rootTessFaceToUpdate list. 03055 f->unlinkInPList(); 03056 03057 TessFaceAllocator.free(f); 03058 } |
|
Definition at line 3073 of file landscape.cpp. References NLMISC::CBlockMemory< CTessFarVertex >::free(), TessFarVertexAllocator, and v. Referenced by NL3D::CTessFace::doMerge().
03074 { 03075 TessFarVertexAllocator.free(v); 03076 } |
|
Definition at line 3067 of file landscape.cpp. References NLMISC::CBlockMemory< CTessNearVertex >::free(), TessNearVertexAllocator, and v. Referenced by NL3D::CTessFace::deleteTileUv().
03068 { 03069 TessNearVertexAllocator.free(v); 03070 } |
|
Definition at line 3061 of file landscape.cpp. References NLMISC::CBlockMemory< CTessVertex >::free(), TessVertexAllocator, and v. Referenced by NL3D::CTessFace::doMerge(), and NL3D::CTessFace::updateBindAndSplit().
03062 { 03063 TessVertexAllocator.free(v); 03064 } |
|
Definition at line 3085 of file landscape.cpp. References NLMISC::CBlockMemory< CTileFace >::free(), and TileFaceAllocator. Referenced by NL3D::CTessFace::deleteTileFaces().
03086 { 03087 TileFaceAllocator.free(tf); 03088 } |
|
Definition at line 3079 of file landscape.cpp. References NLMISC::CBlockMemory< CTileMaterial >::free(), and TileMaterialAllocator. Referenced by NL3D::CTessFace::releaseTileMaterial().
03080 { 03081 TileMaterialAllocator.free(tm); 03082 } |
|
Enable automatic near lightmap computing. use setupStaticLight(). Default is disabled. NB: calling this method won't flush all texture near already computed. Definition at line 2684 of file landscape.cpp. References _AutomaticLighting.
02685 { 02686 _AutomaticLighting= enable; 02687 } |
|
enable the vegetable management in landscape. Valid only if VertexShader is OK. if true, register TileBank vegetables Shape to manager. Definition at line 3120 of file landscape.cpp. References _VegetableManager, _VegetableManagerEnabled, NL3D::CPatch::deleteAllVegetableIgs(), NL3D::CTileBank::initTileVegetableDescs(), NL3D::ItZoneMap, NL3D::CPatch::recreateAllVegetableIgs(), sint, TileBank, and Zones. Referenced by NL3D::CLandscapeUser::enableVegetable().
03121 { 03122 _VegetableManagerEnabled= enable; 03123 03124 // if false, delete all Vegetable IGs. 03125 if(!_VegetableManagerEnabled) 03126 { 03127 // Landscape always create ClipBlokcs, but IGs/addInstances() are created only if isVegetableActive(). 03128 // For all zones. 03129 for(ItZoneMap it= Zones.begin();it!=Zones.end();it++) 03130 { 03131 // for all patch. 03132 sint N= (*it).second->getNumPatchs(); 03133 for(sint i=0;i<N;i++) 03134 { 03135 // delete vegetable Igs of this patch 03136 CPatch *pa= ((*it).second)->getPatch(i); 03137 pa->deleteAllVegetableIgs(); 03138 } 03139 03140 } 03141 } 03142 // if true 03143 else 03144 { 03145 // reload all Shapes (actually load only new shapes) 03146 TileBank.initTileVegetableDescs(_VegetableManager); 03147 03148 // And recreate vegetable igs. 03149 // Landscape always create ClipBlokcs, but IGs/addInstances() are created only if isVegetableActive(). 03150 // For all zones. 03151 for(ItZoneMap it= Zones.begin();it!=Zones.end();it++) 03152 { 03153 // for all patch. 03154 sint N= (*it).second->getNumPatchs(); 03155 for(sint i=0;i<N;i++) 03156 { 03157 // recreate vegetable Igs of this patch 03158 CPatch *pa= ((*it).second)->getPatch(i); 03159 pa->recreateAllVegetableIgs(); 03160 } 03161 03162 } 03163 } 03164 03165 } |
|
Definition at line 2552 of file landscape.cpp. References NL3D::CTileFarBank::getTile(), TileFarBank, and uint. Referenced by initTileBanks().
02553 { 02554 // The same tiles ? 02555 bool bSame=true; 02556 02557 // It is the same tile ? 02558 if (TileFarBank.getTile (tileNumber)->isFill (CTileFarBank::diffuse)) 02559 { 02560 // Good diffuse size ? 02561 if ( 02562 (TileFarBank.getTile (tileNumber)->getSize (CTileFarBank::diffuse, CTileFarBank::order0) != sizeOrder0) || 02563 (TileFarBank.getTile (tileNumber)->getSize (CTileFarBank::diffuse, CTileFarBank::order1) != sizeOrder1) || 02564 (TileFarBank.getTile (tileNumber)->getSize (CTileFarBank::diffuse, CTileFarBank::order2) != sizeOrder2) 02565 ) 02566 { 02567 TileFarBank.getTile (tileNumber)->erasePixels (CTileFarBank::diffuse); 02568 bSame=false; 02569 } 02570 } 02571 02572 // It is the same tile ? 02573 if (TileFarBank.getTile (tileNumber)->isFill (CTileFarBank::additive)) 02574 { 02575 // Good additive size ? 02576 if ( 02577 (TileFarBank.getTile (tileNumber)->getSize (CTileFarBank::additive, CTileFarBank::order0) != sizeOrder0) || 02578 (TileFarBank.getTile (tileNumber)->getSize (CTileFarBank::additive, CTileFarBank::order1) != sizeOrder1) || 02579 (TileFarBank.getTile (tileNumber)->getSize (CTileFarBank::additive, CTileFarBank::order2) != sizeOrder2) 02580 ) 02581 { 02582 TileFarBank.getTile (tileNumber)->erasePixels (CTileFarBank::additive); 02583 bSame=false; 02584 } 02585 } 02586 02587 // Return true if the tiles seem to be the sames 02588 return bSame; 02589 } |
|
This is especially for Pacs. exlude a patch to be refineAll()ed.
Definition at line 760 of file landscape.cpp. References NL3D::ItZoneMap, sint, uint, and Zones. Referenced by NL3D::CZoneLighter::buildZoneInformation(), NL3D::CZoneLighter::excludeAllPatchFromRefineAll(), and NL3D::CInstanceLighter::excludeAllPatchFromRefineAll().
|
|
Fill a CPatchQuadBlock, from its required PatchId. nlassert(PatchId size is less than NL_PATCH_BLOCK_MAX_QUAD) Definition at line 2359 of file landscape.cpp. References NL3D::CPatch::fillPatchQuadBlock(), nlassert, NL3D::CPatchQuadBlock::PatchBlockId, NL3D::CPatchIdent::PatchId, NL3D::CPatchBlockIdent::PatchId, sint, NL3D::CPatchIdent::ZoneId, and Zones.
02360 { 02361 sint zoneId= quadBlock.PatchBlockId.PatchId.ZoneId; 02362 sint patchId= quadBlock.PatchBlockId.PatchId.PatchId; 02363 std::map<uint16, CZone*>::const_iterator it= Zones.find(zoneId); 02364 if(it!=Zones.end()) 02365 { 02366 sint N= (*it).second->getNumPatchs(); 02367 // patch must exist in the zone. 02368 nlassert(patchId>=0); 02369 nlassert(patchId<N); 02370 02371 const CPatch *pa= const_cast<const CZone*>((*it).second)->getPatch(patchId); 02372 pa->fillPatchQuadBlock(quadBlock); 02373 } 02374 } |
|
Definition at line 1659 of file landscape.cpp. References ItTileRdrPassSet, and TileRdrPassSet. Referenced by loadTile().
01660 { 01661 ItTileRdrPassSet it; 01662 // If already here, find it, else insert. 01663 it= (TileRdrPassSet.insert(pass)).first; 01664 01665 return const_cast<CPatchRdrPass*>(&(*it)); 01666 } |
|
Definition at line 1639 of file landscape.cpp. References TileTextureMap. Referenced by loadTile().
01640 { 01641 ITexture *text; 01642 text= TileTextureMap[textName]; 01643 // If just inserted, RefPtr is NULL!! :) 01644 // This test too if the RefPtr is NULL... (tile released) 01645 // The object is not owned by this map. It will be own by the multiple RdrPass via CSmartPtr. 01646 // They will destroy it when no more points to them. 01647 if(!text) 01648 { 01649 TileTextureMap[textName]= text= new CTextureFile(textName); 01650 text->setWrapS(ITexture::Clamp); 01651 text->setWrapT(ITexture::Clamp); 01652 text->setUploadFormat(ITexture::DXTC5); 01653 } 01654 return text; 01655 } |
|
Force a range of tiles to be loaded in the driver...
Definition at line 1884 of file landscape.cpp. References ItTileRdrPassSet, loadTile(), NL3D::IDriver::setupTexture(), sint, NL3D::CPatchRdrPass::TextureAlpha, NL3D::CPatchRdrPass::TextureDiffuse, TileInfos, TileRdrPassSet, and uint16. Referenced by NL3D::CLandscapeUser::flushTiles().
01885 { 01886 // Load tile rdrpass, force setup the texture. 01887 for(sint tileId= tileStart; tileId<tileStart+nbTiles; tileId++) 01888 { 01889 CTileInfo *tile= TileInfos[tileId]; 01890 if(tile==NULL) 01891 { 01892 loadTile(tileId); 01893 } 01894 } 01895 01896 // For all rdrpass, force setup the texture. 01897 ItTileRdrPassSet it; 01898 for(it= TileRdrPassSet.begin(); it!=TileRdrPassSet.end(); it++) 01899 { 01900 const CPatchRdrPass &pass= *it; 01901 // If present and not already setuped... 01902 if(pass.TextureDiffuse && !pass.TextureDiffuse->setupedIntoDriver()) 01903 drv->setupTexture(*pass.TextureDiffuse); 01904 // If present and not already setuped... 01905 if(pass.TextureAlpha && !pass.TextureAlpha->setupedIntoDriver()) 01906 drv->setupTexture(*pass.TextureAlpha); 01907 } 01908 } |
|
For changing TileMaxSubdivision. force tesselation to be under tile.
Definition at line 374 of file landscape.cpp. References NL3D::ItZoneMap, and Zones. Referenced by setTileMaxSubdivision().
|
|
Definition at line 2157 of file landscape.cpp. References _ULTotalFarPixels, NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), height, NL_NUM_PIXELS_ON_FAR_TILE_EDGE, nlassert, NL3D::CTextureFar::removePatch(), NL3D::CPatchRdrPass::TextureDiffuse, uint, and width. Referenced by NL3D::CPatch::computeNewFar(), and NL3D::CPatch::resetRenderFar().
02158 { 02159 // Get size of the far texture 02160 uint width=(pPatch->getOrderS ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 02161 uint height=(pPatch->getOrderT ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 02162 02163 // For updateLighting: decrement total of pixels to update. 02164 _ULTotalFarPixels-= width*height; 02165 nlassert(_ULTotalFarPixels>=0); 02166 02167 // Get a pointer on the diffuse far texture 02168 CTextureFar *pTextureFar=(CTextureFar*)(&*(pass->TextureDiffuse)); 02169 02170 // Remove from the patch from the texture if empty 02171 pTextureFar->removePatch (pPatch, farIndex); 02172 } |
|
return the light direction setuped in enableAutomaticLighting().
Definition at line 415 of file landscape.h. References _AutomaticLightDir. Referenced by NL3D::CPatch::computeTileLightmapPixelAutomatic().
00415 {return _AutomaticLightDir;} |
|
return true if AutomaticLighting is enabled.
Definition at line 413 of file landscape.h. References _AutomaticLighting. Referenced by NL3D::CPatch::computeTileLightmap(), NL3D::CPatch::computeTileLightmapEdge(), and NL3D::CPatch::computeTileLightmapPixel().
00413 {return _AutomaticLighting;} |
|
Get the camera 3rd person collision against the TileFaces (ie only under approx 50 m) return a [0,1] value. 0 => collision at start. 1 => no collision.
Definition at line 3714 of file landscape.cpp. References _ShadowPolyReceiver, and NL3D::CShadowPolyReceiver::getCameraCollision().
03715 { 03716 return _ShadowPolyReceiver.getCameraCollision(start, end, radius, cone); 03717 } |
|
see setDLMGlobalVegetableColor() Definition at line 606 of file landscape.h. References _DLMGlobalVegetableColor. Referenced by NL3D::CLandscapeUser::getDLMGlobalVegetableColor().
00606 {return _DLMGlobalVegetableColor;} |
|
see setDynamicLightingMaxAttEnd() Definition at line 597 of file landscape.h. References _DLMMaxAttEnd.
00597 {return _DLMMaxAttEnd;} |
|
For bench only. return approximate ammount of memory taken by dynamic lightmap in RAM. This is sizeof(global Texture in RAM) + all patchDLMContext. NB: not so slow, but do not call in final release. Definition at line 3583 of file landscape.cpp. References _PatchDLMContextList, NL3D::CTessList< CPatchDLMContext >::begin(), NL3D::CPatchDLMContext::getMemorySize(), NL3D::CTessNodeList::Next, NL3D_LANDSCAPE_DLM_HEIGHT, NL3D_LANDSCAPE_DLM_WIDTH, and uint.
03584 { 03585 uint mem= 0; 03586 // First, set size of global texture overhead. 03587 mem= NL3D_LANDSCAPE_DLM_WIDTH * NL3D_LANDSCAPE_DLM_HEIGHT * sizeof(CRGBA); 03588 03589 // Then, for each patchContext created 03590 CPatchDLMContext *ctxPtr= _PatchDLMContextList->begin(); 03591 while(ctxPtr!=NULL) 03592 { 03593 // add its memory load. 03594 mem+= ctxPtr->getMemorySize(); 03595 03596 // next 03597 ctxPtr= (CPatchDLMContext*)ctxPtr->Next; 03598 } 03599 03600 return mem; 03601 } |
|
Definition at line 2075 of file landscape.cpp. References _TextureFars, _ULRootTextureFar, _ULTotalFarPixels, NL3D::CTextureFar::allocatePatch(), NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), height, NL3D::CTextureFar::linkBeforeUL(), NL_NUM_PIXELS_ON_FAR_TILE_EDGE, nlassert, sint, NL3D::CPatchRdrPass::TextureDiffuse, TileFarBank, NL3D::CTextureFar::tryAllocatePatch(), TSPRenderPass, uint, and width. Referenced by NL3D::CPatch::computeNewFar().
02076 { 02077 // Check args 02078 nlassert (farIndex>0); 02079 02080 // Get size of the far texture 02081 uint width=(pPatch->getOrderS ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 02082 uint height=(pPatch->getOrderT ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 02083 02084 // For updateLighting: increment total of pixels to update. 02085 _ULTotalFarPixels+= width*height; 02086 02087 // Try to allocate in every textures 02088 uint i; 02089 sint bestRdrPass= -1; 02090 sint bestSplit= INT_MAX; 02091 for(i=0;i<_TextureFars.size();i++) 02092 { 02093 CTextureFar *pTextureFar=(CTextureFar*)(&*(_TextureFars[i]->TextureDiffuse)); 02094 02095 sint splitRes= pTextureFar->tryAllocatePatch(pPatch, farIndex); 02096 // if found with no split, ok, stop! 02097 if(splitRes==0) 02098 { 02099 bestRdrPass= i; 02100 break; 02101 } 02102 // else if found, but with split 02103 else if(splitRes > 0) 02104 { 02105 // Then must take the small split possible along all the texture fars. 02106 if (splitRes<bestSplit) 02107 { 02108 bestRdrPass= i; 02109 bestSplit= splitRes; 02110 } 02111 } 02112 } 02113 02114 // If no one found, must allocate a new render pass. 02115 if(bestRdrPass==-1) 02116 { 02117 bestRdrPass= _TextureFars.size(); 02118 02119 // add a new render pass 02120 CPatchRdrPass *pass=new CPatchRdrPass; 02121 02122 // Fill the render pass 02123 CTextureFar *pTextureFar=new CTextureFar; 02124 02125 // Append this textureFar to the list of TextureFar to updateLighting. 02126 if(_ULRootTextureFar==NULL) 02127 _ULRootTextureFar= pTextureFar; 02128 else 02129 pTextureFar->linkBeforeUL(_ULRootTextureFar); 02130 02131 // Set the bank 02132 pTextureFar->_Bank=&TileFarBank; 02133 02134 // Set as diffuse texture for this renderpass 02135 pass->TextureDiffuse=pTextureFar; 02136 02137 // Add the render pass to the list 02138 _TextureFars.push_back(pass); 02139 } 02140 02141 02142 // Ok, add the patch to the best render pass in the _TextureFars 02143 TSPRenderPass pass= _TextureFars[bestRdrPass]; 02144 02145 // Get a pointer on the diffuse far texture 02146 CTextureFar *pTextureFar=(CTextureFar*)(&*(pass->TextureDiffuse)); 02147 02148 // Allocate really in it (must success since tryAllocate() has succeed) 02149 pTextureFar->allocatePatch(pPatch, farIndex, farUScale, farVScale, farUBias, farVBias, bRot); 02150 02151 // Return the renderpass 02152 return pass; 02153 } |
|
return the HeightField DeltaZ for the 2D position. (0,0,dZ) is returned.
Definition at line 2698 of file landscape.cpp. References _HeightField, NL3D::CLandscape::CBezierPatchZ::eval(), NL3D::CLandscape::CHeightField::Height, NL3D::CLandscape::CHeightField::OOSizeX, NL3D::CLandscape::CHeightField::OOSizeY, NL3D::CLandscape::CHeightField::OriginX, NL3D::CLandscape::CHeightField::OriginY, sint, NL3D::CLandscape::CHeightField::Width, NLMISC::CVector::x, x, NLMISC::CVector::y, y, NLMISC::CVector::z, and NL3D::CLandscape::CHeightField::ZPatchs. Referenced by NL3D::CZone::applyHeightField(), and NL3D::CLandscapeUser::getHeightFieldDeltaZ().
02699 { 02700 if(_HeightField.ZPatchs.size()==0) 02701 return CVector::Null; 02702 02703 // map to _HeightField coordinates. 02704 x-= _HeightField.OriginX; 02705 y-= _HeightField.OriginY; 02706 x*= _HeightField.OOSizeX; 02707 y*= _HeightField.OOSizeY; 02708 // get patch on the grid. 02709 sint ix, iy; 02710 ix= (sint)floor(x); 02711 iy= (sint)floor(y); 02712 // out of the grid? 02713 if( ix<0 || ix>=(sint)_HeightField.Width || iy<0 || iy>=(sint)_HeightField.Height) 02714 return CVector::Null; 02715 02716 // get patch. 02717 const CBezierPatchZ &paz= _HeightField.ZPatchs[iy*_HeightField.Width + ix]; 02718 02719 // compute result. 02720 CVector ret=CVector::Null; 02721 ret.x= 0; 02722 ret.y= 0; 02723 ret.z= paz.eval(x-ix, y-iy); 02724 02725 return ret; 02726 } |
|
Get the lumel under the position. return 255 if invalid patchId.
Definition at line 3254 of file landscape.cpp. References NL3D::CPatch::getLumel(), nlassert, NL3D::CPatchIdent::PatchId, sint, uint16, uint8, NL3D::CPatchIdent::ZoneId, and Zones.
03255 { 03256 // \todo yoyo: TODO_ZONEID: change ZoneId in 32 bits... 03257 std::map<uint16, CZone*>::const_iterator it= Zones.find((uint16)patchId.ZoneId); 03258 if(it!=Zones.end()) 03259 { 03260 sint N= (*it).second->getNumPatchs(); 03261 // patch must exist in the zone. 03262 nlassert(patchId.PatchId<N); 03263 const CPatch *pa= const_cast<const CZone*>((*it).second)->getPatch(patchId.PatchId); 03264 03265 return pa->getLumel(uv); 03266 } 03267 else 03268 // Return full sun contribution as default 03269 return 255; 03270 } |
|
Definition at line 3106 of file landscape.cpp. References _NoiseEnabled. Referenced by NL3D::CPatch::computeVertex().
03107 { 03108 return _NoiseEnabled; 03109 } |
|
return the number of faces displayed in Driver with the vegetable manager. Out CPrimitiveProfile::NTriangles displayed by vegetable part is returned. Definition at line 3211 of file landscape.cpp. References _VegetableManager, NL3D::CVegetableManager::getNumVegetableFaceRendered(), and uint.
03212 { 03213 return _VegetableManager->getNumVegetableFaceRendered(); 03214 } |
|
This is especially for Pacs. Each Vertex->EndPos which is not a corner of a patch is set to the mean of its 2 shared Patchs. NB: Works with special cases of rectangular patchs and binded patchs. Definition at line 264 of file landscape.h. References _OldRefineCenter. Referenced by NL3D::CLandscapeModel::getReceiverBBox().
00264 {return _OldRefineCenter;} |
|
for CPatch.
Definition at line 983 of file landscape.h. References _PatchDLMContextList.
00983 {return _PatchDLMContextList;} |
|
Definition at line 394 of file landscape.h. References _PointLightDiffuseMaterial. Referenced by NL3D::CLandscapeUser::getPointLightDiffuseMaterial().
00395 { 00396 return _PointLightDiffuseMaterial; 00397 } |
|
Definition at line 548 of file landscape.h. References _PZBModelPosition. Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape(), and NL3D::CLandscapeModel::receiveShadowMap().
00548 {return _PZBModelPosition;} |
|
Definition at line 70 of file smart_ptr.h. References NLMISC::CRefCount::crefs, and sint.
00071 { 00072 return crefs; 00073 } |
|
Definition at line 207 of file landscape.h. References _RefineMode.
00207 {return _RefineMode;} |
|
Get the light color by shading table.
Definition at line 380 of file landscape.h. References _LightValue. Referenced by NL3D::CPatch::computeTileLightmapEdgePrecomputed(), NL3D::CPatch::computeTileLightmapPixelAutomatic(), NL3D::CPatch::computeTileLightmapPixelPrecomputed(), NL3D::CPatch::computeTileLightmapPrecomputed(), and NL3D::CTextureFar::rebuildPatch().
00381 { 00382 return _LightValue; 00383 } |
|
From the current tesselation of a patch of landscape, and a UV in this patch, return tesselated position. NB: return Null if patch not found. Definition at line 2496 of file landscape.cpp. References _OldRefineCenter, _Threshold, _TileDistNear, _VertexShaderOk, NL3D::CPatch::getTesselatedPos(), nlassert, NL3D::CPatchIdent::PatchId, sint, NLMISC::sqr(), uint16, NL3D::CPatchIdent::ZoneId, and Zones.
02497 { 02498 // First, must update globals, for CTessFace::computeTesselatedPos() to work properly. 02499 02500 // VertexProgrma mode??? 02501 CLandscapeGlobals::VertexProgramEnabled= _VertexShaderOk; 02502 02503 // If VertexProgram enabled 02504 if( CLandscapeGlobals::VertexProgramEnabled ) 02505 { 02506 /* because VertexProgram enabled, CTessVertex::Pos (geomorphed Pos) are not computed each frame 02507 Hence, CTessFace::computeTesselatedPos() will call CTessVertex::computeGeomPos() to have correct 02508 CTessVertex::Pos. ThereFore we must setup globals so CTessVertex::computeGeomPos() works properly. 02509 */ 02510 02511 // see copy in updateGlobalsAndLockBuffers(). NB: Just copy what needed here!!!! 02512 02513 // Tile subdivsion part. 02514 CLandscapeGlobals::TileDistNear = _TileDistNear; 02515 CLandscapeGlobals::TileDistFar = CLandscapeGlobals::TileDistNear+20; 02516 CLandscapeGlobals::TileDistNearSqr = sqr(CLandscapeGlobals::TileDistNear); 02517 CLandscapeGlobals::TileDistFarSqr = sqr(CLandscapeGlobals::TileDistFar); 02518 CLandscapeGlobals::OOTileDistDeltaSqr = 1.0f / (CLandscapeGlobals::TileDistFarSqr - CLandscapeGlobals::TileDistNearSqr); 02519 02520 // RefineThreshold. 02521 CLandscapeGlobals::RefineThreshold= _Threshold; 02522 CLandscapeGlobals::OORefineThreshold= 1.0f / CLandscapeGlobals::RefineThreshold; 02523 02524 // Refine Center*. 02525 // NB: setup the last setuped refineCenter. 02526 CLandscapeGlobals::RefineCenter= _OldRefineCenter; 02527 } 02528 02529 02530 // \todo yoyo: TODO_ZONEID: change ZoneId in 32 bits... 02531 std::map<uint16, CZone*>::const_iterator it= Zones.find((uint16)patchId.ZoneId); 02532 if(it!=Zones.end()) 02533 { 02534 sint N= (*it).second->getNumPatchs(); 02535 // patch must exist in the zone. 02536 nlassert(patchId.PatchId<N); 02537 const CPatch *pa= const_cast<const CZone*>((*it).second)->getPatch(patchId.PatchId); 02538 02539 return pa->getTesselatedPos(uv); 02540 } 02541 else 02542 return CVector::Null; 02543 } |
|
From the current tesselation of landscape, build the list of leaves faces. Warning: ptrs are only valid between 2 tesselation (2 calls of Scene::render() or 2 calls of refine*() etc...) Definition at line 2899 of file landscape.cpp. References NL3D::CPatch::appendTessellationLeaves(), sint, and Zones. Referenced by NL3D::CZoneLighter::addTriangles(), NL3D::CInstanceLighter::addTriangles(), and NL3D::CZoneLighter::buildZoneInformation().
02900 { 02901 leaves.clear(); 02902 02903 std::map<uint16, CZone*>::const_iterator it; 02904 for(it= Zones.begin();it!=Zones.end();it++) 02905 { 02906 // Then trace all patch. 02907 sint N= (*it).second->getNumPatchs(); 02908 for(sint i=0;i<N;i++) 02909 { 02910 const CPatch *pa= const_cast<const CZone*>((*it).second)->getPatch(i); 02911 02912 pa->appendTessellationLeaves(leaves); 02913 } 02914 } 02915 02916 } |
|
for CPatch.
Definition at line 979 of file landscape.h. References _TextureDLM.
00979 {return (CTextureDLM*)(ITexture*)_TextureDLM;} |
|
Get threshold.
Definition at line 205 of file landscape.h. References _Threshold. Referenced by NL3D::CLandscapeUser::getThreshold().
00205 {return _Threshold;} |
|
Definition at line 622 of file landscape.h. References _TileCallback. Referenced by NL3D::CPatch::appendTileMaterialToRenderList(), NL3D::CLandscapeUser::getTileCallback(), and NL3D::CPatch::removeTileMaterialFromRenderList().
00622 { return _TileCallback; } |
|
Return the tile element for a patch at specific UV. UseFull for getting surface data. Return NULL if not found.
Definition at line 1865 of file landscape.cpp. References NL3D::CPatch::getTileElement(), nlassert, NL3D::CPatchIdent::PatchId, sint, uint16, NL3D::CPatchIdent::ZoneId, and Zones.
01866 { 01867 // \todo yoyo: TODO_ZONEID: change ZoneId in 32 bits... 01868 std::map<uint16, CZone*>::const_iterator it= Zones.find((uint16)patchId.ZoneId); 01869 if(it!=Zones.end()) 01870 { 01871 sint N= (*it).second->getNumPatchs(); 01872 // patch must exist in the zone. 01873 nlassert(patchId.PatchId<N); 01874 CPatch *pa= const_cast<CZone*>((*it).second)->getPatch(patchId.PatchId); 01875 return pa->getTileElement (uv); 01876 } 01877 else 01878 // Return not found 01879 return NULL; 01880 } |
|
Definition at line 1945 of file landscape.cpp. References _NFreeLightMaps, _TextureNears, _ULTotalNearPixels, NL3D::CTextureNear::getNbAvailableTiles(), NL3D::CTextureNear::getTileAndFillRect(), NL3D::NbTileLightMapByTexture, NL_TILE_LIGHTMAP_SIZE, nlassert, sint, NL3D::CPatchRdrPass::TextureDiffuse, NL3D::TextureNearSize, TSPRenderPass, and uint. Referenced by NL3D::CPatch::getTileLightMap().
01946 { 01947 sint textNum; 01948 uint lightMapId; 01949 /* 01950 NB: TextureNear are a grow only Array... TextureNear are never deleted. Why? : 01951 2/ Unused near texture may be uncahced by opengl (and maybe by windows, to disk). 01952 01953 (old reason, no longer valid, since lightmaps are unlinked from tiles. 01954 1/ There is an important issue with releasing texture nears: tiles may acces them (see getTileRenderPass()) 01955 ) 01956 */ 01957 // 0. Alloc Near Texture if necessary. 01958 //==================================== 01959 if(_NFreeLightMaps==0) 01960 { 01961 CTextureNear *text= new CTextureNear(TextureNearSize); 01962 TSPRenderPass newPass= new CPatchRdrPass; 01963 01964 newPass->TextureDiffuse= text; 01965 01966 _TextureNears.push_back(newPass); 01967 _NFreeLightMaps+= text->getNbAvailableTiles(); 01968 } 01969 01970 // 1. Search the first texture which has a free tile. 01971 //================================================== 01972 CTextureNear *nearText= NULL; 01973 CPatchRdrPass *nearRdrPass= NULL; 01974 for(textNum=0;textNum<(sint)_TextureNears.size();textNum++) 01975 { 01976 nearRdrPass= _TextureNears[textNum]; 01977 nearText= (CTextureNear*)(ITexture*)nearRdrPass->TextureDiffuse; 01978 if(nearText->getNbAvailableTiles()!=0) 01979 break; 01980 } 01981 nlassert(textNum<(sint)_TextureNears.size()); 01982 // A empty space has been found. 01983 _NFreeLightMaps--; 01984 01985 // 2. Fill the texture with the data, and updaterect. 01986 //=================================================== 01987 lightMapId= nearText->getTileAndFillRect(map); 01988 // Compute the Id. 01989 lightMapId= textNum*NbTileLightMapByTexture + lightMapId; 01990 01991 01992 // 3. updateLighting 01993 //=================================================== 01994 // Increment number of pixels to update for near. 01995 _ULTotalNearPixels+= NL_TILE_LIGHTMAP_SIZE*NL_TILE_LIGHTMAP_SIZE; 01996 01997 01998 // Result: 01999 lightmapRdrPass= nearRdrPass; 02000 return lightMapId; 02001 } |
|
Definition at line 2003 of file landscape.cpp. References NL3D::NbTileLightMapByLine, NL3D::NbTileLightMapByTexture, NL_TILE_LIGHTMAP_SIZE, s, t, NL3D::TextureNearSize, uint, NLMISC::CVector::x, NLMISC::CVector::y, and NLMISC::CVector::z. Referenced by NL3D::CPatch::getTileLightMapUvInfo().
02004 { 02005 uint id, s,t; 02006 02007 // Scale. 02008 static const float scale10= (float)NL_TILE_LIGHTMAP_SIZE/TextureNearSize; 02009 static const float scale4= 4.f/TextureNearSize; 02010 static const float scale1= 1.f/TextureNearSize; 02011 // The size of a minilightmap, mapped onto the polygon, is still 4 pixels. 02012 uvScaleBias.z= scale4; 02013 02014 // Get the id local in the texture. 02015 id= tileLightMapId%NbTileLightMapByTexture; 02016 02017 // Commpute UVBias. 02018 // Get the coordinate of the tile, in tile number. 02019 s= id%NbTileLightMapByLine; 02020 t= id/NbTileLightMapByLine; 02021 // But the real size of a minilightmap is 10 pixels, and we must reach the pixel 1,1. 02022 uvScaleBias.x= s*scale10 + scale1; 02023 uvScaleBias.y= t*scale10 + scale1; 02024 } |
|
Get Maximum Tile subdivision.
Definition at line 356 of file landscape.cpp. References _TileMaxSubdivision, and uint. Referenced by NL3D::CLandscapeUser::getTileMaxSubdivision().
00357 { 00358 return _TileMaxSubdivision; 00359 } |
|
Get tile near distance.
Definition at line 201 of file landscape.h. References _TileDistNear. Referenced by NL3D::CLandscapeModel::getReceiverBBox(), and NL3D::CLandscapeUser::getTileNear().
00201 {return _TileDistNear;} |
|
Definition at line 1790 of file landscape.cpp. References NL3D::CLandscape::CTileInfo::AdditiveRdrPass, NL3D::CLandscape::CTileInfo::DiffuseRdrPass, loadTile(), nlassert, TileInfos, and uint16. Referenced by NL3D::CPatch::getTileRenderPass(), and getTileTexture().
01791 { 01792 CTileInfo *tile= TileInfos[tileId]; 01793 01794 // If not here, create it. 01795 //======================== 01796 if(tile==NULL) 01797 { 01798 // Force loading of tile. 01799 loadTile(tileId); 01800 01801 tile= TileInfos[tileId]; 01802 nlassert(tile!=NULL); 01803 } 01804 01805 // Retrieve. 01806 //======================== 01807 if(additiveRdrPass) 01808 { 01809 // NB: additive pass is not lighted by the lightmap, so there is no lighted version of this rednerpass. 01810 return tile->AdditiveRdrPass; 01811 } 01812 else 01813 { 01814 return tile->DiffuseRdrPass; 01815 } 01816 } |
|
Return the texture for a tile Id. UseFull for Tile edition.
Definition at line 1844 of file landscape.cpp. References getTileRenderPass(), getTileUvScaleBiasRot(), NL3D::CPatchRdrPass::TextureAlpha, NL3D::CPatchRdrPass::TextureDiffuse, uint16, and uint8.
01845 { 01846 CPatchRdrPass *pass; 01847 if(bitmapType== CTile::additive) 01848 pass= getTileRenderPass(tileId, true); 01849 else 01850 pass= getTileRenderPass(tileId, false); 01851 if(!pass) 01852 return NULL; 01853 uint8 dummy; 01854 getTileUvScaleBiasRot(tileId, bitmapType, uvScaleBias, dummy); 01855 01856 // return the wanted texture. 01857 if(bitmapType==CTile::diffuse || bitmapType==CTile::additive) 01858 return pass->TextureDiffuse; 01859 else 01860 return pass->TextureAlpha; 01861 } |
|
Definition at line 1820 of file landscape.cpp. References NL3D::CLandscape::CTileInfo::AdditiveUvScaleBias, NL3D::CLandscape::CTileInfo::AlphaUvScaleBias, NL3D::CLandscape::CTileInfo::DiffuseUvScaleBias, nlassert, NL3D::CLandscape::CTileInfo::RotAlpha, TileInfos, uint16, and uint8. Referenced by getTileTexture(), and NL3D::CPatch::getTileUvInfo().
01821 { 01822 CTileInfo *tile= TileInfos[tileId]; 01823 // tile should not be NULL. 01824 // Because load of tiles are always done in getTileRenderPass(), and this insertion always succeed. 01825 nlassert(tile); 01826 01827 rotAlpha= 0; 01828 switch(bitmapType) 01829 { 01830 case CTile::diffuse: 01831 uvScaleBias= tile->DiffuseUvScaleBias; break; 01832 case CTile::additive: 01833 uvScaleBias= tile->AdditiveUvScaleBias; break; 01834 case CTile::alpha: 01835 uvScaleBias= tile->AlphaUvScaleBias; 01836 rotAlpha= tile->RotAlpha; 01837 break; 01838 default: break; 01839 } 01840 } |
|
For a given tile Id, look into tileSet, and get the tile vegetable descriptor
Definition at line 3218 of file landscape.cpp. References NL3D::CTileBank::getTileVegetableDesc(), TileBank, and uint16. Referenced by NL3D::CPatch::generateTileVegetable().
03219 { 03220 return TileBank.getTileVegetableDesc(tileId); 03221 } |
|
Get a zone pointer.
Definition at line 2218 of file landscape.cpp.
|
|
Get a zone pointer.
Definition at line 2206 of file landscape.cpp. Referenced by NL3D::CZoneLighter::buildZoneInformation(), checkZoneBinds(), NL3D::CZoneLighter::excludeAllPatchFromRefineAll(), NL3D::CInstanceLighter::excludeAllPatchFromRefineAll(), NL3D::CZoneLighter::processCalc(), and NL3D::CZoneLighter::processZonePointLightRT().
|
|
Return list of zone loaded. Definition at line 502 of file landscape.cpp. References Zones. Referenced by clear(), and NL3D::CLandscapeUser::getAllZoneLoaded().
|
|
init the landscape VBuffers, texture cache etc...
Definition at line 288 of file landscape.cpp. References _PatchQuadGrid, _PatchQuadGridEltSize, _PatchQuadGridSize, NL3D::CQuadGrid< CPatchIdentEx >::create(), FarMaterial, NL3D::CMaterial::initUnlit(), NL3D::CMaterial::setDstBlend(), NL3D::CMaterial::setSrcBlend(), NL3D::CMaterial::texEnvArg0Alpha(), NL3D::CMaterial::texEnvArg0RGB(), NL3D::CMaterial::texEnvArg1RGB(), NL3D::CMaterial::texEnvOpAlpha(), NL3D::CMaterial::texEnvOpRGB(), and TileMaterial. Referenced by NL3D::CLandscapeModel::CLandscapeModel().
00289 { 00290 // Fill Far mat. 00291 // Must init his BlendFunction here!!! becaus it switch between blend on/off during rendering. 00292 FarMaterial.initUnlit(); 00293 FarMaterial.setSrcBlend(CMaterial::srcalpha); 00294 FarMaterial.setDstBlend(CMaterial::invsrcalpha); 00295 00296 // FarMaterial: pass trhough Alpha from diffuse. 00297 FarMaterial.texEnvOpAlpha(0, CMaterial::Replace); 00298 FarMaterial.texEnvArg0Alpha(0, CMaterial::Diffuse, CMaterial::SrcAlpha); 00299 FarMaterial.texEnvOpAlpha(1, CMaterial::Replace); 00300 FarMaterial.texEnvArg0Alpha(1, CMaterial::Diffuse, CMaterial::SrcAlpha); 00301 // FarMaterial: Add RGB from static lightmap and dynamic lightmap 00302 FarMaterial.texEnvOpRGB(0, CMaterial::Replace); 00303 FarMaterial.texEnvArg0RGB(0, CMaterial::Texture, CMaterial::SrcColor); 00304 FarMaterial.texEnvOpRGB(1, CMaterial::Add); 00305 FarMaterial.texEnvArg0RGB(1, CMaterial::Texture, CMaterial::SrcColor); 00306 FarMaterial.texEnvArg1RGB(1, CMaterial::Previous, CMaterial::SrcColor); 00307 00308 00309 // Init material for tile. 00310 TileMaterial.initUnlit(); 00311 00312 // init quadGrid. 00313 _PatchQuadGrid.create(_PatchQuadGridSize, _PatchQuadGridEltSize); 00314 } |
|
Enable automatic near lightmap computing. use setupStaticLight(). Default is disabled. NB: calling this method won't flush all texture near already computed. Definition at line 3619 of file landscape.cpp. References NL3D::ItZoneMap, and Zones. Referenced by NL3D::CScene::createInstance().
|
|
Reinit the tile bank if the bank change.
Definition at line 3629 of file landscape.cpp. References releaseTiles(), TileInfos, uint, and Zones. Referenced by CLandscape(), and NL3D::CLandscapeUser::flushTiles().
03630 { 03631 // Release the tiles 03632 releaseTiles (0, TileInfos.size()); 03633 TileInfos.clear(); 03634 TileInfos.resize(NL3D::NbTilesMax); 03635 fill(TileInfos.begin(), TileInfos.end(), (CTileInfo*)NULL); 03636 03637 // Refresh each zone 03638 std::map<uint16, CZone*>::iterator it; 03639 for(it= Zones.begin();it!=Zones.end();it++) 03640 { 03641 // Refresh each patch 03642 uint numPatch = (uint)it->second->getNumPatchs(); 03643 uint i; 03644 for (i=0; i<numPatch; i++) 03645 it->second->changePatchTextureAndColor (i, NULL, NULL); 03646 } 03647 } |
|
Build tileBank. Call this after loading the near and far tile banks.
Definition at line 2592 of file landscape.cpp. References _FarInitialized, _VegetableManager, eraseTileFarIfNotGood(), NL3D::CTileFarBank::getNumTile(), NL3D::CTileSet::getNumTile128(), NL3D::CTileSet::getNumTile256(), NL3D::CTileSetTransition::getTile(), NL3D::CTileSet::getTile128(), NL3D::CTileSet::getTile256(), NL3D::CTileBank::getTileCount(), NL3D::CTileBank::getTileSet(), NL3D::CTileBank::getTileSetCount(), NL3D::CTileSet::getTransition(), NL3D::CTileBank::initTileVegetableDescs(), NL_TILE_FAR_SIZE_ORDER0, NL_TILE_FAR_SIZE_ORDER1, NL_TILE_FAR_SIZE_ORDER2, TileBank, TileFarBank, and uint. Referenced by NL3D::CLandscapeUser::flushTiles().
02593 { 02594 // *** Check the two banks are OK 02595 _FarInitialized=false; 02596 02597 // Compatibility check 02598 bool bCompatibility=true; 02599 02600 // Same number of tiles 02601 if (TileBank.getTileCount()==TileFarBank.getNumTile()) 02602 { 02603 // Same tileSet 02604 for (int tileSet=0; tileSet<TileBank.getTileSetCount(); tileSet++) 02605 { 02606 // Same tile128 02607 int tile; 02608 for (tile=0; tile<TileBank.getTileSet(tileSet)->getNumTile128(); tile++) 02609 { 02610 // tile number 02611 uint tileNumber=TileBank.getTileSet(tileSet)->getTile128(tile); 02612 02613 // erase the tiles if not good 02614 bCompatibility&=eraseTileFarIfNotGood (tileNumber, NL_TILE_FAR_SIZE_ORDER0, NL_TILE_FAR_SIZE_ORDER1, NL_TILE_FAR_SIZE_ORDER2); 02615 } 02616 02617 // Same tile256 02618 for (tile=0; tile<TileBank.getTileSet(tileSet)->getNumTile256(); tile++) 02619 { 02620 // tile number 02621 uint tileNumber=TileBank.getTileSet(tileSet)->getTile256(tile); 02622 02623 // erase the tiles if not good 02624 bCompatibility&=eraseTileFarIfNotGood (tileNumber, NL_TILE_FAR_SIZE_ORDER0<<2, NL_TILE_FAR_SIZE_ORDER1<<2, NL_TILE_FAR_SIZE_ORDER2<<2); 02625 } 02626 02627 // Same transition 02628 for (tile=0; tile<CTileSet::count; tile++) 02629 { 02630 // tile number 02631 uint tileNumber=TileBank.getTileSet(tileSet)->getTransition(tile)->getTile(); 02632 02633 // erase the tiles if not good 02634 bCompatibility&=eraseTileFarIfNotGood (tileNumber, NL_TILE_FAR_SIZE_ORDER0, NL_TILE_FAR_SIZE_ORDER1, NL_TILE_FAR_SIZE_ORDER2); 02635 } 02636 } 02637 02638 // Far actived! 02639 _FarInitialized=true; 02640 } 02641 02642 // Register / Load the vegetables. 02643 TileBank.initTileVegetableDescs(_VegetableManager); 02644 02645 return bCompatibility; 02646 } |
|
Definition at line 3694 of file landscape.cpp. References uint, unlockBuffers(), updateGlobalsAndLockBuffers(), updateTessBlocksFaceVector(), and Zones. Referenced by NL3D::CLandscapeUser::invalidateAllTiles().
03695 { 03696 03697 updateGlobalsAndLockBuffers(CVector::Null); 03698 for(TZoneMap::iterator it = Zones.begin(); it != Zones.end(); ++it) 03699 { 03700 if (it->second->Compiled) 03701 { 03702 for(uint k = 0; k < it->second->Patchs.size(); ++k) 03703 { 03704 it->second->Patchs[k].deleteTileUvs(); 03705 it->second->Patchs[k].recreateTileUvs(); 03706 } 03707 } 03708 } 03709 unlockBuffers(); 03710 updateTessBlocksFaceVector(); 03711 } |
|
return if the vegetable management is actually activated: actually return _VerexShaderOk && _VegetableEnabled. Definition at line 3168 of file landscape.cpp. References _DriverOkForVegetable, and _VegetableManagerEnabled. Referenced by NL3D::CPatch::appendTileMaterialToRenderList(), NL3D::CPatch::recreateAllVegetableIgs(), and render().
03169 { 03170 return _VegetableManagerEnabled && _DriverOkForVegetable; 03171 } |
|
Used by Patch to link/unlink from _ULRootNearPatch.
Definition at line 3394 of file landscape.cpp. References _ULRootNearPatch, and NL3D::CPatch::linkBeforeNearUL(). Referenced by NL3D::CPatch::addRefTessBlocks().
03395 { 03396 // Append this patch to the list of patch to updateLighting. 03397 if(_ULRootNearPatch==NULL) 03398 _ULRootNearPatch= patch; 03399 else 03400 patch->linkBeforeNearUL(_ULRootNearPatch); 03401 } |
|
Definition at line 1670 of file landscape.cpp. References findTileRdrPass(), findTileTexture(), NL3D::CTileBank::getAbsPath(), NL3D::CTile::getRelativeFileName(), NL3D::CTile::getRotAlpha(), NL3D::CTileBank::getTile(), NL3D::CTileBank::getTileCount(), nlassert, nldebug, NL3D::CPatchRdrPass::TextureAlpha, NL3D::CPatchRdrPass::TextureDiffuse, TileBank, TileInfos, and uint16. Referenced by flushTiles(), and getTileRenderPass().
01671 { 01672 CTile *tile; 01673 CTileInfo *tileInfo; 01674 string textName; 01675 01676 // Retrieve or create texture. 01677 // =========================== 01678 // Tile Must exist. 01679 // nlassert(tileId==0xFFFF || tileId<TileBank.getTileCount()); 01680 if(tileId<TileBank.getTileCount()) 01681 tile= TileBank.getTile(tileId); 01682 else 01683 tile= NULL; 01684 // TileInfo must not exist. 01685 nlassert(TileInfos[tileId]==NULL); 01686 TileInfos[tileId]= tileInfo= new CTileInfo; 01687 01688 // Fill additive part. 01689 // =================== 01690 if(tile) 01691 textName= tile->getRelativeFileName(CTile::additive); 01692 else 01693 textName= ""; 01694 // If no additive for this tile, rdrpass is NULL. 01695 if(textName=="") 01696 tileInfo->AdditiveRdrPass= NULL; 01697 else 01698 { 01699 // Fill rdrpass. 01700 CPatchRdrPass pass; 01701 pass.TextureDiffuse= findTileTexture(TileBank.getAbsPath()+textName); 01702 01703 // We may have an alpha part for additive. 01704 textName= tile->getRelativeFileName (CTile::alpha); 01705 if(textName!="") 01706 pass.TextureAlpha= findTileTexture(TileBank.getAbsPath()+textName); 01707 01708 // Fill tileInfo. 01709 tileInfo->AdditiveRdrPass= findTileRdrPass(pass); 01710 // Fill UV Info. 01711 // NB: for now, One Tile== One Texture, so UVScaleBias is simple. 01712 tileInfo->AdditiveUvScaleBias.x= 0; 01713 tileInfo->AdditiveUvScaleBias.y= 0; 01714 tileInfo->AdditiveUvScaleBias.z= 1; 01715 } 01716 01717 01718 // Fill diffuse part. 01719 // ======================= 01720 // Fill rdrpass. 01721 CPatchRdrPass pass; 01722 // The diffuse part for a tile is inevitable. 01723 if(tile) 01724 { 01725 textName= tile->getRelativeFileName(CTile::diffuse); 01726 if(textName!="") 01727 pass.TextureDiffuse= findTileTexture(TileBank.getAbsPath()+textName); 01728 else 01729 { 01730 pass.TextureDiffuse= new CTextureCross; 01731 nldebug("Missing Tile diffuse texname: %d", tileId); 01732 } 01733 } 01734 else 01735 pass.TextureDiffuse= new CTextureCross; 01736 if(tile) 01737 { 01738 textName= tile->getRelativeFileName (CTile::alpha); 01739 if(textName!="") 01740 pass.TextureAlpha= findTileTexture(TileBank.getAbsPath()+textName); 01741 } 01742 01743 01744 // Fill tileInfo. 01745 tileInfo->DiffuseRdrPass= findTileRdrPass(pass); 01746 // Fill UV Info. 01747 // NB: for now, One Tile== One Texture, so UVScaleBias is simple. 01748 tileInfo->DiffuseUvScaleBias.x= 0; 01749 tileInfo->DiffuseUvScaleBias.y= 0; 01750 tileInfo->DiffuseUvScaleBias.z= 1; 01751 tileInfo->AlphaUvScaleBias.x= 0; 01752 tileInfo->AlphaUvScaleBias.y= 0; 01753 tileInfo->AlphaUvScaleBias.z= 1; 01754 // Retrieve the good rot alpha decal. 01755 if(tile) 01756 tileInfo->RotAlpha= tile->getRotAlpha(); 01757 else 01758 tileInfo->RotAlpha= 0; 01759 01760 01761 // Increment RefCount of RenderPart. 01762 // ================================= 01763 if(tileInfo->AdditiveRdrPass) 01764 tileInfo->AdditiveRdrPass->RefCount++; 01765 if(tileInfo->DiffuseRdrPass) 01766 tileInfo->DiffuseRdrPass->RefCount++; 01767 01768 } |
|
load a texture for the vegetable, lookup in CPath Definition at line 3174 of file landscape.cpp. References _VegetableManager, and NL3D::CVegetableManager::loadTexture(). Referenced by NL3D::CLandscapeUser::loadVegetableTexture().
03175 { 03176 // load the texture in the manager 03177 _VegetableManager->loadTexture(textureFileName); 03178 } |
|
Definition at line 862 of file landscape.cpp. References _Far0VB, _Far1VB, _TileVB, _VegetableManager, _VertexShaderOk, NL3D::CLandscapeVBAllocator::lockBuffer(), and NL3D::CVegetableManager::lockBuffers(). Referenced by render(), and updateGlobalsAndLockBuffers().
00863 { 00864 _Far0VB.lockBuffer(CLandscapeGlobals::CurrentFar0VBInfo); 00865 _Far1VB.lockBuffer(CLandscapeGlobals::CurrentFar1VBInfo); 00866 _TileVB.lockBuffer(CLandscapeGlobals::CurrentTileVBInfo); 00867 00868 // lock buffer of the vegetable manager. 00869 _VegetableManager->lockBuffers(); 00870 00871 // VertexProgrma mode??? 00872 CLandscapeGlobals::VertexProgramEnabled= _VertexShaderOk; 00873 } |
|
Definition at line 3010 of file landscape.cpp. References _RootNewLeaves, NLMISC::CBlockMemory< CTessFace >::allocate(), NL3D::CTessFacePListNode::linkInPList(), and TessFaceAllocator. Referenced by NL3D::CPatch::makeRoots(), NL3D::CTessFace::split(), and NL3D::CTessFace::splitRectangular().
03011 { 03012 // allcoate the face. 03013 CTessFace *face= TessFaceAllocator.allocate(); 03014 03015 // for refine() mgt, append the face to the list of newLeaves, so they will be tested in refine() 03016 face->linkInPList(_RootNewLeaves); 03017 03018 return face; 03019 } |
|
Definition at line 3034 of file landscape.cpp. References NLMISC::CBlockMemory< CTessFarVertex >::allocate(), and TessFarVertexAllocator. Referenced by NL3D::CTessFace::split(), and NL3D::CTessFace::splitRectangular().
03035 { 03036 return TessFarVertexAllocator.allocate(); 03037 } |
|
Definition at line 3028 of file landscape.cpp. References NLMISC::CBlockMemory< CTessNearVertex >::allocate(), and TessNearVertexAllocator. Referenced by NL3D::CTessFace::allocTileUv().
03029 { 03030 return TessNearVertexAllocator.allocate(); 03031 } |
|
Definition at line 3022 of file landscape.cpp. References NLMISC::CBlockMemory< CTessVertex >::allocate(), and TessVertexAllocator. Referenced by NL3D::CTessFace::split(), NL3D::CTessFace::splitRectangular(), and NL3D::CTessFace::unbind().
03023 { 03024 return TessVertexAllocator.allocate(); 03025 } |
|
Definition at line 3046 of file landscape.cpp. References NLMISC::CBlockMemory< CTileFace >::allocate(), and TileFaceAllocator. Referenced by NL3D::CTessFace::buildTileFaces().
03047 { 03048 return TileFaceAllocator.allocate(); 03049 } |
|
Definition at line 3040 of file landscape.cpp. References NLMISC::CBlockMemory< CTileMaterial >::allocate(), and TileMaterialAllocator.
03041 { 03042 return TileMaterialAllocator.allocate(); 03043 } |
|
This is especially for Pacs. Each Vertex->EndPos which is not a corner of a patch is set to the mean of its 2 shared Patchs. NB: Works with special cases of rectangular patchs and binded patchs. Definition at line 2939 of file landscape.cpp. Referenced by NL3D::CLandscapeModel::profileRender().
02940 { 02941 // TODO yoyo: new Far mgt profile 02942 /* 02943 std::map<CVector2f, CTextureFarLevelInfo > levelFarMap; 02944 02945 nlinfo("***** Landscape TextureFar Profile. NumTextureFar= %d", _TextureFars.size()); 02946 // Profile Texture Allocate 02947 ItSPRenderPassVector itFar; 02948 uint totalMemUsage= 0; 02949 for(itFar= _TextureFars.begin(); itFar!= _TextureFars.end(); itFar++) 02950 { 02951 CPatchRdrPass &pass= **itFar; 02952 CTextureFar *textureFar= safe_cast<CTextureFar*>((ITexture*)pass.TextureDiffuse); 02953 02954 // Info 02955 uint memUsage= textureFar->getPatchWidth()*textureFar->getPatchHeight()*NL_NUM_FAR_PATCHES_BY_TEXTURE*2; 02956 nlinfo(" * Patch Texture Size: (%d,%d) => :%d bytes for %d patchs", 02957 textureFar->getPatchWidth(), textureFar->getPatchHeight(), 02958 memUsage, NL_NUM_FAR_PATCHES_BY_TEXTURE); 02959 totalMemUsage+= memUsage; 02960 02961 // Profile Texture Far Allocated 02962 nlinfo(" * NumberOf Patch in the texture:%d", textureFar->getPatchCount()); 02963 02964 // Profile currently used Patchs 02965 uint numRdrPatch= 0; 02966 CPatch *pa= pass.getRdrPatchFar0(); 02967 while(pa) 02968 { 02969 numRdrPatch++; 02970 pa= pa->getNextFar0ToRdr(); 02971 } 02972 pa= pass.getRdrPatchFar1(); 02973 while(pa) 02974 { 02975 numRdrPatch++; 02976 pa= pa->getNextFar1ToRdr(); 02977 } 02978 nlinfo(" * NumberOf Patch in frustum for this texture (Far0+Far1):%d", numRdrPatch); 02979 02980 // regroup by level 02981 CVector2f sizeLevel; 02982 sizeLevel.x= (float)textureFar->getPatchWidth(); 02983 sizeLevel.y= (float)textureFar->getPatchHeight(); 02984 levelFarMap[sizeLevel].NumUsedPatchs+= textureFar->getPatchCount(); 02985 levelFarMap[sizeLevel].NumTextures++; 02986 } 02987 02988 nlinfo("***** Landscape TextureFar Level Profile. TotalVideoMemory= %d", totalMemUsage); 02989 std::map<CVector2f, CTextureFarLevelInfo >::iterator itLevelFar= levelFarMap.begin(); 02990 while(itLevelFar!=levelFarMap.end()) 02991 { 02992 nlinfo(" * Level PatchSize: (%d, %d). Total NumberOf Patch: %d. Use Percentage: %d %%", 02993 (uint)itLevelFar->first.x, (uint)itLevelFar->first.y, itLevelFar->second.NumUsedPatchs, 02994 100*itLevelFar->second.NumUsedPatchs/(itLevelFar->second.NumTextures*NL_NUM_FAR_PATCHES_BY_TEXTURE) ); 02995 02996 itLevelFar++; 02997 } 02998 */ 02999 } |
|
Definition at line 3681 of file landscape.cpp. References _ShadowPolyReceiver, and NL3D::CShadowPolyReceiver::render(). Referenced by NL3D::CLandscapeModel::receiveShadowMap().
03682 { 03683 /* substract the PZB from all coordinates. Must add a small Height value because 03684 The rendered Triangles may be computed with VertexProgram, but _ShadowPolyReceiver 03685 does not. => there is a small float difference at the end 03686 Even if same vertex is produced in theory, VertexProgram may cause 2 precision problems: 03687 1/ On NVidia, even with a simple matrix mul VP, the precision result is not the same 03688 2/ Our Landscape VP is not a simple matrix mul. Lot of vertex mul/add are done fpr geomorphs 03689 */ 03690 _ShadowPolyReceiver.render(drv, const_cast<CMaterial&>(shadowMat), shadowMap, casterPos, CVector(0,0,0.02f)-pzb); 03691 } |
|
Definition at line 2048 of file landscape.cpp. References _TextureNears, NL3D::NbTileLightMapByTexture, nlassert, NL3D::CTextureNear::refillRect(), NL3D::CPatchRdrPass::TextureDiffuse, and uint. Referenced by NL3D::CPatch::updateTessBlockLighting().
02049 { 02050 uint id, textNum; 02051 02052 // Get the id local in the texture. 02053 textNum= tileLightMapId / NbTileLightMapByTexture; 02054 id= tileLightMapId % NbTileLightMapByTexture; 02055 nlassert(textNum>=0 && textNum<_TextureNears.size()); 02056 02057 // get a ptr on the texture. 02058 CPatchRdrPass *nearRdrPass= _TextureNears[textNum]; 02059 CTextureNear *nearText= (CTextureNear*)(ITexture*)nearRdrPass->TextureDiffuse; 02060 02061 // refill this tile 02062 nearText->refillRect(id, map); 02063 } |
|
Refine/Geomorph the tesselation of the landscape. Definition at line 605 of file landscape.cpp. References _MergePriorityList, _OldRefineCenter, _OldRefineCenterSetuped, _RefineMode, _RootNewLeaves, _SplitPriorityList, _VegetableBlockList, _VegetableManager, NL3D::CTessFacePListNode::appendPList(), NL3D::CTessList< CLandscapeVegetableBlock >::begin(), H_AUTO, NL3D::CTessNodeList::Next, NL3D::CTessFacePListNode::nextInPList(), NL3D_PROFILE_LAND_ADD, NL3D_PROFILE_LAND_SET, NLMISC::OptFastFloorBegin(), NLMISC::OptFastFloorEnd(), NL3D::ProfNMerges, NL3D::ProfNRefineComputeFaces, NL3D::ProfNRefineFaces, NL3D::ProfNRefineInTileTransition, NL3D::ProfNRefineLeaves, NL3D::ProfNRefineWithLowDistance, NL3D::ProfNSplits, NL3D::ProfNSplitsPass, NL3D::CTessFacePriorityList::shift(), NL3D::CTessFacePriorityList::shiftAll(), unlockBuffers(), NL3D::CLandscapeVegetableBlock::update(), updateGlobalsAndLockBuffers(), NL3D::CVegetableManager::updateLighting(), NL3D::CTessFace::updateRefineMerge(), NL3D::CTessFace::updateRefineSplit(), and updateTessBlocksFaceVector(). Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
00606 { 00607 NL3D_PROFILE_LAND_SET(ProfNRefineFaces, 0); 00608 NL3D_PROFILE_LAND_SET(ProfNRefineComputeFaces, 0); 00609 NL3D_PROFILE_LAND_SET(ProfNRefineLeaves, 0); 00610 NL3D_PROFILE_LAND_SET(ProfNSplits, 0); 00611 NL3D_PROFILE_LAND_SET(ProfNMerges, 0); 00612 NL3D_PROFILE_LAND_SET(ProfNRefineInTileTransition, 0); 00613 NL3D_PROFILE_LAND_SET(ProfNRefineWithLowDistance, 0); 00614 NL3D_PROFILE_LAND_SET(ProfNSplitsPass, 0); 00615 00616 if(!_RefineMode) 00617 return; 00618 00619 // Update the priority list. 00620 // ========================== 00621 CTessFacePListNode rootSplitTessFaceToUpdate; 00622 CTessFacePListNode rootMergeTessFaceToUpdate; 00623 if( !_OldRefineCenterSetuped ) 00624 { 00625 // If never refine, and setup OldRefineCetner 00626 _OldRefineCenterSetuped= true; 00627 _OldRefineCenter= refineCenter; 00628 00629 // then shift all faces 00630 _SplitPriorityList.shiftAll(rootSplitTessFaceToUpdate); 00631 _MergePriorityList.shiftAll(rootMergeTessFaceToUpdate); 00632 } 00633 else 00634 { 00635 // else, compute delta between positions 00636 CVector diff= refineCenter - _OldRefineCenter; 00637 _OldRefineCenter= refineCenter; 00638 00639 // and shift according to distance of deplacement. 00640 _SplitPriorityList.shift(diff, rootSplitTessFaceToUpdate); 00641 _MergePriorityList.shift(diff, rootMergeTessFaceToUpdate); 00642 } 00643 00644 00645 // Refine Faces which may need it. 00646 // ========================== 00647 // Update globals 00648 updateGlobalsAndLockBuffers (refineCenter); 00649 // NB: refine may change vertices in VB in visible patchs => buffers are locked. 00650 00651 // Increment the update date. 00652 CLandscapeGlobals::CurrentDate++; 00653 00654 // Because CTessFacePriorityList::insert use it. 00655 NLMISC::OptFastFloorBegin(); 00656 00657 /* While there is still face in list, update them 00658 NB: updateRefine() always insert the face in _***PriorityList, so face is removed from 00659 root***TessFaceToUpdate list. 00660 NB: it is possible ( with enforced merge() ) that faces dissapears from root***TessFaceToUpdate list 00661 before they are traversed here. It is why we must use a Circular list system, and not an array of elements. 00662 Basically. TessFaces are ALWAYS in a list, either in one of the entry list in _***PriorityList, or in 00663 root***TessFaceToUpdate list. 00664 00665 It is newTessFace() and deleteTessFace() which insert/remove the nodes in the list. 00666 */ 00667 // Update the Merge priority list. 00668 while( rootMergeTessFaceToUpdate.nextInPList() != &rootMergeTessFaceToUpdate ) 00669 { 00670 // Get the face. 00671 CTessFace *face= static_cast<CTessFace*>(rootMergeTessFaceToUpdate.nextInPList()); 00672 00673 // update the refine of this face. This may lead in deletion (merge) of other faces which are still in 00674 // root***TessFaceToUpdate, but it's work. 00675 face->updateRefineMerge(); 00676 } 00677 00678 00679 // Update the Split priority list. 00680 do 00681 { 00682 NL3D_PROFILE_LAND_ADD(ProfNSplitsPass, 1); 00683 00684 // Append the new leaves, to the list of triangles to update 00685 rootSplitTessFaceToUpdate.appendPList(_RootNewLeaves); 00686 00687 // While triangle to test for split exists 00688 while( rootSplitTessFaceToUpdate.nextInPList() != &rootSplitTessFaceToUpdate ) 00689 { 00690 // Get the face. 00691 CTessFace *face= static_cast<CTessFace*>(rootSplitTessFaceToUpdate.nextInPList()); 00692 00693 // update the refine of this face. 00694 face->updateRefineSplit(); 00695 } 00696 00697 } 00698 // do it until we are sure no more split is needed, ie no more faces are created 00699 while( _RootNewLeaves.nextInPList() != &_RootNewLeaves ); 00700 00701 // Because CTessFacePriorityList::insert use it. 00702 NLMISC::OptFastFloorEnd(); 00703 00704 00705 // Before unlockBuffers, test for vegetable IG creation. 00706 { 00707 H_AUTO( NL3D_Vegetable_Update ); 00708 00709 // Because CLandscapeVegetableBlock::update() use OptFastFloor.. 00710 NLMISC::OptFastFloorBegin(); 00711 00712 // For each vegetableBlock, test IG creation 00713 CLandscapeVegetableBlock *vegetBlock= _VegetableBlockList.begin(); 00714 for(;vegetBlock!=NULL; vegetBlock= (CLandscapeVegetableBlock*)vegetBlock->Next) 00715 { 00716 vegetBlock->update(refineCenter, _VegetableManager); 00717 } 00718 00719 // update lighting for vegetables 00720 _VegetableManager->updateLighting(); 00721 00722 // Stop fastFloor optim. 00723 NLMISC::OptFastFloorEnd(); 00724 } 00725 00726 00727 // Must realase VB Buffers 00728 unlockBuffers(); 00729 00730 // refine() may cause change in faces in visible patchs. 00731 updateTessBlocksFaceVector(); 00732 00733 } |
|
Refine/Geomorph ALL the tesselation of the landscape, from the view point refineCenter. Even if !RefineMode.
Definition at line 737 of file landscape.cpp. References NL3D::ItZoneMap, unlockBuffers(), updateGlobalsAndLockBuffers(), updateTessBlocksFaceVector(), and Zones. Referenced by NL3D::CZoneLighter::addTriangles(), NL3D::CInstanceLighter::addTriangles(), and NL3D::CZoneLighter::buildZoneInformation().
00738 { 00739 // -1. Update globals 00740 updateGlobalsAndLockBuffers (refineCenter); 00741 // NB: refineAll may change vertices in VB in visible patchs => buffers are locked. 00742 00743 // Increment the update date. 00744 CLandscapeGlobals::CurrentDate++; 00745 00746 for(ItZoneMap it= Zones.begin();it!=Zones.end();it++) 00747 { 00748 (*it).second->refineAll(); 00749 } 00750 00751 // Must realase VB Buffers 00752 unlockBuffers(); 00753 00754 // refineAll() may cause change in faces in visible patchs. 00755 updateTessBlocksFaceVector(); 00756 } |
|
Definition at line 1772 of file landscape.cpp. References NL3D::CLandscape::CTileInfo::AdditiveRdrPass, NL3D::CLandscape::CTileInfo::DiffuseRdrPass, nlassert, NL3D::CPatchRdrPass::RefCount, TileInfos, and uint16. Referenced by releaseTiles().
01773 { 01774 CTileInfo *tileInfo; 01775 tileInfo= TileInfos[tileId]; 01776 nlassert(tileInfo!=NULL); 01777 01778 // "Release" the rdr pass. 01779 if(tileInfo->AdditiveRdrPass) 01780 tileInfo->AdditiveRdrPass->RefCount--; 01781 if(tileInfo->DiffuseRdrPass) 01782 tileInfo->DiffuseRdrPass->RefCount--; 01783 01784 delete tileInfo; 01785 TileInfos[tileId]= NULL; 01786 } |
|
Definition at line 2026 of file landscape.cpp. References _NFreeLightMaps, _TextureNears, _ULTotalNearPixels, NL3D::NbTileLightMapByTexture, NL_TILE_LIGHTMAP_SIZE, nlassert, NL3D::CTextureNear::releaseTile(), NL3D::CPatchRdrPass::TextureDiffuse, and uint. Referenced by NL3D::CPatch::releaseTileLightMap().
02027 { 02028 uint id, textNum; 02029 02030 // Get the id local in the texture. 02031 textNum= tileLightMapId / NbTileLightMapByTexture; 02032 id= tileLightMapId % NbTileLightMapByTexture; 02033 nlassert(textNum>=0 && textNum<_TextureNears.size()); 02034 02035 // Release the tile in this texture. 02036 CPatchRdrPass *nearRdrPass= _TextureNears[textNum]; 02037 CTextureNear *nearText= (CTextureNear*)(ITexture*)nearRdrPass->TextureDiffuse; 02038 nearText->releaseTile(id); 02039 _NFreeLightMaps++; 02040 02041 // updateLighting 02042 // Decrement number of pixels to update for near. 02043 _ULTotalNearPixels-= NL_TILE_LIGHTMAP_SIZE*NL_TILE_LIGHTMAP_SIZE; 02044 } |
|
Force a range of tiles to be loaded in the driver...
Definition at line 1912 of file landscape.cpp. References ItTileRdrPassSet, releaseTile(), sint, TileInfos, TileRdrPassSet, and uint16. Referenced by initTileBank().
01913 { 01914 // release tiles. 01915 for(sint tileId= tileStart; tileId<tileStart+nbTiles; tileId++) 01916 { 01917 CTileInfo *tile= TileInfos[tileId]; 01918 if(tile!=NULL) 01919 { 01920 releaseTile(tileId); 01921 } 01922 } 01923 01924 // For all rdrpass, release one that are no more referenced. 01925 ItTileRdrPassSet it; 01926 for(it= TileRdrPassSet.begin(); it!=TileRdrPassSet.end();) 01927 { 01928 // If no more tile access the rdrpass, delete it. 01929 if((*it).RefCount==0) 01930 { 01931 ItTileRdrPassSet itDel=it++; 01932 TileRdrPassSet.erase(itDel); 01933 } 01934 else 01935 it++; 01936 } 01937 01938 // Textures are automaticly deleted by smartptr, but not their entry int the map (TileTextureMap). 01939 // => doesn't matter since findTileTexture() manages this case. 01940 // And the memory overhead is not a problem (we talk about pointers). 01941 } |
|
This method remove all PointLights in all Zones, and hence reset TileLightInfluences. Definition at line 3298 of file landscape.cpp. References NL3D::ItZoneMap, NL3D::CPatch::resetTileLightInfluences(), sint, and Zones.
03299 { 03300 for(ItZoneMap it= Zones.begin();it!=Zones.end();it++) 03301 { 03302 // for all patch. 03303 sint N= (*it).second->getNumPatchs(); 03304 for(sint i=0;i<N;i++) 03305 { 03306 // Clear TileLightInfluences 03307 CPatch *pa= ((*it).second)->getPatch(i); 03308 pa->resetTileLightInfluences(); 03309 } 03310 03311 // Remove all PointLights. 03312 (*it).second->_PointLightArray.clear(); 03313 } 03314 03315 } |
|
Definition at line 3669 of file landscape.cpp. References _ShadowPolyReceiver, NL3D::CShadowPolyReceiver::removeTriangle(), and NL3D::CTessFace::ShadowMapTriId. Referenced by NL3D::CPatch::removeFaceFromTileRenderList().
03670 { 03671 if(face->ShadowMapTriId!=-1) 03672 { 03673 _ShadowPolyReceiver.removeTriangle(face->ShadowMapTriId); 03674 // set NULL Id. 03675 face->ShadowMapTriId=-1; 03676 } 03677 } |
|
remove a zone by its unique Id. The zone is release()-ed (disconnected), then deleted.
Definition at line 447 of file landscape.cpp. References _PatchQuadGrid, NL3D::CQuadGrid< CPatchIdentEx >::begin(), NL3D::CQuadGrid< CPatchIdentEx >::clearSelection(), NL3D::CQuadGrid< CPatchIdentEx >::end(), NL3D::CQuadGrid< CPatchIdentEx >::erase(), NLMISC::CAABBoxExt::getAABBox(), NLMISC::CAABBox::getHalfSize(), NLMISC::CAABBox::getMax(), NLMISC::CAABBox::getMin(), NL3D::CZone::getNumPatchs(), NL3D::CZone::getZoneBB(), NL3D::CZone::getZoneId(), nlassert, NL3D::CZone::release(), NL3D::CQuadGrid< CPatchIdentEx >::select(), NLMISC::CAABBox::setHalfSize(), sint, uint16, unlockBuffers(), updateGlobalsAndLockBuffers(), updateTessBlocksFaceVector(), and Zones. Referenced by clear(), NL3D::CLandscapeUser::refreshZonesAround(), and NL3D::CLandscapeUser::removeAllZones().
00448 { 00449 // -1. Update globals 00450 updateGlobalsAndLockBuffers (CVector::Null); 00451 // NB: remove a zone may change vertices in VB in visible patchs => buffers are locked. 00452 00453 // find the zone. 00454 if(Zones.find(zoneId)==Zones.end()) 00455 { 00456 unlockBuffers(); 00457 return false; 00458 } 00459 CZone *zone= Zones[zoneId]; 00460 00461 00462 // delete patchs from this zone to the quadgrid. 00463 // use the quadgrid itself to find where patch are. do this using bbox of zone. 00464 CAABBox zoneBBForErase= zone->getZoneBB().getAABBox(); 00465 // Avoid precision problems by enlarging a little bbox size of zone for erase 00466 zoneBBForErase.setHalfSize( zoneBBForErase.getHalfSize() * 1.1f); 00467 // select iterators in the area of this zone. 00468 _PatchQuadGrid.clearSelection(); 00469 _PatchQuadGrid.select(zoneBBForErase.getMin(), zoneBBForErase.getMax()); 00470 // for each patch, remove it if from deleted zone. 00471 CQuadGrid<CPatchIdentEx>::CIterator it; 00472 sint nPatchRemoved= 0; 00473 for(it= _PatchQuadGrid.begin(); it!= _PatchQuadGrid.end();) 00474 { 00475 // if the patch belong to the zone to remove 00476 if( (*it).ZoneId== zone->getZoneId() ) 00477 { 00478 // remove from the quadgrid. 00479 it= _PatchQuadGrid.erase(it); 00480 nPatchRemoved++; 00481 } 00482 else 00483 it++; 00484 } 00485 // verify we have removed all patch in the quadGrid for this zone 00486 nlassert(nPatchRemoved==zone->getNumPatchs()); 00487 00488 00489 // remove the zone. 00490 zone->release(Zones); 00491 delete zone; 00492 00493 // Must realase VB Buffers 00494 unlockBuffers(); 00495 00496 // because of forceMerge() at unbind, removeZone() can cause change in faces in other (visible) zones. 00497 updateTessBlocksFaceVector(); 00498 00499 return true; 00500 } |
|
Render the landscape. A more precise clip is made on TessBlocks. pyramid should be the same as one passed to clip(). For optimisation, this pyramid should contains only the Left/Right and Top/Bottom clip planes, in this order.
Definition at line 939 of file landscape.cpp. References _DLMGlobalVegetableColor, _Far0VB, _Far1VB, _PatchDLMContextList, _PointLightDiffuseMaterial, _PZBModelPosition, _RenderMustRefillVB, _TextureDLM, _TextureFars, _TextureNears, _TileVB, _VegetableManager, _VertexShaderOk, _VPThresholdChange, NL3D::CLandscapeVBAllocator::activate(), NLMISC::CRGBA::B, NL3D::CTessList< CPatchDLMContext >::begin(), NL3D::CPatchRdrPass::clearAllRenderList(), NL3D::CPatchDLMContext::compileLighting(), NL3D::CPatch::computeSoftwareGeomorphAndAlpha(), NL3D::drawPassTriArray(), FarMaterial, NL3D::CPatch::fillVBIfVisible(), NLMISC::CRGBA::G, NL3D::CPatch::getFar0(), NL3D::CPatch::getFar1(), NL3D::CRdrTileId::getNext(), NL3D::CPatch::getNextFar0ToRdr(), NL3D::CPatch::getNextFar1ToRdr(), NL3D::CPatchDLMContext::getPatch(), NL3D::CPatchRdrPass::getRdrPatchFar0(), NL3D::CPatchRdrPass::getRdrPatchFar1(), NL3D::CPatchRdrPass::getRdrTileRoot(), NL3D::CMaterial::getTexEnvMode(), NL3D::CPatch::getTileMaterialRefCount(), H_AFTER, H_BEFORE, NL3D::initPassTriArray(), NL3D::CPatch::isRenderClipped(), isVegetableActive(), ItSPRenderPassVector, ItTileRdrPassSet, NL3D::ItZoneMap, lockBuffers(), min, NL3D::CTessNodeList::Next, NL3D::NL3D_LandscapeGlobals_PassNTri, NL3D_MAX_TILE_PASS, NL3D_PROFILE_LAND_SET, NL3D_TESSBLOCK_NUM_CLIP_PLANE, NL3D_TILE_PASS_ADD, NL3D_TILE_PASS_LIGHTMAP, NL3D_TILE_PASS_RGB0, NL3D_TILE_PASS_RGB1, NL3D_TILE_PASS_RGB2, nlassert, nlstop, NL3D::IDriver::profileSetupedMaterials(), NL3D::ProfNFar0SetupMaterial, NL3D::ProfNFar1SetupMaterial, NL3D::ProfNPatchRdrFar0, NL3D::ProfNPatchRdrFar1, NL3D::ProfNRdrFar0, NL3D::ProfNRdrFar1, NL3D::ProfNRdrTile, NL3D::ProfNTileSetupMaterial, NLMISC::CRGBA::R, NL3D::CLandscapeVBAllocator::reallocationOccurs(), NL3D::CVegetableManager::render(), NL3D::CPatch::renderFar0(), NL3D::CPatch::renderFar1(), NL3D::CTileMaterial::renderTile(), NL3D::CTileMaterial::renderTilePassLightmap(), NL3D::CTileMaterial::renderTilePassRGB0(), NL3D::CVegetableManager::resetNumVegetableFaceRendered(), NL3D::CLandscapeVBAllocator::resetReallocation(), NL3D::CMaterial::setBlend(), NL3D::CMaterial::setBlendFunc(), NL3D::IDriver::setConstant(), NL3D::IDriver::setConstantMatrix(), NL3D::CMaterial::setTexEnvMode(), NL3D::CMaterial::setTexture(), sint, synchronizeATIVBHards(), NL3D::CMaterial::texConstantColor(), NL3D::CMaterial::texEnvArg0Alpha(), NL3D::CMaterial::texEnvArg0RGB(), NL3D::CMaterial::texEnvArg1Alpha(), NL3D::CMaterial::texEnvArg1RGB(), NL3D::CMaterial::texEnvOpAlpha(), NL3D::CMaterial::texEnvOpRGB(), NL3D::CPatchRdrPass::TextureAlpha, NL3D::CPatchRdrPass::TextureDiffuse, NL3D::CRdrTileId::TileMaterial, TileMaterial, TileRdrPassSet, uint, uint8, unlockBuffers(), updateGlobalsAndLockBuffers(), v, and Zones. Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
00940 { 00941 IDriver *driver= _Driver; 00942 nlassert(driver); 00943 00944 // Increment the update date for preRender. 00945 CLandscapeGlobals::CurrentRenderDate++; 00946 00947 00948 ItZoneMap it; 00949 sint i; 00950 ItTileRdrPassSet itTile; 00951 ItSPRenderPassVector itFar; 00952 00953 // Yoyo: profile. 00954 NL3D_PROFILE_LAND_SET(ProfNRdrFar0, 0); 00955 NL3D_PROFILE_LAND_SET(ProfNRdrFar1, 0); 00956 NL3D_PROFILE_LAND_SET(ProfNPatchRdrFar0, 0); 00957 NL3D_PROFILE_LAND_SET(ProfNPatchRdrFar1, 0); 00958 for(i=0;i<NL3D_MAX_TILE_PASS;i++) 00959 { 00960 NL3D_PROFILE_LAND_SET(ProfNRdrTile[i], 0); 00961 } 00962 00963 00964 // -2. Update globals 00965 //==================== 00966 updateGlobalsAndLockBuffers (refineCenter); 00967 // NB: render may change vertices in VB in visible patchs => buffers are locked. 00968 00969 00970 // -1. clear all PatchRenderPass renderList 00971 //=================== 00972 00973 H_BEFORE( NL3D_Landscape_Render_Clear ); 00974 00975 // Fars. 00976 for(itFar= _TextureFars.begin(); itFar!= _TextureFars.end(); itFar++) 00977 { 00978 CPatchRdrPass &pass= **itFar; 00979 // clear list. 00980 pass.clearAllRenderList(); 00981 } 00982 00983 // Tiles. 00984 for(itTile= TileRdrPassSet.begin(); itTile!= TileRdrPassSet.end(); itTile++) 00985 { 00986 CPatchRdrPass &pass= const_cast<CPatchRdrPass&>(*itTile); 00987 // clear list. 00988 pass.clearAllRenderList(); 00989 } 00990 00991 // Lightmaps. 00992 for(sint lightRdrPass=0; lightRdrPass<(sint)_TextureNears.size(); lightRdrPass++) 00993 { 00994 CPatchRdrPass &pass= *_TextureNears[lightRdrPass]; 00995 // clear list. 00996 pass.clearAllRenderList(); 00997 } 00998 00999 H_AFTER( NL3D_Landscape_Render_Clear ); 01000 01001 // 0. preRender pass. 01002 //=================== 01003 01004 H_BEFORE( NL3D_Landscape_Render_PreRender ); 01005 01006 // change Far0 / Far1. 01007 // Clip TessBlocks against pyramid and Far Limit. 01008 for(i=0; i<NL3D_TESSBLOCK_NUM_CLIP_PLANE; i++) 01009 { 01010 CTessBlock::CurrentPyramid[i]= pyramid[i]; 01011 } 01012 // Update VB with change of Far0 / Far1. 01013 for(it= Zones.begin();it!=Zones.end();it++) 01014 { 01015 (*it).second->preRender(); 01016 } 01017 01018 H_AFTER( NL3D_Landscape_Render_PreRender ); 01019 H_BEFORE( NL3D_Landscape_Render_Refill ); 01020 01021 // Reallocation Mgt. If any of the VB is reallocated, we must refill it entirely. 01022 // NB: all VBs are refilled entirely. It is not optimal (maybe 3* too slow), but reallocation are supposed 01023 // to be very rare. 01024 if( _Far0VB.reallocationOccurs() || _Far1VB.reallocationOccurs() || _TileVB.reallocationOccurs() ) 01025 _RenderMustRefillVB= true; 01026 01027 // VertexProgram dependency on RefineThreshold Management. If VertexShader, and if the refineThreshold has 01028 // changed since the last time, we must refill All the VB, because data are out of date. 01029 if( _VertexShaderOk && _VPThresholdChange ) 01030 { 01031 _VPThresholdChange= false; 01032 _RenderMustRefillVB= true; 01033 } 01034 01035 // If we must refill the VB (for any reason). 01036 if(_RenderMustRefillVB ) 01037 { 01038 // Ok, ok, we refill All the VB with good data. 01039 _RenderMustRefillVB= false; 01040 01041 // First reset the flag, so fillVB() will effectively fill the VB. 01042 _Far0VB.resetReallocation(); 01043 _Far1VB.resetReallocation(); 01044 _TileVB.resetReallocation(); 01045 01046 // Then recompute good VBInfo (those in CurrentVBInfo are false!!). 01047 // Do it by unlocking then re-locking Buffers. 01048 unlockBuffers(); 01049 lockBuffers(); 01050 01051 // Finally, fill the VB for all patchs visible. 01052 for(it= Zones.begin();it!=Zones.end();it++) 01053 { 01054 if((*it).second->ClipResult==CZone::ClipOut) 01055 continue; 01056 for(sint i=0;i<(*it).second->getNumPatchs(); i++) 01057 { 01058 CPatch *patch= (*it).second->getPatch(i); 01059 patch->fillVBIfVisible(); 01060 } 01061 } 01062 } 01063 01064 H_AFTER( NL3D_Landscape_Render_Refill ); 01065 H_BEFORE( NL3D_Landscape_Render_SoftGeomorph ); 01066 01067 // If software GeoMorph / Alpha Transition (no VertexShader), do it now. 01068 if(!_VertexShaderOk) 01069 { 01070 // For all patch visible, compute geomoprh and alpha in software. 01071 for(it= Zones.begin();it!=Zones.end();it++) 01072 { 01073 if((*it).second->ClipResult==CZone::ClipOut) 01074 continue; 01075 for(sint i=0;i<(*it).second->getNumPatchs(); i++) 01076 { 01077 CPatch *patch= (*it).second->getPatch(i); 01078 // If visible, compute Geomorph And Alpha 01079 patch->computeSoftwareGeomorphAndAlpha(); 01080 } 01081 } 01082 01083 /* 01084 Optim note: here, lot of vertices are 01085 1/ geomorphed twice (vertices on edges of patchs) 01086 2/ vertices are geomorphed, but not used (because o the Tessblock clip), 01087 because lot of vertices used by faces in small TessBlocks are still in MasterBlock. 01088 01089 Some tries have been made to solve this, but result are even worse (2 times or more), because: 01090 1/ 01091 - does not really matter edges of patchs (and corner) because the majority is in interior of patch. 01092 - in this case, we need to reset all the flags which is very costly (reparse all zones...) . 01093 2/ Except for the old CTessBlockEdge management which not solve all the thing, the other solution is 01094 to test all faces not clipped (on a per TessBlock basis), to compute only vertices needed. 01095 But in this cases, result are worse, maybe because there is 6 times more tests, and with bad BTB cache. 01096 */ 01097 } 01098 01099 H_AFTER( NL3D_Landscape_Render_SoftGeomorph ); 01100 01101 // Must realase VB Buffers Now!! The VBuffers are now OK! 01102 // NB: no parallelism is made between 3dCard and Fill of vertices. 01103 // We Suppose Fill of vertices is rare, and so do not need to be parallelized. 01104 unlockBuffers(); 01105 01106 01107 // Special for ATI: only copy all VBs to VBHard one time per frame 01108 synchronizeATIVBHards(); 01109 01110 01111 // If VertexShader enabled, setup VertexProgram Constants. 01112 if(_VertexShaderOk) 01113 { 01114 // c[0..3] take the ModelViewProjection Matrix. 01115 driver->setConstantMatrix(0, IDriver::ModelViewProjection, IDriver::Identity); 01116 // c[4] take usefull constants. 01117 driver->setConstant(4, 0, 1, 0.5f, 0); 01118 // c[5] take RefineCenter 01119 driver->setConstant(5, refineCenter); 01120 // c[6] take info for Geomorph trnasition to TileNear. 01121 driver->setConstant(6, CLandscapeGlobals::TileDistFarSqr, CLandscapeGlobals::OOTileDistDeltaSqr, 0, 0); 01122 // c[8..11] take the ModelView Matrix. 01123 driver->setConstantMatrix(8, IDriver::ModelView, IDriver::Identity); 01124 // c[12] take the current landscape Center / delta Pos to apply 01125 driver->setConstant(12, _PZBModelPosition); 01126 } 01127 01128 01129 // 1. TileRender pass. 01130 //==================== 01131 01132 // Yoyo: profile 01133 NL3D_PROFILE_LAND_SET(ProfNTileSetupMaterial, driver->profileSetupedMaterials() ); 01134 H_BEFORE( NL3D_Landscape_Render_Tile ); 01135 01136 // First, update Dynamic Lighting for Near, ie multiply Dynamic Lightmap with UserColor, and upload to texture. 01137 // ================== 01138 CPatchDLMContext *dlmCtxPtr= _PatchDLMContextList->begin(); 01139 while(dlmCtxPtr!=NULL) 01140 { 01141 // do it only if the patch has some Near stuff to render, and if it is visible 01142 if(dlmCtxPtr->getPatch()->getFar0() == 0 01143 && !dlmCtxPtr->getPatch()->isRenderClipped() ) 01144 { 01145 // upload lightmap into textureDLM, modulating before with patch TileColor. 01146 // NB: no-op if both src and dst are already full black. 01147 dlmCtxPtr->compileLighting(CPatchDLMContext::ModulateTileColor); 01148 } 01149 01150 // next 01151 dlmCtxPtr= (CPatchDLMContext*)dlmCtxPtr->Next; 01152 } 01153 01154 01155 // Active VB. 01156 // ================== 01157 01158 // Active the good VB, and maybe activate the VertexProgram Nb 0. 01159 _TileVB.activate(0); 01160 01161 01162 // Render. 01163 // ================== 01164 // Before any render call. Set the global driver used to render. 01165 CLandscapeGlobals::PatchCurrentDriver= driver; 01166 01167 // Render Order. Must "invert", since initial order is NOT the render order. This is done because the lightmap pass 01168 // DO NOT have to do any renderTile(), since it is computed in RGB0 pass. 01169 nlassert(NL3D_MAX_TILE_PASS==5); 01170 static sint RenderOrder[NL3D_MAX_TILE_PASS]= {NL3D_TILE_PASS_RGB0, NL3D_TILE_PASS_RGB1, NL3D_TILE_PASS_RGB2, 01171 NL3D_TILE_PASS_LIGHTMAP, NL3D_TILE_PASS_ADD}; 01172 // For ALL pass.. 01173 for(i=0; i<NL3D_MAX_TILE_PASS; i++) 01174 { 01175 sint passOrder= RenderOrder[i]; 01176 01177 01178 // If VertexShader enabled, and if lightmap or post Add pass, must setup good VertexProgram 01179 if(_VertexShaderOk) 01180 { 01181 if(passOrder == NL3D_TILE_PASS_LIGHTMAP) 01182 { 01183 // Must activate the vertexProgram to take TexCoord2 to stage0 01184 _TileVB.activate(1); 01185 } 01186 else if(passOrder == NL3D_TILE_PASS_ADD) 01187 { 01188 // Must re-activate the standard VertexProgram 01189 _TileVB.activate(0); 01190 } 01191 } 01192 01193 01194 // Do add pass??? 01195 if((passOrder==NL3D_TILE_PASS_ADD) && !doTileAddPass) 01196 continue; 01197 01198 01199 // Setup common material for this pass. 01200 //============================= 01201 // Default: Replace envmode. 01202 TileMaterial.texEnvOpRGB(0, CMaterial::Replace); 01203 TileMaterial.texEnvArg0RGB(0, CMaterial::Texture, CMaterial::SrcColor); 01204 TileMaterial.texEnvOpAlpha(0, CMaterial::Replace); 01205 TileMaterial.texEnvArg0Alpha(0, CMaterial::Texture, CMaterial::SrcAlpha); 01206 // NB: important to set Replace and not modulate, because in case of VerexProgram enabled, 01207 // Diffuse o[COL0] is undefined. 01208 01209 // Copy from stage 0 to stage 1. 01210 TileMaterial.setTexEnvMode(1, TileMaterial.getTexEnvMode(0)); 01211 01212 // setup multitex / blending. 01213 if(passOrder==NL3D_TILE_PASS_RGB0) 01214 { 01215 // first pass, no blend. 01216 TileMaterial.setBlend(false); 01217 } 01218 else 01219 { 01220 TileMaterial.setBlend(true); 01221 switch(passOrder) 01222 { 01223 case NL3D_TILE_PASS_RGB1: 01224 case NL3D_TILE_PASS_RGB2: 01225 // alpha blending. 01226 TileMaterial.setBlendFunc(CMaterial::srcalpha, CMaterial::invsrcalpha); 01227 01228 // Must use a special envmode for stage1: "separateAlpha"!!. 01229 // keep the color from previous stage. 01230 TileMaterial.texEnvOpRGB(1, CMaterial::Replace); 01231 TileMaterial.texEnvArg0RGB(1, CMaterial::Previous, CMaterial::SrcColor); 01232 // take the alpha from current stage. 01233 TileMaterial.texEnvOpAlpha(1, CMaterial::Replace); 01234 TileMaterial.texEnvArg0Alpha(1, CMaterial::Texture, CMaterial::SrcAlpha); 01235 break; 01236 case NL3D_TILE_PASS_LIGHTMAP: 01237 // modulate alpha blending. 01238 TileMaterial.setBlendFunc(CMaterial::zero, CMaterial::srccolor); 01239 01240 // Setup the material envCombine so DynamicLightmap (stage 0) is added to static lightmap. 01241 TileMaterial.texEnvOpRGB(1, CMaterial::Add); 01242 TileMaterial.texEnvArg0RGB(1, CMaterial::Texture, CMaterial::SrcColor); 01243 TileMaterial.texEnvArg1RGB(1, CMaterial::Previous, CMaterial::SrcColor); 01244 01245 break; 01246 case NL3D_TILE_PASS_ADD: 01247 // Use srcalpha for src (and not ONE), since additive are blended with alpha Cte/AlphaTexture 01248 TileMaterial.setBlendFunc(CMaterial::srcalpha, CMaterial::one); 01249 01250 // for MAYBE LATER smooth night transition, setup Alpha cte of stage0, and setup alpha stage. 01251 TileMaterial.texEnvOpAlpha(0, CMaterial::Replace); 01252 TileMaterial.texEnvArg0Alpha(0, CMaterial::Constant, CMaterial::SrcAlpha); 01253 // Temp, just setup alpha to 1. 01254 TileMaterial.texConstantColor(0, CRGBA(255, 255, 255, 255)); 01255 01256 // Must use a special envmode for stage1: "separateAlpha"!!. 01257 // NB: it still works if The RdrPass has no texture. 01258 // keep the color from previous stage. 01259 TileMaterial.texEnvOpRGB(1, CMaterial::Replace); 01260 TileMaterial.texEnvArg0RGB(1, CMaterial::Previous, CMaterial::SrcColor); 01261 // modulate the alpha of current stage with previous 01262 TileMaterial.texEnvOpAlpha(1, CMaterial::Modulate); 01263 TileMaterial.texEnvArg0Alpha(1, CMaterial::Texture, CMaterial::SrcAlpha); 01264 TileMaterial.texEnvArg1Alpha(1, CMaterial::Previous, CMaterial::SrcAlpha); 01265 01266 break; 01267 default: 01268 nlstop; 01269 }; 01270 } 01271 // Reset the textures (so there is none in Addtive pass or in Lightmap). 01272 TileMaterial.setTexture(0, NULL); 01273 TileMaterial.setTexture(1, NULL); 01274 TileMaterial.setTexture(2, NULL); 01275 01276 01277 // Render All material RdrPass. 01278 //============================= 01279 // Special code for Lightmap and RGB0, for faster render. 01280 if(passOrder==NL3D_TILE_PASS_RGB0) 01281 { 01282 // RGB0 pass. 01283 ItTileRdrPassSet itTile; 01284 for(itTile= TileRdrPassSet.begin(); itTile!= TileRdrPassSet.end(); itTile++) 01285 { 01286 // Get a ref on the render pass. Const cast work because we only modify attribut from CPatchRdrPass 01287 // that don't affect the operator< of this class 01288 CPatchRdrPass &pass= const_cast<CPatchRdrPass&>(*itTile); 01289 01290 // Enlarge PassTriArray as needed 01291 initPassTriArray(pass); 01292 01293 // Setup Diffuse texture of the tile. 01294 TileMaterial.setTexture(0, pass.TextureDiffuse); 01295 01296 // Add triangles to array 01297 CRdrTileId *tileToRdr= pass.getRdrTileRoot(passOrder); 01298 while(tileToRdr) 01299 { 01300 // renderSimpleTriangles() with the material setuped. 01301 tileToRdr->TileMaterial->renderTilePassRGB0(); 01302 tileToRdr= (CRdrTileId*)tileToRdr->getNext(); 01303 } 01304 // Render triangles. 01305 drawPassTriArray(TileMaterial); 01306 } 01307 } 01308 else if(passOrder==NL3D_TILE_PASS_LIGHTMAP) 01309 { 01310 // Lightmap Pass. 01311 /* \todo yoyo: TODO_CLOUD: setup stage2, and setup texcoord generation. COMPLEX because of interaction 01312 with Dynamic LightMap 01313 */ 01314 01315 // Setup the Dynamic Lightmap into stage 0. 01316 TileMaterial.setTexture(0, _TextureDLM); 01317 01318 // if vertex shader not used. 01319 if(!_VertexShaderOk) 01320 { 01321 // special setup such that stage0 takes Uv2. 01322 driver->mapTextureStageToUV(0, 2); 01323 } 01324 // else VertexProgram map itself the good vertex Attribute to UV0. 01325 01326 01327 // Render All the lightmaps. 01328 for(sint lightRdrPass=0; lightRdrPass<(sint)_TextureNears.size(); lightRdrPass++) 01329 { 01330 CPatchRdrPass &pass= *_TextureNears[lightRdrPass]; 01331 01332 // Enlarge PassTriArray as needed 01333 initPassTriArray(pass); 01334 01335 // Setup Lightmap into stage1. Because we share UV with pass RGB0. So we use UV1. 01336 // Also, now stage0 is used for DynamicLightmap 01337 TileMaterial.setTexture(1, pass.TextureDiffuse); 01338 01339 // Add triangles to array 01340 CRdrTileId *tileToRdr= pass.getRdrTileRoot(passOrder); 01341 while(tileToRdr) 01342 { 01343 // renderSimpleTriangles() with the material setuped. 01344 tileToRdr->TileMaterial->renderTilePassLightmap(); 01345 tileToRdr= (CRdrTileId*)tileToRdr->getNext(); 01346 } 01347 // Render triangles. 01348 drawPassTriArray(TileMaterial); 01349 } 01350 01351 // if vertex shader not used. 01352 if(!_VertexShaderOk) 01353 { 01354 // Reset special stage/UV setup to normal behavior 01355 driver->mapTextureStageToUV(0, 0); 01356 } 01357 } 01358 else 01359 { 01360 // RGB1, RGB2, and ADD pass. 01361 01362 // Render Base, Transitions or Additives. 01363 01364 ItTileRdrPassSet itTile; 01365 for(itTile= TileRdrPassSet.begin(); itTile!= TileRdrPassSet.end(); itTile++) 01366 { 01367 // Get a ref on the render pass. Const cast work because we only modify attribut from CPatchRdrPass 01368 // that don't affect the operator< of this class 01369 CPatchRdrPass &pass= const_cast<CPatchRdrPass&>(*itTile); 01370 01371 // Enlarge PassTriArray as needed 01372 initPassTriArray(pass); 01373 01374 // Add triangles to array 01375 CRdrTileId *tileToRdr= pass.getRdrTileRoot(passOrder); 01376 while(tileToRdr) 01377 { 01378 // renderSimpleTriangles() with the material setuped. 01379 tileToRdr->TileMaterial->renderTile(passOrder); 01380 tileToRdr= (CRdrTileId*)tileToRdr->getNext(); 01381 } 01382 01383 // Pass not empty ? 01384 if(NL3D_LandscapeGlobals_PassNTri>0) 01385 { 01386 // Setup material. 01387 // Setup Diffuse texture of the tile. 01388 TileMaterial.setTexture(0, pass.TextureDiffuse); 01389 01390 // If transition tile, must enable the alpha for this pass. 01391 // NB: Additive pass may have pass.TextureAlpha==NULL 01392 TileMaterial.setTexture(1, pass.TextureAlpha); 01393 } 01394 01395 // Render triangles. 01396 drawPassTriArray(TileMaterial); 01397 } 01398 } 01399 } 01400 01401 // Yoyo: profile 01402 NL3D_PROFILE_LAND_SET(ProfNTileSetupMaterial, driver->profileSetupedMaterials()-ProfNTileSetupMaterial ); 01403 H_AFTER( NL3D_Landscape_Render_Tile ); 01404 01405 // 2. Far0Render pass. 01406 //==================== 01407 01408 // Yoyo: profile 01409 NL3D_PROFILE_LAND_SET(ProfNFar0SetupMaterial, driver->profileSetupedMaterials() ); 01410 H_BEFORE( NL3D_Landscape_Render_DLM ); 01411 01412 // First, update Dynamic Lighting for Far, ie multiply Dynamic Lightmap with TextureFar, and upload to texture. 01413 // ================== 01414 dlmCtxPtr= _PatchDLMContextList->begin(); 01415 while(dlmCtxPtr!=NULL) 01416 { 01417 // do it only if the patch has some Far stuff to render, and if it is visible 01418 if( (dlmCtxPtr->getPatch()->getFar0()>0 || dlmCtxPtr->getPatch()->getFar1()>0) 01419 && !dlmCtxPtr->getPatch()->isRenderClipped() ) 01420 { 01421 // upload lightmap into textureDLM, modulating before with patch TextureFar. 01422 // NB: no-op if both src and dst are already full black. 01423 dlmCtxPtr->compileLighting(CPatchDLMContext::ModulateTextureFar); 01424 } 01425 01426 // next 01427 dlmCtxPtr= (CPatchDLMContext*)dlmCtxPtr->Next; 01428 } 01429 01430 H_AFTER( NL3D_Landscape_Render_DLM ); 01431 H_BEFORE( NL3D_Landscape_Render_Far0 ); 01432 01433 // Active VB. 01434 // ================== 01435 01436 // Active the good VB, and maybe activate the std VertexProgram. 01437 _Far0VB.activate(0); 01438 01439 01440 // Render. 01441 // ================== 01442 01443 // Setup common material. 01444 FarMaterial.setBlend(false); 01445 // set the DLM texture. 01446 FarMaterial.setTexture(1, _TextureDLM); 01447 01448 // Render All material RdrPass0. 01449 itFar=_TextureFars.begin(); 01450 while (itFar!=_TextureFars.end()) 01451 { 01452 CPatchRdrPass &pass= **itFar; 01453 01454 // Enlarge PassTriArray as needed 01455 initPassTriArray(pass); 01456 01457 // Setup the material. 01458 FarMaterial.setTexture(0, pass.TextureDiffuse); 01459 // If the texture need to be updated, do it now. 01460 if(pass.TextureDiffuse && pass.TextureDiffuse->touched()) 01461 driver->setupTexture(*pass.TextureDiffuse); 01462 01463 // Add triangles to array 01464 CPatch *patchToRdr= pass.getRdrPatchFar0(); 01465 while(patchToRdr) 01466 { 01467 // renderSimpleTriangles() with the material setuped. 01468 patchToRdr->renderFar0(); 01469 patchToRdr= patchToRdr->getNextFar0ToRdr(); 01470 } 01471 // Render triangles. 01472 drawPassTriArray(FarMaterial); 01473 01474 // Next render pass 01475 itFar++; 01476 } 01477 01478 // Yoyo: profile 01479 NL3D_PROFILE_LAND_SET(ProfNFar0SetupMaterial, driver->profileSetupedMaterials()-ProfNFar0SetupMaterial ); 01480 H_AFTER( NL3D_Landscape_Render_Far0 ); 01481 01482 01483 // 3. Far1Render pass. 01484 //==================== 01485 01486 // Yoyo: profile 01487 NL3D_PROFILE_LAND_SET(ProfNFar1SetupMaterial, driver->profileSetupedMaterials() ); 01488 H_BEFORE( NL3D_Landscape_Render_Far1 ); 01489 01490 // Active VB. 01491 // ================== 01492 01493 // Active the good VB, and maybe activate the std VertexProgram. 01494 _Far1VB.activate(0); 01495 01496 01497 // Render 01498 // ================== 01499 01500 // Setup common material. 01501 FarMaterial.setBlend(true); 01502 // set the DLM texture. 01503 FarMaterial.setTexture(1, _TextureDLM); 01504 01505 01506 // Render All material RdrPass1. 01507 itFar=_TextureFars.begin(); 01508 while (itFar!=_TextureFars.end()) 01509 { 01510 CPatchRdrPass &pass= **itFar; 01511 01512 // Enlarge PassTriArray as needed 01513 initPassTriArray(pass); 01514 01515 // Setup the material. 01516 FarMaterial.setTexture(0, pass.TextureDiffuse); 01517 // If the texture need to be updated, do it now. 01518 if(pass.TextureDiffuse && pass.TextureDiffuse->touched()) 01519 driver->setupTexture(*pass.TextureDiffuse); 01520 01521 // Add triangles to array 01522 CPatch *patchToRdr= pass.getRdrPatchFar1(); 01523 while(patchToRdr) 01524 { 01525 // renderSimpleTriangles() with the material setuped. 01526 patchToRdr->renderFar1(); 01527 patchToRdr= patchToRdr->getNextFar1ToRdr(); 01528 } 01529 // Render triangles. 01530 drawPassTriArray(FarMaterial); 01531 01532 // Next render pass 01533 itFar++; 01534 } 01535 01536 // Yoyo: profile 01537 NL3D_PROFILE_LAND_SET(ProfNFar1SetupMaterial, driver->profileSetupedMaterials()-ProfNFar1SetupMaterial ); 01538 H_AFTER( NL3D_Landscape_Render_Far1 ); 01539 01540 01541 // 4. "Release" texture materials. 01542 //================================ 01543 FarMaterial.setTexture(0, NULL); 01544 FarMaterial.setTexture(1, NULL); 01545 FarMaterial.setTexture(2, NULL); 01546 FarMaterial.setTexture(3, NULL); 01547 TileMaterial.setTexture(0, NULL); 01548 TileMaterial.setTexture(1, NULL); 01549 TileMaterial.setTexture(2, NULL); 01550 TileMaterial.setTexture(3, NULL); 01551 01552 // To ensure no use but in render().. 01553 CLandscapeGlobals::PatchCurrentDriver= NULL; 01554 01555 // Desactive the vertex program (if anyone) 01556 if(_VertexShaderOk) 01557 driver->activeVertexProgram (NULL); 01558 01559 01560 // 5. Vegetable Management. 01561 //================================ 01562 01563 // First, update Dynamic Lighting for Vegetable, ie just copy. 01564 // ================== 01565 if(isVegetableActive()) 01566 { 01567 /* Actually we modulate the DLM with an arbitrary constant for this reason: 01568 Color of vegetable (ie their material) are NOT modulated with DLM. 01569 Doing this without using PixelShader / additional UVs seems to be impossible. 01570 And add new UVs (+700K in AGP) just for this is not worth the effort. 01571 01572 We prefer using a constant to simulate the "global vegetable color", which is a big trick. 01573 01574 Additionally, the vegetable take the diffuse lighting of landscape, which is 01575 false because it replaces the diffuse lighting it should have (ie with his own Normal and 01576 his own "global vegetable color") 01577 01578 We can't do anything for "correct normal vegetable", but it is possible to replace landscape 01579 material with vegetable material, by dividing _DLMGlobalVegetableColor by LandscapeDiffuseMaterial. 01580 This is a very approximate result because of CRGBA clamp, but it is acceptable. 01581 */ 01582 CRGBA vegetDLMCte; 01583 // the constant is _DLMGlobalVegetableColor / PointLightDiffuseMaterial 01584 uint v; 01585 v= (_DLMGlobalVegetableColor.R*256) / (_PointLightDiffuseMaterial.R+1); 01586 vegetDLMCte.R= (uint8)min(v, 255U); 01587 v= (_DLMGlobalVegetableColor.G*256) / (_PointLightDiffuseMaterial.G+1); 01588 vegetDLMCte.G= (uint8)min(v, 255U); 01589 v= (_DLMGlobalVegetableColor.B*256) / (_PointLightDiffuseMaterial.B+1); 01590 vegetDLMCte.B= (uint8)min(v, 255U); 01591 01592 // Parse all patch which have some vegetables 01593 dlmCtxPtr= _PatchDLMContextList->begin(); 01594 while(dlmCtxPtr!=NULL) 01595 { 01596 // do it only if the patch has some vegetable stuff to render, and if it is visible 01597 // NB: we may have some vegetable stuff to render if the patch has some TileMaterial created. 01598 if(dlmCtxPtr->getPatch()->getTileMaterialRefCount()>0 01599 && !dlmCtxPtr->getPatch()->isRenderClipped() ) 01600 { 01601 // NB: no-op if both src and dst are already full black. 01602 dlmCtxPtr->compileLighting(CPatchDLMContext::ModulateConstant, vegetDLMCte); 01603 } 01604 01605 // next 01606 dlmCtxPtr= (CPatchDLMContext*)dlmCtxPtr->Next; 01607 } 01608 } 01609 01610 01611 // profile. 01612 _VegetableManager->resetNumVegetableFaceRendered(); 01613 01614 // render all vegetables, only if driver support VertexProgram. 01615 // ================== 01616 if(isVegetableActive()) 01617 { 01618 // Use same plane as TessBlock for faster clipping. 01619 vector<CPlane> vegetablePyramid; 01620 vegetablePyramid.resize(NL3D_TESSBLOCK_NUM_CLIP_PLANE); 01621 for(i=0;i<NL3D_TESSBLOCK_NUM_CLIP_PLANE;i++) 01622 { 01623 vegetablePyramid[i]= pyramid[i]; 01624 } 01625 _VegetableManager->render(refineCenter, frontVector, vegetablePyramid, _TextureDLM, driver); 01626 } 01627 01628 } |
|
Definition at line 363 of file landscape.cpp. References NL3D::ItZoneMap, and Zones. Referenced by setTileNear().
|
|
For Vegetable Dynamic ligthing only: this is an approximate color of all vegetables. Default is (180, 180, 180). Definition at line 3605 of file landscape.cpp. References _DLMGlobalVegetableColor. Referenced by NL3D::CLandscapeUser::setDLMGlobalVegetableColor().
03606 { 03607 _DLMGlobalVegetableColor= gvc; 03608 } |
|
A driver is needed for VB allocation. The VB will be allocated only the first time the landscape is clipped. Because no VB are created for invisible patchs. call setDriver() before any clip(). Definition at line 563 of file landscape.cpp. References _DriverOkForVegetable, _VertexShaderOk, NL3D_LANDSCAPE_VEGETABLE_MAX_AGP_VERTEX_MAX, nlassert, and uint. Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
00564 { 00565 nlassert(drv); 00566 if(_Driver != drv) 00567 { 00568 _Driver= drv; 00569 00570 // Does the driver support VertexShader??? 00571 // only if VP supported by GPU. 00572 _VertexShaderOk= (_Driver->isVertexProgramSupported() && !_Driver->isVertexProgramEmulated()); 00573 00574 00575 // Does the driver has sufficient requirements for Vegetable??? 00576 // only if VP supported by GPU, and Only if max vertices allowed. 00577 _DriverOkForVegetable= _VertexShaderOk && (_Driver->getMaxVerticesByVertexBufferHard()>=(uint)NL3D_LANDSCAPE_VEGETABLE_MAX_AGP_VERTEX_MAX); 00578 00579 } 00580 } |
|
Set PointLight Max Attenuation End landscape support. Every pointLight AttEnd is clamped to this value. Default is 30.f. Definition at line 3575 of file landscape.cpp. References _DLMMaxAttEnd.
03576 { 03577 maxAttEnd= max(maxAttEnd, 1.f); 03578 _DLMMaxAttEnd= maxAttEnd; 03579 } |
|
set the HeightField data. NB: take lot of place in memory. only one is possible. You should setup this heightfield around the zones which will be loaded. It is applied only when a zone is loaded, so you should setup it 2km around the user, each time you move too far from a previous place (eg 160m from last setup). Definition at line 2784 of file landscape.cpp. References _HeightField, NL3D::CHeightMap::getHeight(), NL3D::CHeightMap::getWidth(), NL3D::CHeightMap::getZ(), NL3D::CLandscape::CHeightField::Height, NL3D::CLandscape::CBezierPatchZ::makeInteriors(), NL3D::CLandscape::CHeightField::OOSizeX, NL3D::CLandscape::CHeightField::OOSizeY, NL3D::CHeightMap::OriginX, NL3D::CLandscape::CHeightField::OriginX, NL3D::CHeightMap::OriginY, NL3D::CLandscape::CHeightField::OriginY, sint, NL3D::CHeightMap::SizeX, NL3D::CLandscape::CHeightField::SizeX, NL3D::CHeightMap::SizeY, NL3D::CLandscape::CHeightField::SizeY, NL3D::CLandscape::CBezierPatchZ::Tangents, uint, v, NL3D::CLandscape::CBezierPatchZ::Vertices, w, NL3D::CLandscape::CHeightField::Width, x, y, and NL3D::CLandscape::CHeightField::ZPatchs. Referenced by NL3D::CLandscapeUser::setHeightField().
02785 { 02786 if(hf.getWidth()<2) 02787 return; 02788 if(hf.getHeight()<2) 02789 return; 02790 02791 // Fill basics. 02792 _HeightField.OriginX= hf.OriginX; 02793 _HeightField.OriginY= hf.OriginY; 02794 _HeightField.SizeX= hf.SizeX; 02795 _HeightField.SizeY= hf.SizeY; 02796 _HeightField.OOSizeX= 1/hf.SizeX; 02797 _HeightField.OOSizeY= 1/hf.SizeY; 02798 uint w= hf.getWidth()-1; 02799 uint h= hf.getHeight()-1; 02800 _HeightField.Width= w; 02801 _HeightField.Height= h; 02802 _HeightField.ZPatchs.resize(w * h); 02803 02804 // compute patchs 02805 sint x,y; 02806 02807 // compute vertices / tangents on each patch 02808 for(y=0;y<(sint)h;y++) 02809 { 02810 for(x=0;x<(sint)w;x++) 02811 { 02812 CBezierPatchZ &paz= _HeightField.ZPatchs[y*w+x]; 02813 // vertices. 02814 paz.Vertices[0]= hf.getZ(x, y); 02815 paz.Vertices[1]= hf.getZ(x, y+1); 02816 paz.Vertices[2]= hf.getZ(x+1, y+1); 02817 paz.Vertices[3]= hf.getZ(x+1, y); 02818 } 02819 } 02820 02821 // compute tangents 02822 for(y=0;y<(sint)h;y++) 02823 { 02824 for(x=0;x<(sint)w;x++) 02825 { 02826 CBezierPatchZ &paz= _HeightField.ZPatchs[y*w+x]; 02827 sint tg; 02828 // For each tangent, what vertex (relative to x,y) we must take. 02829 struct CDeltaPos 02830 { 02831 sint ox,oy; 02832 sint dx1,dy1; 02833 sint dx2,dy2; 02834 }; 02835 static CDeltaPos deltas[8]= { 02836 {0,0, 0,1, 0,-1} , 02837 {0,1, 0,0, 0,2} , 02838 {0,1, 1,1, -1,1} , 02839 {1,1, 0,1, 2,1} , 02840 {1,1, 1,0, 1,2} , 02841 {1,0, 1,1, 1,-1} , 02842 {1,0, 0,0, 2,0} , 02843 {0,0, 1,0, -1,0} , 02844 }; 02845 02846 // compute each tangent of this patch. 02847 for(tg=0; tg<8;tg++) 02848 { 02849 sint x0,y0; 02850 sint x1,y1; 02851 sint x2,y2; 02852 x0= x+deltas[tg].ox; y0= y+deltas[tg].oy; 02853 x1= x+deltas[tg].dx1; y1= y+deltas[tg].dy1; 02854 x2= x+deltas[tg].dx2; y2= y+deltas[tg].dy2; 02855 02856 // borders case. 02857 if(x2<0 || x2>=(sint)hf.getWidth() || y2<0 || y2>=(sint)hf.getHeight()) 02858 { 02859 float v,dv; 02860 // base of tangents. 02861 v= hf.getZ(x0,y0); 02862 // target tangents. 02863 dv= hf.getZ(x1,y1) - v; 02864 // result of tangent. 02865 paz.Tangents[tg]= v+dv/3; 02866 } 02867 // middle case. 02868 else 02869 { 02870 float v,dv; 02871 // base of tangents. 02872 v= hf.getZ(x0,y0); 02873 // target tangents. 02874 dv= hf.getZ(x1,y1) - v; 02875 // add mirror target tangent. 02876 dv+= -(hf.getZ(x2,y2) - v); 02877 dv/=2; 02878 // result of tangent. 02879 paz.Tangents[tg]= v+dv/3; 02880 } 02881 } 02882 } 02883 } 02884 02885 // compute interiors. 02886 for(y=0;y<(sint)h;y++) 02887 { 02888 for(x=0;x<(sint)w;x++) 02889 { 02890 CBezierPatchZ &paz= _HeightField.ZPatchs[y*w+x]; 02891 paz.makeInteriors(); 02892 } 02893 } 02894 02895 } |
|
Enable the noise or not. NB: only new tesselation computed is modified, so you should call it only at init time.
Definition at line 3100 of file landscape.cpp. References _NoiseEnabled.
03101 { 03102 _NoiseEnabled= enable; 03103 } |
|
Setup the equivalent material diffuse component used for both Static and Dynamic PointLights. Default is White. Definition at line 3612 of file landscape.cpp. References _PointLightDiffuseMaterial. Referenced by NL3D::CLandscapeUser::setPointLightDiffuseMaterial().
03613 { 03614 _PointLightDiffuseMaterial= diffuse; 03615 } |
|
update the Light factor for all pointLights in All zones, according to scene LightGroups and AnimatedLights.
Definition at line 3319 of file landscape.cpp. References NL3D::ItZoneMap, and Zones. Referenced by NL3D::CLandscapeModel::traverseHrc().
|
|
Set the ModelPosition (for Precision ZBuffer purpose). NB: the model Pos may be floor-ed (for greater float precision). Should be setup to the camera position each frame. NB: if vertexProgram is used, it is as faster as before (because of geomorph done each frame, and because of VP MAD instruction). NB: if vertexProgram is not used, it is a little slower, because of the substraction. Definition at line 2920 of file landscape.cpp. References _PZBModelPosition. Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
02921 { 02922 _PZBModelPosition= pos; 02923 } |
|
Definition at line 206 of file landscape.h. References _RefineMode.
00206 {_RefineMode= enabled;} |
|
Set threshold for subdivsion quality. The lower is threshold, the more the landscape is subdivided. Default: 0.001.
Definition at line 318 of file landscape.cpp. References _Threshold, and _VPThresholdChange. Referenced by NL3D::CZoneLighter::addTriangles(), NL3D::CInstanceLighter::addTriangles(), NL3D::CZoneLighter::buildZoneInformation(), and NL3D::CLandscapeUser::setThreshold().
00319 { 00320 thre= max(thre, 0.f); 00321 if(thre != _Threshold) 00322 { 00323 _Threshold= thre; 00324 _VPThresholdChange= true; 00325 } 00326 } |
|
Definition at line 620 of file landscape.h. References _TileCallback. Referenced by NL3D::CLandscapeUser::setTileCallback().
00620 { _TileCallback = cb; } |
|
Set Maximum Tile subdivision. Valid values must be in [0..4] (assert). Default is 0 (for now :) ).
Definition at line 344 of file landscape.cpp. References _TileMaxSubdivision, forceMergeAtTileLevel(), nlassert, and uint. Referenced by NL3D::CZoneLighter::addTriangles(), NL3D::CInstanceLighter::addTriangles(), NL3D::CZoneLighter::buildZoneInformation(), and NL3D::CLandscapeUser::setTileMaxSubdivision().
00345 { 00346 nlassert(tileDiv>=0 && tileDiv<=4); 00347 00348 if(tileDiv!=_TileMaxSubdivision) 00349 { 00350 _TileMaxSubdivision= tileDiv; 00351 // Force at Tile==0. Nex refine will split correctly. 00352 forceMergeAtTileLevel(); 00353 } 00354 } |
|
Set tile near distance. Default 50.f. maximized to length of Far alpha transition).
Definition at line 330 of file landscape.cpp. References _FarTransition, _TileDistNear, and resetRenderFarAndDeleteVBFV(). Referenced by NL3D::CLandscapeUser::setTileNear().
00331 { 00332 tileNear= max(tileNear, _FarTransition); 00333 00334 if(tileNear!=_TileDistNear) 00335 { 00336 _TileDistNear= tileNear; 00337 resetRenderFarAndDeleteVBFV(); 00338 } 00339 00340 } |
|
For automatic near lightmap computing (if enabled): setup the lightdir
Definition at line 2690 of file landscape.cpp. References _AutomaticLightDir, and NLMISC::CVector::normalize().
02691 { 02692 _AutomaticLightDir= lightDir; 02693 _AutomaticLightDir.normalize(); 02694 } |
|
Debug purpose only : setup the colors of the patch of all the currently loaded zones so that it shows which tiles have vegetable disabled, or are above, below water. User provides a table with 4 colors for each state : color 0 = above water color 1 = underwater color 2 = intersect water color 3 = vegetable disabled Definition at line 3238 of file landscape.cpp. References Zones.
|
|
set the frequency of lighting update. If freq==1, ALL patchs are updated each second. e.g: if 1/20, then every 20 seconds, all patchs are updated. If you set 0, no update will be done at all (this is the default setup!!). Definition at line 3386 of file landscape.cpp. References _ULFrequency. Referenced by NL3D::CLandscapeUser::setUpdateLightingFrequency().
03387 { 03388 freq= max(freq, 0.f); 03389 _ULFrequency= freq; 03390 } |
|
Setup the light color use for static illumination.
Definition at line 2650 of file landscape.cpp. References _LightValue, NLMISC::CRGBA::A, NLMISC::CRGBA::B, NLMISC::clamp(), NLMISC::CRGBA::G, NLMISC::CRGBA::R, r, and sint. Referenced by CLandscape(), and NL3D::CLandscapeUser::setupStaticLight().
02651 { 02652 sint nMultiply=(sint)(256.f*multiply); 02653 for (int i=0; i<256; i++) 02654 { 02655 sint max=0; 02656 sint r=(((nMultiply*diffuse.R*i)>>8)+ambiant.R*(256-i))>>8; 02657 if (r>max) 02658 max=r; 02659 sint g=(((nMultiply*diffuse.G*i)>>8)+ambiant.G*(256-i))>>8; 02660 if (g>max) 02661 max=g; 02662 sint b=(((nMultiply*diffuse.B*i)>>8)+ambiant.B*(256-i))>>8; 02663 if (b>max) 02664 max=b; 02665 // Not << 8 but << 7 because the _LightValue color table represent a ramp from 0 to 512 02666 r <<= 7; 02667 g <<= 7; 02668 b <<= 7; 02669 max=std::max(max, 256); 02670 r/=max; 02671 g/=max; 02672 b/=max; 02673 clamp (r, 0, 255); 02674 clamp (g, 0, 255); 02675 clamp (b, 0, 255); 02676 _LightValue[i].R=r; 02677 _LightValue[i].G=g; 02678 _LightValue[i].B=b; 02679 _LightValue[i].A=255; 02680 } 02681 } |
|
setup lighting ambient and diffuse for vegetable. Definition at line 3181 of file landscape.cpp. References _VegetableManager, and NL3D::CVegetableManager::setDirectionalLight(). Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape(), and NL3D::CLandscapeUser::setupVegetableLighting().
03182 { 03183 // set the directional light to the manager 03184 _VegetableManager->setDirectionalLight(ambient, diffuse, directionalLight); 03185 } |
|
set the vegetable manager Time (in seconds) NB: MOT stuff (called by CLandscapeModel), don't use it. Definition at line 3196 of file landscape.cpp. References _VegetableManager, and NL3D::CVegetableManager::setTime(). Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
03197 { 03198 // setup vegetable manager 03199 _VegetableManager->setTime(time); 03200 } |
|
set the frequency of Vegetable lighting update. If freq==1, ALL lighted igs are updated each second. e.g: if 1/20, then every 20 seconds, all Igs are updated. If you set 0, no update will be done at all (this is the default setup!!). Definition at line 3232 of file landscape.cpp. References _VegetableManager, and NL3D::CVegetableManager::setUpdateLightingFrequency(). Referenced by NL3D::CLandscapeUser::setVegetableUpdateLightingFrequency().
03233 { 03234 _VegetableManager->setUpdateLightingFrequency(freq); 03235 } |
|
set the vegetable manager System Time (in seconds) for update lighting NB: MOT stuff (called by CLandscapeModel), don't use it. Definition at line 3203 of file landscape.cpp. References _VegetableManager, and NL3D::CVegetableManager::setUpdateLightingTime(). Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
03204 { 03205 // setup vegetable manager 03206 _VegetableManager->setUpdateLightingTime(time); 03207 } |
|
set the vegetable Wind for animation. All thoses variables may be modified each frame without penalty.
Definition at line 3188 of file landscape.cpp. References _VegetableManager, and NL3D::CVegetableManager::setWind(). Referenced by NL3D::CLandscapeUser::setVegetableWind().
03189 { 03190 // setup vegetable manager 03191 _VegetableManager->setWind(windDir, windFreq, windPower, windBendMin); 03192 } |
|
Definition at line 888 of file landscape.cpp. References _Far0VB, _Far1VB, _TileVB, and NL3D::CLandscapeVBAllocator::synchronizeATIVBHard(). Referenced by render().
|
|
Used by Patch to link/unlink from _ULRootNearPatch.
Definition at line 3404 of file landscape.cpp. References _ULNearCurrentTessBlockId, _ULRootNearPatch, NL3D::CPatch::getNextNearUL(), and NL3D::CPatch::unlinkNearUL(). Referenced by NL3D::CPatch::clearTessBlocks().
03405 { 03406 // If I unlink the patch which is the current root 03407 if(_ULRootNearPatch==patch) 03408 { 03409 // switch to next 03410 _ULRootNearPatch= patch->getNextNearUL(); 03411 // if still the same, it means that the circular list is now empty 03412 if(_ULRootNearPatch==patch) 03413 _ULRootNearPatch= NULL; 03414 // reset tessBlock counter. 03415 _ULNearCurrentTessBlockId= 0; 03416 } 03417 03418 // unlink the patch from list 03419 patch->unlinkNearUL(); 03420 } |
|
Definition at line 877 of file landscape.cpp. References _Far0VB, _Far1VB, _TileVB, _VegetableManager, NL3D::CLandscapeVBAllocator::unlockBuffer(), and NL3D::CVegetableManager::unlockBuffers(). Referenced by addZone(), averageTesselationVertices(), NL3D::CZone::changePatchTextureAndColor(), clip(), computeDynamicLighting(), invalidateAllTiles(), refine(), refineAll(), removeZone(), render(), and updateLightingAll().
00878 { 00879 _Far0VB.unlockBuffer(); 00880 _Far1VB.unlockBuffer(); 00881 _TileVB.unlockBuffer(); 00882 00883 // unlock buffer of the vegetable manager. 00884 _VegetableManager->unlockBuffers(); 00885 } |
|
Definition at line 799 of file landscape.cpp. References _DriverOkForVegetable, _Far0VB, _Far1VB, _FarTransition, _PZBModelPosition, _Threshold, _TileDistNear, _TileMaxSubdivision, _TileVB, _VegetableManager, lockBuffers(), NLMISC::sqr(), NL3D::CVegetableManager::updateDriver(), and NL3D::CLandscapeVBAllocator::updateDriver(). Referenced by addZone(), averageTesselationVertices(), NL3D::CZone::changePatchTextureAndColor(), clip(), computeDynamicLighting(), invalidateAllTiles(), refine(), refineAll(), removeZone(), render(), and updateLightingAll().
00800 { 00801 // Setup CLandscapeGlobals static members... 00802 00803 // Far limits. 00804 CLandscapeGlobals::FarTransition= _FarTransition; 00805 00806 // Tile subdivsion part. 00807 CLandscapeGlobals::TileMaxSubdivision= _TileMaxSubdivision; 00808 CLandscapeGlobals::TileDistNear = _TileDistNear; 00809 CLandscapeGlobals::TileDistFar = CLandscapeGlobals::TileDistNear+20; 00810 CLandscapeGlobals::TileDistNearSqr = sqr(CLandscapeGlobals::TileDistNear); 00811 CLandscapeGlobals::TileDistFarSqr = sqr(CLandscapeGlobals::TileDistFar); 00812 CLandscapeGlobals::OOTileDistDeltaSqr = 1.0f / (CLandscapeGlobals::TileDistFarSqr - CLandscapeGlobals::TileDistNearSqr); 00813 00814 // Tile Pixel size part. 00815 // \todo yoyo: choose according to wanted tile pixel size. 00816 CLandscapeGlobals::TilePixelSize= 128.0f; 00817 CLandscapeGlobals::TilePixelBias128= 0.5f/CLandscapeGlobals::TilePixelSize; 00818 CLandscapeGlobals::TilePixelScale128= 1-1/CLandscapeGlobals::TilePixelSize; 00819 CLandscapeGlobals::TilePixelBias256= 0.5f/(CLandscapeGlobals::TilePixelSize*2); 00820 CLandscapeGlobals::TilePixelScale256= 1-1/(CLandscapeGlobals::TilePixelSize*2); 00821 00822 // RefineThreshold. 00823 CLandscapeGlobals::RefineThreshold= _Threshold; 00824 00825 if (_Threshold == 0.0f) 00826 CLandscapeGlobals::OORefineThreshold = FLT_MAX; 00827 else 00828 CLandscapeGlobals::OORefineThreshold = 1.0f / CLandscapeGlobals::RefineThreshold; 00829 00830 // Refine Center*. 00831 CLandscapeGlobals::RefineCenter= refineCenter; 00832 CLandscapeGlobals::TileFarSphere.Center= CLandscapeGlobals::RefineCenter; 00833 CLandscapeGlobals::TileFarSphere.Radius= CLandscapeGlobals::TileDistFar; 00834 CLandscapeGlobals::TileNearSphere.Center= CLandscapeGlobals::RefineCenter; 00835 CLandscapeGlobals::TileNearSphere.Radius= CLandscapeGlobals::TileDistNear; 00836 00837 // PZBModelPosition 00838 CLandscapeGlobals::PZBModelPosition= _PZBModelPosition; 00839 00840 // VB Allocators. 00841 CLandscapeGlobals::CurrentFar0VBAllocator= &_Far0VB; 00842 CLandscapeGlobals::CurrentFar1VBAllocator= &_Far1VB; 00843 CLandscapeGlobals::CurrentTileVBAllocator= &_TileVB; 00844 00845 // Must check driver, and create VB infos,locking buffers. 00846 if(_Driver) 00847 { 00848 _Far0VB.updateDriver(_Driver); 00849 _Far1VB.updateDriver(_Driver); 00850 _TileVB.updateDriver(_Driver); 00851 00852 // must do the same for _VegetableManager. 00853 if(_DriverOkForVegetable) 00854 _VegetableManager->updateDriver(_Driver); 00855 00856 lockBuffers (); 00857 } 00858 } |
|
update the lighting of patch, within a certain amount of time. called by CLandscapeModel Definition at line 3330 of file landscape.cpp. References _ULFrequency, _ULPrecTime, _ULPrecTimeInit, _ULTime, updateLightingTextureFar(), and updateLightingTextureNear(). Referenced by NL3D::CLandscapeModel::clipAndRenderLandscape().
03331 { 03332 _ULTime= time; 03333 03334 // first time in this method?? 03335 if(!_ULPrecTimeInit) 03336 { 03337 _ULPrecTimeInit= true; 03338 _ULPrecTime= _ULTime; 03339 } 03340 // compute delta time from last update. 03341 float dt= float(_ULTime - _ULPrecTime); 03342 _ULPrecTime= _ULTime; 03343 03344 03345 // If not disabled 03346 if(_ULFrequency) 03347 { 03348 // Do it for near and far in 2 distinct ways. 03349 updateLightingTextureFar(dt * _ULFrequency); 03350 updateLightingTextureNear(dt * _ULFrequency); 03351 } 03352 03353 } |
|
update the lighting of ALL patch (slow method). NB: work even if UpdateLightingFrequency==0 Additionaly, vegetables are also ALL updated. Definition at line 3357 of file landscape.cpp. References _VegetableManager, NLMISC::OptFastFloorBegin(), NLMISC::OptFastFloorEnd(), unlockBuffers(), updateGlobalsAndLockBuffers(), NL3D::CVegetableManager::updateLightingAll(), updateLightingTextureFar(), and updateLightingTextureNear(). Referenced by NL3D::CLandscapeUser::updateLightingAll().
03358 { 03359 // Do it for near and far in 2 distinct ways. 03360 //================ 03361 updateLightingTextureFar(1); 03362 updateLightingTextureNear(1); 03363 03364 03365 // update lighting for vegetables 03366 //================ 03367 03368 // Must lock buffers for update Lighting of vegetables. 03369 updateGlobalsAndLockBuffers (CVector::Null); 03370 03371 // Because updateLighting() may use OptFastFloor.. 03372 NLMISC::OptFastFloorBegin(); 03373 03374 // update ALL lighting for vegetables 03375 _VegetableManager->updateLightingAll(); 03376 03377 // Stop fastFloor optim. 03378 NLMISC::OptFastFloorEnd(); 03379 03380 // Must realase VB Buffers 03381 unlockBuffers(); 03382 } |
|
Update All Far texture, given a ratio along total lumels.
Definition at line 3424 of file landscape.cpp. References _ULFarPixelsToUpdate, _ULRootTextureFar, _ULTotalFarPixels, NL3D::CTextureFar::endPatchULTouch(), NL3D::CTextureFar::getNextUL(), min, NL3D::CTextureFar::startPatchULTouch(), and NL3D::CTextureFar::touchPatchULAndNext(). Referenced by updateLighting(), and updateLightingAll().
03425 { 03426 // compute number of pixels to update. 03427 _ULFarPixelsToUpdate+= ratio * _ULTotalFarPixels; 03428 // maximize, so at max, it computes all patchs, just one time. 03429 _ULFarPixelsToUpdate= min(_ULFarPixelsToUpdate, (float)_ULTotalFarPixels); 03430 03431 // Test Profile Yoyo 03432 /*extern bool YOYO_LandULTest; 03433 if(YOYO_LandULTest) 03434 { 03435 nlinfo("YOYO_UL Far: %dK, %dK", (sint)_ULFarPixelsToUpdate/1024, (sint)_ULTotalFarPixels/1024); 03436 }*/ 03437 03438 // while there is still some pixels to update. 03439 while(_ULFarPixelsToUpdate > 0 && _ULRootTextureFar) 03440 { 03441 // update patch (if not null) in the textureFar. 03442 _ULFarPixelsToUpdate-= _ULRootTextureFar->touchPatchULAndNext(); 03443 03444 // last patch in the texture?? 03445 if( _ULRootTextureFar->endPatchULTouch() ) 03446 { 03447 // yes, go to next texture. 03448 _ULRootTextureFar= _ULRootTextureFar->getNextUL(); 03449 // reset to 0th patch. 03450 _ULRootTextureFar->startPatchULTouch(); 03451 } 03452 } 03453 03454 // Now, _ULFarPixelsToUpdate should be <=0. (most of the time < 0) 03455 } |
|
Update All Near texture, given a ratio along total lumels.
Definition at line 3459 of file landscape.cpp. References _ULNearCurrentTessBlockId, _ULNearPixelsToUpdate, _ULRootNearPatch, _ULTotalNearPixels, NL3D::CPatch::getNextNearUL(), NL3D::CPatch::getNumNearTessBlocks(), min, and NL3D::CPatch::updateTessBlockLighting(). Referenced by updateLighting(), and updateLightingAll().
03460 { 03461 // compute number of pixels to update. 03462 _ULNearPixelsToUpdate+= ratio * _ULTotalNearPixels; 03463 // maximize, so at max, it computes all patchs, just one time. 03464 _ULNearPixelsToUpdate= min(_ULNearPixelsToUpdate, (float)_ULTotalNearPixels); 03465 03466 03467 // while there is still some pixels to update. 03468 while(_ULNearPixelsToUpdate > 0 && _ULRootNearPatch) 03469 { 03470 // update tessBlock (if lightmap exist for this tessBlock) in the patch. 03471 _ULNearPixelsToUpdate-= _ULRootNearPatch->updateTessBlockLighting(_ULNearCurrentTessBlockId); 03472 // Next tessBlock to process. 03473 _ULNearCurrentTessBlockId++; 03474 03475 // last tessBlock in the patch?? 03476 if(_ULNearCurrentTessBlockId>=_ULRootNearPatch->getNumNearTessBlocks()) 03477 { 03478 // yes, go to next patch. 03479 _ULRootNearPatch= _ULRootNearPatch->getNextNearUL(); 03480 // reset to 0th tessBlock. 03481 _ULNearCurrentTessBlockId=0; 03482 } 03483 } 03484 03485 } |
|
Definition at line 896 of file landscape.cpp. References _TessBlockModificationRoot, NL3D::CTessBlock::getNextToModify(), NL3D::CTessBlock::getPatch(), NL3D::CPatch::recreateTessBlockFaceVector(), and NL3D::CTessBlock::removeFromModifyList(). Referenced by addZone(), averageTesselationVertices(), NL3D::CZone::changePatchTextureAndColor(), clip(), invalidateAllTiles(), refine(), refineAll(), and removeZone().
00897 { 00898 // while some tessBlock to update remains. 00899 CTessBlock *tb; 00900 while( (tb=_TessBlockModificationRoot.getNextToModify()) !=NULL ) 00901 { 00902 // Get the patch which owns this TessBlock. 00903 CPatch *patch= tb->getPatch(); 00904 00905 // If this patch is visible, recreate faceVector for his tessBlock. 00906 patch->recreateTessBlockFaceVector(*tb); 00907 00908 // remove from list. 00909 tb->removeFromModifyList(); 00910 } 00911 } |
|
Definition at line 629 of file landscape.h. |
|
Definition at line 67 of file smart_ptr.h. |
|
Definition at line 628 of file landscape.h. |
|
Definition at line 630 of file landscape.h. |
|
Definition at line 792 of file landscape.h. Referenced by CLandscape(), getAutomaticLightDir(), and setupAutomaticLightDir(). |
|
Definition at line 791 of file landscape.h. Referenced by CLandscape(), enableAutomaticLighting(), and getAutomaticLighting(). |
|
an approximate value used to simulate diffuse material of vegetables
Definition at line 988 of file landscape.h. Referenced by CLandscape(), getDLMGlobalVegetableColor(), render(), and setDLMGlobalVegetableColor(). |
|
Max AttEnd.
Definition at line 985 of file landscape.h. Referenced by CLandscape(), computeDynamicLighting(), getDynamicLightingMaxAttEnd(), and setDynamicLightingMaxAttEnd(). |
|
Definition at line 712 of file landscape.h. |
|
Tells if the current dirver support vegetable.
Definition at line 913 of file landscape.h. Referenced by CLandscape(), isVegetableActive(), setDriver(), and updateGlobalsAndLockBuffers(). |
|
Definition at line 660 of file landscape.h. |
|
Definition at line 713 of file landscape.h. Referenced by clear(), lockBuffers(), render(), synchronizeATIVBHards(), unlockBuffers(), and updateGlobalsAndLockBuffers(). |
|
Definition at line 714 of file landscape.h. Referenced by clear(), lockBuffers(), render(), synchronizeATIVBHards(), unlockBuffers(), and updateGlobalsAndLockBuffers(). |
|
Definition at line 783 of file landscape.h. Referenced by CLandscape(), and initTileBanks(). |
|
Definition at line 705 of file landscape.h. Referenced by CLandscape(), setTileNear(), and updateGlobalsAndLockBuffers(). |
|
Definition at line 853 of file landscape.h. Referenced by getHeightFieldDeltaZ(), and setHeightField(). |
|
Definition at line 789 of file landscape.h. Referenced by getStaticLight(), and setupStaticLight(). |
|
The priority list of faces which may need to merge.
Definition at line 896 of file landscape.h. Referenced by CLandscape(), NL3D::CTessFace::doMerge(), refine(), NL3D::CTessFace::split(), NL3D::CTessFace::splitRectangular(), and NL3D::CTessFace::updateRefineMerge(). |
|
Definition at line 765 of file landscape.h. Referenced by CLandscape(), getTileLightMap(), and releaseTileLightMap(). |
|
Definition at line 887 of file landscape.h. Referenced by CLandscape(), getNoiseMode(), and setNoiseMode(). |
|
OldRefineCenter setuped in prec refine().
Definition at line 898 of file landscape.h. Referenced by CLandscape(), getOldRefineCenter(), getTesselatedPos(), and refine(). |
|
The priority list of faces which may need to merge.
Definition at line 899 of file landscape.h. Referenced by CLandscape(), and refine(). |
|
List of DLM Context.
Definition at line 981 of file landscape.h. Referenced by CLandscape(), computeDynamicLighting(), getDynamicLightingMemoryLoad(), getPatchDLMContextList(), render(), and ~CLandscape(). |
|
The QuadGrid of patch.
Definition at line 866 of file landscape.h. Referenced by addZone(), buildPatchBlocksInBBox(), buildTrianglesInBBox(), clear(), computeDynamicLighting(), init(), and removeZone(). |
|
private version of buildPatchBlocksInBBox, searching only for one patch. Definition at line 101 of file landscape.cpp. Referenced by init(). |
|
private version of buildPatchBlocksInBBox, searching only for one patch. Definition at line 99 of file landscape.cpp. Referenced by init(). |
|
The diffuse material of landscape, used for StaticPointLights and DynamicPointLights.
Definition at line 991 of file landscape.h. Referenced by CLandscape(), computeDynamicLighting(), getPointLightDiffuseMaterial(), render(), and setPointLightDiffuseMaterial(). |
|
Definition at line 929 of file landscape.h. Referenced by CLandscape(), getPZBModelPosition(), render(), setPZBModelPosition(), and updateGlobalsAndLockBuffers(). |
|
Definition at line 704 of file landscape.h. Referenced by CLandscape(), getRefineMode(), refine(), and setRefineMode(). |
|
Definition at line 719 of file landscape.h. Referenced by CLandscape(), NL3D::CZone::refreshTesselationGeometry(), and render(). |
|
newTessFace() append the face to _RootNewLeaves.
Definition at line 901 of file landscape.h. Referenced by newTessFace(), and refine(). |
|
Definition at line 998 of file landscape.h. Referenced by appendToShadowPolyReceiver(), getCameraCollision(), receiveShadowMap(), and removeFromShadowPolyReceiver(). |
|
The priority list of faces which may need to split.
Definition at line 894 of file landscape.h. Referenced by CLandscape(), NL3D::CTessFace::doMerge(), refine(), and NL3D::CTessFace::updateRefineSplit(). |
|
Definition at line 663 of file landscape.h. Referenced by averageTesselationVertices(), clip(), and updateTessBlocksFaceVector(). |
|
The dynamic lightmap Texture.
Definition at line 977 of file landscape.h. Referenced by CLandscape(), getTextureDLM(), render(), and ~CLandscape(). |
|
Definition at line 782 of file landscape.h. Referenced by clear(), getFarRenderPass(), and render(). |
|
Definition at line 764 of file landscape.h. Referenced by getTileLightMap(), refillTileLightMap(), releaseTileLightMap(), and render(). |
|
Definition at line 703 of file landscape.h. Referenced by CLandscape(), getTesselatedPos(), getThreshold(), setThreshold(), and updateGlobalsAndLockBuffers(). |
|
Definition at line 633 of file landscape.h. Referenced by CLandscape(), getTileCallback(), and setTileCallback(). |
|
Definition at line 702 of file landscape.h. Referenced by CLandscape(), getTesselatedPos(), getTileNear(), setTileNear(), and updateGlobalsAndLockBuffers(). |
|
Definition at line 706 of file landscape.h. Referenced by CLandscape(), getTileMaxSubdivision(), setTileMaxSubdivision(), and updateGlobalsAndLockBuffers(). |
|
Definition at line 715 of file landscape.h. Referenced by clear(), lockBuffers(), render(), synchronizeATIVBHards(), unlockBuffers(), and updateGlobalsAndLockBuffers(). |
|
Current number of far pixels to update. If negative, I have some advance.
Definition at line 946 of file landscape.h. Referenced by CLandscape(), and updateLightingTextureFar(). |
|
Frequency of update.
Definition at line 940 of file landscape.h. Referenced by CLandscape(), setUpdateLightingFrequency(), and updateLighting(). |
|
Current tessBlock id in the current patch processed.
Definition at line 958 of file landscape.h. Referenced by CLandscape(), unlinkPatchFromNearUL(), and updateLightingTextureNear(). |
|
Current number of near pixels to update. If negative, I have some advance.
Definition at line 954 of file landscape.h. Referenced by CLandscape(), and updateLightingTextureNear(). |
|
Used by Patch to link/unlink from _ULRootNearPatch.
Definition at line 936 of file landscape.h. Referenced by updateLighting(). |
|
Used by Patch to link/unlink from _ULRootNearPatch.
Definition at line 937 of file landscape.h. Referenced by CLandscape(), and updateLighting(). |
|
The current patch rendered.
Definition at line 956 of file landscape.h. Referenced by CLandscape(), linkPatchToNearUL(), unlinkPatchFromNearUL(), and updateLightingTextureNear(). |
|
The current TextureFar rendered.
Definition at line 948 of file landscape.h. Referenced by CLandscape(), clearFarRenderPass(), getFarRenderPass(), and updateLightingTextureFar(). |
|
Used by Patch to link/unlink from _ULRootNearPatch.
Definition at line 938 of file landscape.h. Referenced by updateLighting(). |
|
Far UpdateLighting.
Definition at line 944 of file landscape.h. Referenced by CLandscape(), freeFarRenderPass(), getFarRenderPass(), and updateLightingTextureFar(). |
|
Near UpdateLighting.
Definition at line 952 of file landscape.h. Referenced by CLandscape(), getTileLightMap(), releaseTileLightMap(), and updateLightingTextureNear(). |
|
List of VegetableBlock, to be tested for creation each frame.
Definition at line 916 of file landscape.h. Referenced by refine(). |
|
The VegetableManager. (ptr only for include speed).
Definition at line 908 of file landscape.h. Referenced by NL3D::CPatch::addRefTessBlocks(), CLandscape(), NL3D::CPatch::clearTessBlocks(), createVegetableBlendLayersModels(), enableVegetable(), NL3D::CPatch::generateTileVegetable(), getNumVegetableFaceRendered(), initTileBanks(), loadVegetableTexture(), lockBuffers(), refine(), render(), setupVegetableLighting(), setVegetableTime(), setVegetableUpdateLightingFrequency(), setVegetableUpdateLightingTime(), setVegetableWind(), unlockBuffers(), updateGlobalsAndLockBuffers(), updateLightingAll(), and ~CLandscape(). |
|
Tells if the Vegetable Managemnt is enabled.
Definition at line 911 of file landscape.h. Referenced by CLandscape(), enableVegetable(), and isVegetableActive(). |
|
Definition at line 717 of file landscape.h. Referenced by CLandscape(), getTesselatedPos(), lockBuffers(), render(), and setDriver(). |
|
Definition at line 708 of file landscape.h. Referenced by CLandscape(), render(), and setThreshold(). |
|
Definition at line 79 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), NLMISC::CRefCount::getRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
Definition at line 772 of file landscape.h. |
|
Referenced by NLMISC::CRefCount::CRefCount(). |
|
Definition at line 147 of file landscape.h. Referenced by addZone(), CLandscape(), and NL3D::CLandscapeModel::CLandscapeModel(). |
|
Definition at line 80 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
Definition at line 638 of file landscape.h. Referenced by deleteTessFace(), and newTessFace(). |
|
Definition at line 641 of file landscape.h. Referenced by deleteTessFarVertex(), and newTessFarVertex(). |
|
Definition at line 640 of file landscape.h. Referenced by deleteTessNearVertex(), and newTessNearVertex(). |
|
Definition at line 639 of file landscape.h. Referenced by deleteTessVertex(), and newTessVertex(). |
|
|
Definition at line 643 of file landscape.h. Referenced by deleteTileFace(), and newTileFace(). |
|
Definition at line 146 of file landscape.h. Referenced by NL3D::CPatchDLMContext::computeTextureFar(), eraseTileFarIfNotGood(), getFarRenderPass(), initTileBanks(), and NL3D::CLandscapeUser::loadBankFiles(). |
|
Definition at line 761 of file landscape.h. Referenced by flushTiles(), getTileRenderPass(), getTileUvScaleBiasRot(), initTileBank(), loadTile(), releaseTile(), and releaseTiles(). |
|
Definition at line 769 of file landscape.h. |
|
Definition at line 642 of file landscape.h. Referenced by deleteTileMaterial(), and newTileMaterial(). |
|
Definition at line 759 of file landscape.h. Referenced by findTileRdrPass(), flushTiles(), releaseTiles(), and render(). |
|
Definition at line 757 of file landscape.h. Referenced by findTileTexture(). |
|