Changeset 191 for trunk/VUT/GtpVisibilityPreprocessor/src/KdTree.cpp
- Timestamp:
- 08/03/05 11:15:30 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/GtpVisibilityPreprocessor/src/KdTree.cpp
r181 r191 710 710 return neighbors.size(); 711 711 } 712 713 void 714 KdTree::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 734 int 735 KdTree::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.