From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/a02717.html | 788 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 788 insertions(+) create mode 100644 docs/doxygen/nel/a02717.html (limited to 'docs/doxygen/nel/a02717.html') diff --git a/docs/doxygen/nel/a02717.html b/docs/doxygen/nel/a02717.html new file mode 100644 index 00000000..8557d2b1 --- /dev/null +++ b/docs/doxygen/nel/a02717.html @@ -0,0 +1,788 @@ + + +NeL: NL3D::CLandscapeVegetableBlock class Reference + + + +
+

NL3D::CLandscapeVegetableBlock Class Reference

#include <landscape_vegetable_block.h> +

+

Inheritance diagram for NL3D::CLandscapeVegetableBlock: +

+ +NL3D::CTessNodeList + +

Detailed Description

+A block of vegetable IG (one IG per distance type). NB: there is one CLandscapeVegetableBlock per landscape TessBlock.
Author:
Lionel Berenguier

+Nevrax France

+
Date:
2001
+ +

+ +

+Definition at line 63 of file landscape_vegetable_block.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 CLandscapeVegetableBlock ()
 Constructor.

void init (const CVector &center, CVegetableManager *vegetManager, CVegetableClipBlock *vegetableClipBlock, CPatch *patch, uint ts, uint tt, CTessList< CLandscapeVegetableBlock > &list)
 build the vegetable block, create sortBlocks, and append to list.

void release (CVegetableManager *vegeManager, CTessList< CLandscapeVegetableBlock > &list)
 release all IGs, reset the Vegetable block and remove from list. call before destruction.

void update (const CVector &viewCenter, CVegetableManager *vegeManager)

Data Fields

CTessNodeListNext
CTessNodeListPrec

Private Member Functions

void createVegetableIGForDistType (uint i, CVegetableManager *vegeManager, CLandscapeVegetableBlockCreateContext &vbCreateCtx)

Private Attributes

CVector _Center
 The center of this object, to compute distance.

uint8 _CurDistType
 The current distance type. 0 means all IG are created. NL3D_VEGETABLE_BLOCK_NUMDIST means none.

CPatch_Patch
 Which patch owns this block.

uint8 _Ts
 Coordinate of the lower-left tile. 2x2 tile vegetables are generated.

uint8 _Tt
 Coordinate of the lower-left tile. 2x2 tile vegetables are generated.

CVegetableClipBlock_VegetableClipBlock
 To which VegetableClipBlock we must add vegetables IGs.

CVegetableInstanceGroup_VegetableIG [NL3D_TESSBLOCK_TILESIZE][NL3D_VEGETABLE_BLOCK_NUMDIST]
CVegetableSortBlock_VegetableSortBlock [NL3D_TESSBLOCK_TILESIZE]
 The sortBlocks generated by this vegetable block, one for each tilematerial.

+


Constructor & Destructor Documentation

+

+ + + + +
+ + + + + + + + + +
NL3D::CLandscapeVegetableBlock::CLandscapeVegetableBlock  ) 
+
+ + + + + +
+   + + +

+Constructor. +

+ +

+Definition at line 71 of file landscape_vegetable_block.cpp. +

+References _CurDistType, _VegetableClipBlock, _VegetableIG, _VegetableSortBlock, NL3D_TESSBLOCK_TILESIZE, NL3D_VEGETABLE_BLOCK_NUMDIST, and uint. +

+

00072 {
+00073         _VegetableClipBlock= NULL;
+00074         _CurDistType= NL3D_VEGETABLE_BLOCK_NUMDIST;
+00075 
+00076         for(uint j=0;j<NL3D_TESSBLOCK_TILESIZE;j++)
+00077         {
+00078                 _VegetableSortBlock[j]= NULL;
+00079                 for(uint i=0;i<NL3D_VEGETABLE_BLOCK_NUMDIST;i++)
+00080                 {
+00081                         _VegetableIG[j][i]= NULL;
+00082                 }
+00083         }
+00084 }
+
+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CLandscapeVegetableBlock::createVegetableIGForDistType uint  i,
CVegetableManager vegeManager,
CLandscapeVegetableBlockCreateContext vbCreateCtx
[private]
+
+ + + + + +
+   + + +

