Ignore:
Timestamp:
08/03/05 11:15:30 (19 years ago)
Author:
bittner
Message:

basic sampling strategies

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibilityPreprocessor/src/KdTree.cpp

    r181 r191  
    710710  return neighbors.size(); 
    711711} 
     712 
     713void 
     714KdTree::CollectLeaves(vector<KdLeaf *> &leaves) 
     715{ 
     716  stack<KdNode *> nodeStack; 
     717  nodeStack.push(mRoot); 
     718 
     719  while (!nodeStack.empty()) { 
     720    KdNode *node = nodeStack.top(); 
     721    nodeStack.pop(); 
     722    if (node->IsLeaf()) { 
     723      KdLeaf *leaf = (KdLeaf *)node; 
     724      leaves.push_back(leaf); 
     725    } else { 
     726      KdInterior *interior = (KdInterior *)node; 
     727      nodeStack.push(interior->mBack); 
     728      nodeStack.push(interior->mFront); 
     729    } 
     730  } 
     731} 
     732 
     733 
     734int 
     735KdTree::CollectLeafPvs() 
     736{ 
     737  int totalPvsSize = 0; 
     738  stack<KdNode *> nodeStack; 
     739   
     740  nodeStack.push(mRoot); 
     741   
     742  while (!nodeStack.empty()) { 
     743    KdNode *node = nodeStack.top(); 
     744    nodeStack.pop(); 
     745    if (node->IsLeaf()) { 
     746      KdLeaf *leaf = (KdLeaf *)node; 
     747      for (int j=0; j < leaf->mObjects.size(); j++) { 
     748        Intersectable *object = leaf->mObjects[j]; 
     749        if (!object->Mailed()) { 
     750          object->Mail(); 
     751          // add this node to pvs of all nodes it can see 
     752          KdPvsMap::iterator ni = object->mKdPvs.mEntries.begin(); 
     753          for (; ni != object->mKdPvs.mEntries.end(); ni++) { 
     754            KdNode *node = (*ni).first; 
     755            // $$ JB TEMPORARY solution -> should add object PVS or explictly computed 
     756            // kd tree PVS 
     757            if (leaf->mKdPvs.AddNodeSample(node)) 
     758              totalPvsSize++; 
     759          } 
     760        } 
     761      } 
     762    } else { 
     763      KdInterior *interior = (KdInterior *)node; 
     764      nodeStack.push(interior->mFront); 
     765      nodeStack.push(interior->mBack); 
     766    } 
     767  } 
     768 
     769  return totalPvsSize; 
     770} 
Note: See TracChangeset for help on using the changeset viewer.