Changeset 1141 for GTP/trunk/Lib/Vis/Preprocessing/src/Pvs.cpp
- Timestamp:
- 07/18/06 19:03:14 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/Pvs.cpp
r863 r1141 1 1 #include <iostream> 2 #include <stack> 2 3 #include "Pvs.h" 4 #include "Intersectable.h" 5 #include "KdIntersectable.h" 6 #include "KdTree.h" 7 #include "common.h" 8 3 9 4 10 namespace GtpVisibilityPreprocessor { 5 11 6 int 7 KdPvs::Compress()12 13 int KdPvs::Compress() 8 14 { 9 15 return 0; // TODO 10 16 } 11 17 18 19 int ObjectPvs::CountPvs() const 20 { 21 int pvs = 0; 22 23 Intersectable::NewMail(); 24 KdNode::NewMail(); 25 26 ObjectPvsMap::const_iterator it, it_end = mEntries.end(); 27 28 for (it = mEntries.begin(); it != it_end; ++ it) 29 { 30 Intersectable *obj = (*it).first; 31 32 if (obj->Type() == Intersectable::KD_INTERSECTABLE) 33 { 34 KdIntersectable *kdObj = dynamic_cast<KdIntersectable *>(obj); 35 36 stack<KdNode *> tStack; 37 38 tStack.push(kdObj->GetNode()); 39 40 while (!tStack.empty()) 41 { 42 KdNode *node = tStack.top(); 43 tStack.pop(); 44 45 // already processed node (objects in pvs) 46 if (node->Mailed()) 47 continue; 48 49 node->Mail(); 50 51 if (node->IsLeaf()) 52 { 53 54 KdLeaf *leaf = dynamic_cast<KdLeaf *>(node); 55 56 pvs += (int)(leaf->mObjects.size() - leaf->mMultipleObjects.size()); 57 58 ObjectContainer::const_iterator it, it_end = leaf->mMultipleObjects.end(); 59 { 60 Intersectable *object = *it; 61 62 if (!object->Mailed()) 63 { 64 object->Mail(); 65 ++ pvs; 66 } 67 } 68 } 69 else 70 { 71 KdInterior *interior = dynamic_cast<KdInterior *>(node); 72 73 tStack.push(interior->mFront); 74 tStack.push(interior->mBack); 75 } 76 } 77 } 78 else 79 { 80 ++ pvs; 81 } 82 } 83 84 return pvs; 12 85 } 86 87 }
Note: See TracChangeset
for help on using the changeset viewer.