+ +

+Definition at line 227 of file landscape_vegetable_block.cpp. +

+References _Patch, _Ts, _Tt, _VegetableIG, _VegetableSortBlock, NL3D::CVegetableManager::createIg(), NL3D::CVegetableManager::deleteIg(), NL3D::CPatch::generateTileVegetable(), NL3D_TESSBLOCK_TILESIZE, nlassert, sint, and uint. +

+Referenced by update(). +

+

00229 {
+00230         // check
+00231         nlassert(NL3D_TESSBLOCK_TILESIZE==4);
+00232         nlassert(_VegetableIG[0][i]==NULL);
+00233         nlassert(_VegetableIG[1][i]==NULL);
+00234         nlassert(_VegetableIG[2][i]==NULL);
+00235         nlassert(_VegetableIG[3][i]==NULL);
+00236 
+00237         // Create vegetables instances per tile_material.
+00238         sint    tms,tmt;
+00239         // for all tiles
+00240         nlassert(NL3D_TESSBLOCK_TILESIZE==4);
+00241         for(tmt= _Tt; tmt<_Tt+2; tmt++)
+00242         {
+00243                 for(tms= _Ts; tms<_Ts+2; tms++)
+00244                 {
+00245                         uint    tileId= tms-_Ts + (tmt-_Tt)*2;
+00246 
+00247                         // create the instance group in the good sortBlock
+00248                         CVegetableInstanceGroup         *vegetIg= vegeManager->createIg(_VegetableSortBlock[tileId]);
+00249                         _VegetableIG[tileId][i]= vegetIg;
+00250 
+00251                         // generate 
+00252                         _Patch->generateTileVegetable(vegetIg, i, tms, tmt, vbCreateCtx);
+00253 
+00254                         // If the ig is empty, delete him. This optimize rendering because no unusefull ig are 
+00255                         // tested for rendering. This speed up some 1/10 of ms...
+00256                         if(vegetIg->isEmpty())
+00257                         {
+00258                                 vegeManager->deleteIg(vegetIg);
+00259                                 _VegetableIG[tileId][i]= NULL;
+00260                         }
+00261 
+00262                         // NB: vegtable SortBlock is updated in CLandscapeVegetableBlock::update() after
+00263                 }
+00264         }
+00265 
+00266 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CLandscapeVegetableBlock::init const CVector center,
CVegetableManager vegetManager,
CVegetableClipBlock vegetableClipBlock,
CPatch patch,
uint  ts,
uint  tt,
CTessList< CLandscapeVegetableBlock > &  list
+
+ + + + + +
+   + + +

+build the vegetable block, create sortBlocks, and append to list. +

+ +

+Definition at line 89 of file landscape_vegetable_block.cpp. +

+References _Patch, _Ts, _Tt, _VegetableClipBlock, _VegetableSortBlock, NL3D::CTessList< T >::append(), NL3D::CVegetableManager::createSortBlock(), NL3D::CBezierPatch::eval(), NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), NL3D_PATCH_TILE_RADIUS, NL3D_TESSBLOCK_TILESIZE, nlassert, s, sint, t, uint, and NL3D::CPatch::unpackIntoCache(). +

+Referenced by NL3D::CPatch::createVegetableBlock(). +

+

