Ignore:
Timestamp:
01/07/06 10:50:29 (18 years ago)
Author:
bittner
Message:

Preparation for hw based sampling

File:
1 edited

Legend:

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

    r505 r507  
    941941KdTree::GetRandomLeaf(const bool onlyUnmailed) 
    942942{ 
    943         stack<KdNode *> nodeStack; 
     943  stack<KdNode *> nodeStack; 
    944944  nodeStack.push(mRoot); 
    945  
    946         int mask = rand(); 
     945   
     946  int mask = rand(); 
    947947         
    948948  while (!nodeStack.empty()) { 
     
    967967 
    968968int 
    969 CastBeam( 
    970                  Beam &beam 
    971                  ) 
    972 { 
    973    
    974  
    975   return 0; 
    976 } 
     969KdTree::CastBeam( 
     970                                 Beam &beam 
     971                                 ) 
     972{ 
     973  stack<KdNode *> nodeStack; 
     974  nodeStack.push(mRoot); 
     975   
     976  while (!nodeStack.empty()) { 
     977    KdNode *node = nodeStack.top(); 
     978    nodeStack.pop(); 
     979         
     980        int side = beam.ComputeIntersection(GetBox(node)); 
     981        switch (side) { 
     982        case -1: 
     983          beam.mKdNodes.push_back(node); 
     984          break; 
     985        case 0: 
     986          if (node->IsLeaf()) 
     987                beam.mKdNodes.push_back(node); 
     988          else { 
     989                KdInterior *interior = (KdInterior *)node; 
     990                KdNode *first = interior->mBack; 
     991                KdNode *second = interior->mFront; 
     992                 
     993                if (interior->mAxis < 3) { 
     994                  // spatial split -> decide on the order of the nodes 
     995                  if (beam.mPlanes[0].mNormal[interior->mAxis] > 0) 
     996                        swap(first, second); 
     997                } 
     998 
     999                nodeStack.push(first); 
     1000                nodeStack.push(second); 
     1001          } 
     1002          break; 
     1003          // default: cull 
     1004        } 
     1005  } 
     1006 
     1007  return beam.mKdNodes.size(); 
     1008} 
Note: See TracChangeset for help on using the changeset viewer.