00091 {
+00092         nlassert(patch);
+00093         _Center= center;
+00094         _VegetableClipBlock= vegetableClipBlock;
+00095         _Patch= patch;
+00096         _Ts= ts;
+00097         _Tt= tt;
+00098 
+00099         // Create the Vegetable SortBlocks
+00100         sint    tms,tmt;
+00101         // for all tiles
+00102         nlassert(NL3D_TESSBLOCK_TILESIZE==4);
+00103         for(tmt= _Tt; tmt<_Tt+2; tmt++)
+00104         {
+00105                 for(tms= _Ts; tms<_Ts+2; tms++)
+00106                 {
+00107                         // compute approximate center of the tile.
+00108                         float   s= (tms + 0.5f) / _Patch->getOrderS();
+00109                         float   t= (tmt + 0.5f) / _Patch->getOrderT();
+00110                         CBezierPatch    *bpatch= _Patch->unpackIntoCache();
+00111                         CVector center= bpatch->eval(s, t);
+00112 
+00113                         // create the sortBlock. NB: very approximate SortBlock radius....
+00114                         _VegetableSortBlock[(tmt-_Tt)*2 + (tms-_Ts)]= vegetManager->createSortBlock(_VegetableClipBlock, center, NL3D_PATCH_TILE_RADIUS);
+00115                 }
+00116         }
+00117 
+00118         // append to list.
+00119         vblist.append(this);
+00120 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + +
void NL3D::CLandscapeVegetableBlock::release CVegetableManager vegeManager,
CTessList< CLandscapeVegetableBlock > &  list
+
+ + + + + +
+   + + +

+release all IGs, reset the Vegetable block and remove from list. call before destruction. +

+ +

+Definition at line 124 of file landscape_vegetable_block.cpp. +

+References _CurDistType, _VegetableIG, _VegetableSortBlock, NL3D::CVegetableManager::deleteIg(), NL3D::CVegetableManager::deleteSortBlock(), NL3D_TESSBLOCK_TILESIZE, NL3D_VEGETABLE_BLOCK_NUMDIST, NL3D::CTessList< T >::remove(), and uint. +

+

00125 {
+00126         // release all Igs, and all Sbs.
+00127         for(uint j=0;j<NL3D_TESSBLOCK_TILESIZE;j++)
+00128         {
+00129                 // release IGs first.
+00130                 for(uint i=0;i<NL3D_VEGETABLE_BLOCK_NUMDIST;i++)
+00131                 {
+00132                         if(_VegetableIG[j][i])
+00133                         {
+00134                                 vegeManager->deleteIg(_VegetableIG[j][i]);
+00135                                 _VegetableIG[j][i]= NULL;
+00136                         }
+00137                 }
+00138 
+00139                 // release SB
+00140                 if(_VegetableSortBlock[j])
+00141                 {
+00142                         vegeManager->deleteSortBlock(_VegetableSortBlock[j]);
+00143                         _VegetableSortBlock[j]= NULL;
+00144                 }
+00145         }
+00146 
+00147         // reset state.
+00148         _CurDistType= NL3D_VEGETABLE_BLOCK_NUMDIST;
+00149 
+00150         // remove from list.
+00151         vblist.remove(this);
+00152 }
+
+

+ + + + +
+ + + + + + + + + + + + + + + + + + + +
void NL3D::CLandscapeVegetableBlock::update const CVector viewCenter,
CVegetableManager vegeManager
+
+ + + + + +
+   + + +

+update state of the vegetableBlock. If distance type change, then create / delete any wanted Ig. Warning! IG creation Use OptFastFloor()! So call must be enclosed with a OptFastFloorBegin()/OptFastFloorEnd(). +

+Definition at line 155 of file landscape_vegetable_block.cpp. +

+References _CurDistType, _Patch, _Ts, _Tt, _VegetableIG, _VegetableSortBlock, createVegetableIGForDistType(), NL3D::CVegetableManager::deleteIg(), NL3D::CLandscapeVegetableBlockCreateContext::init(), NL3D_TESSBLOCK_TILESIZE, uint, and NL3D::CVegetableSortBlock::updateSortBlock(). +

+Referenced by NL3D::CLandscape::refine(). +

+

00156 {
+00157         float   sqrDist= (viewCenter-_Center).sqrnorm();
+00158 
+00159         // compute new distance type. Incremental mode.
+00160         uint    newDistType= _CurDistType;
+00161         while(sqrDist<CLVBSqrDistLUT::Array[newDistType])
+00162         {
+00163                 newDistType--;
+00164         }
+00165         while(newDistType<NL3D_VEGETABLE_BLOCK_NUMDIST && sqrDist>CLVBSqrDistLUT::Array[newDistType+1])
+00166         {
+00167                 newDistType++;
+00168         }
+00169         /*
+00170                 NB: to test but may be better than 
+00171                         newDistType= floor()(delta.norm() / NL3D_VEGETABLE_BLOCK_ELTDIST);
+00172         */
+00173 
+00174 
+00175         // Change of distance type??
+00176         if(newDistType!=_CurDistType)
+00177         {
+00178                 // Erase or create IGs.
+00179                 if(newDistType>_CurDistType)
+00180                 {
+00181                         // For all tiles
+00182                         for(uint j=0;j<NL3D_TESSBLOCK_TILESIZE;j++)
+00183                         {
+00184                                 // Erase no more needed Igs.
+00185                                 for(uint i=_CurDistType; i<newDistType; i++)
+00186                                 {
+00187                                         if(_VegetableIG[j][i])
+00188                                         {
+00189                                                 vegeManager->deleteIg(_VegetableIG[j][i]);
+00190                                                 _VegetableIG[j][i]= NULL;
+00191                                         }
+00192                                 }
+00193 
+00194                                 // update the sort block for this tile
+00195                                 _VegetableSortBlock[j]->updateSortBlock(*vegeManager);
+00196                         }
+00197                 }
+00198                 else
+00199                 {
+00200                         // Create a context for creation.
+00201                         CLandscapeVegetableBlockCreateContext   ctx;
+00202                         ctx.init(_Patch, _Ts, _Tt);
+00203 
+00204                         // create new Igs, for all tiles
+00205                         for(uint i=newDistType; i<_CurDistType; i++)
+00206                         {
+00207                                 createVegetableIGForDistType(i, vegeManager, ctx);
+00208                         }
+00209 
+00210                         // For all tiles
+00211                         for(uint j=0;j<NL3D_TESSBLOCK_TILESIZE;j++)
+00212                         {
+00213                                 // update the sort block for this tile
+00214                                 _VegetableSortBlock[j]->updateSortBlock(*vegeManager);
+00215                         }
+00216                 }
+00217 
+00218                 // copy new dist type.
+00219                 _CurDistType= newDistType;
+00220         }
+00221 
+00222 
+00223 }
+
+


Field Documentation

+

+ + + + +
+ + +
CVector NL3D::CLandscapeVegetableBlock::_Center [private] +
+
+ + + + + +
+   + + +

+The center of this object, to compute distance. +

+ +

+Definition at line 90 of file landscape_vegetable_block.h.

+

+ + + + +
+ + +
uint8 NL3D::CLandscapeVegetableBlock::_CurDistType [private] +
+
+ + + + + +
+   + + +

+The current distance type. 0 means all IG are created. NL3D_VEGETABLE_BLOCK_NUMDIST means none. +

+ +

+Definition at line 98 of file landscape_vegetable_block.h. +

+Referenced by CLandscapeVegetableBlock(), release(), and update().

+

+ + + + +
+ + +
CPatch* NL3D::CLandscapeVegetableBlock::_Patch [private] +
+
+ + + + + +
+   + + +

+Which patch owns this block. +

+ +

+Definition at line 94 of file landscape_vegetable_block.h. +

+Referenced by createVegetableIGForDistType(), init(), and update().

+

+ + + + +
+ + +
uint8 NL3D::CLandscapeVegetableBlock::_Ts [private] +
+
+ + + + + +
+   + + +

+Coordinate of the lower-left tile. 2x2 tile vegetables are generated. +

+ +

+Definition at line 96 of file landscape_vegetable_block.h. +

+Referenced by createVegetableIGForDistType(), init(), and update().

+

+ + + + +
+ + +
uint8 NL3D::CLandscapeVegetableBlock::_Tt [private] +
+
+ + + + + +
+   + + +

+Coordinate of the lower-left tile. 2x2 tile vegetables are generated. +

+ +

+Definition at line 96 of file landscape_vegetable_block.h. +

+Referenced by createVegetableIGForDistType(), init(), and update().

+

+ + + + +
+ + +
CVegetableClipBlock* NL3D::CLandscapeVegetableBlock::_VegetableClipBlock [private] +
+
+ + + + + +
+   + + +

+To which VegetableClipBlock we must add vegetables IGs. +

+ +

+Definition at line 92 of file landscape_vegetable_block.h. +

+Referenced by CLandscapeVegetableBlock(), and init().

+

+ + + + +
+ + +
CVegetableInstanceGroup* NL3D::CLandscapeVegetableBlock::_VegetableIG[NL3D_TESSBLOCK_TILESIZE][NL3D_VEGETABLE_BLOCK_NUMDIST] [private] +
+
+ + + + + +
+   + + +

+The instance groups generated by this vegetable block, one for each distance type. and one per each tilematerial +

+Definition at line 107 of file landscape_vegetable_block.h. +

+Referenced by CLandscapeVegetableBlock(), createVegetableIGForDistType(), release(), and update().

+

+ + + + +
+ + +
CVegetableSortBlock* NL3D::CLandscapeVegetableBlock::_VegetableSortBlock[NL3D_TESSBLOCK_TILESIZE] [private] +
+
+ + + + + +
+   + + +

+The sortBlocks generated by this vegetable block, one for each tilematerial. +

+ +

+Definition at line 102 of file landscape_vegetable_block.h. +

+Referenced by CLandscapeVegetableBlock(), createVegetableIGForDistType(), init(), release(), and update().

+

+ + + + +
+ + +
CTessNodeList* NL3D::CTessNodeList::Next [inherited] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 44 of file tess_list.h. +

+Referenced by NL3D::CVegetableManager::addInstance(), NL3D::CLandscape::computeDynamicLighting(), NL3D::CPatch::computeGeomorphAlphaFar1VertexListVB(), NL3D::CPatch::computeGeomorphFar0VertexListVB(), NL3D::CPatch::computeGeomorphTileVertexListVB(), NL3D::CPatch::computeGeomorphVertexList(), NL3D::CPatch::debugAllocationMarkIndicesFarList(), NL3D::CPatch::debugAllocationMarkIndicesNearList(), NL3D::CPatch::fillFar0DLMUvOnlyVertexListVB(), NL3D::CPatch::fillFar0VertexListVB(), NL3D::CPatch::fillFar1DLMUvOnlyVertexListVB(), NL3D::CPatch::fillFar1VertexListVB(), NL3D::CPatch::fillTileVertexListVB(), NL3D::CLandscape::getDynamicLightingMemoryLoad(), NL3D::CTessBlock::refillFaceVectorFar0(), NL3D::CTessBlock::refillFaceVectorFar1(), NL3D::CTessBlock::refillFaceVectorTile(), NL3D::CLandscape::refine(), NL3D::CVegetableManager::render(), NL3D::CLandscape::render(), NL3D::CPatch::updateFar0VBAlloc(), NL3D::CPatch::updateFar1VBAlloc(), NL3D::CVegetableSortBlock::updateSortBlock(), and NL3D::CPatch::updateTileVBAlloc().

+

+ + + + +
+ + +
CTessNodeList* NL3D::CTessNodeList::Prec [inherited] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 43 of file tess_list.h. +

+Referenced by NL3D::CTessNodeList::CTessNodeList().

+


The documentation for this class was generated from the following files: +
Generated on Tue Mar 16 06:49:17 2004 for NeL by + +doxygen +1.3.6
+ + -- cgit v1.2.1