Changeset 1737 for GTP/trunk/Lib/Vis/Preprocessing/src/BvHierarchy.cpp
- Timestamp:
- 11/09/06 19:41:31 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/BvHierarchy.cpp
r1736 r1737 2421 2421 void BvHierarchy::CollectObjects(const AxisAlignedBox3 &box, ObjectContainer &objects) 2422 2422 { 2423 stack<BvhNode *> nodeStack; 2424 2425 nodeStack.push(mRoot); 2426 2427 while (!nodeStack.empty()) 2428 { 2429 BvhNode *node = nodeStack.top(); 2430 2431 nodeStack.pop(); 2432 2433 if (node->IsLeaf()) 2434 { 2435 BvhLeaf *leaf = (BvhLeaf *)node; 2436 2437 ObjectContainer::const_iterator oit, oit_end = leaf->mObjects.end(); 2438 2439 for (oit = leaf->mObjects.begin(); oit != oit_end; ++oit) 2440 { 2441 Intersectable *object = *oit; 2442 if (Overlap(box, object->GetBox())) 2443 { 2444 object->Mail(); 2445 objects.push_back(object); 2446 } 2423 stack<BvhNode *> nodeStack; 2424 2425 nodeStack.push(mRoot); 2426 2427 while (!nodeStack.empty()) 2428 { 2429 BvhNode *node = nodeStack.top(); 2430 2431 nodeStack.pop(); 2432 2433 if (node->IsLeaf()) 2434 { 2435 BvhLeaf *leaf = (BvhLeaf *)node; 2436 if (Overlap(box, leaf->GetBoundingBox())) { 2437 Intersectable *object = GetOrCreateBvhIntersectable(leaf); 2438 if (!object->Mailed()) { 2439 object->Mail(); 2440 objects.push_back(object); 2447 2441 } 2442 } 2448 2443 } 2449 2450 { 2451 2452 2453 2454 2455 2456 2457 2458 } 2459 } 2460 } 2461 2462 } 2444 else 2445 { 2446 BvhInterior *interior = (BvhInterior *)node; 2447 2448 if (Overlap(box, interior->GetBoundingBox())) 2449 nodeStack.push(interior->GetFront()); 2450 2451 if (Overlap(box, interior->GetBoundingBox())) 2452 nodeStack.push(interior->GetBack()); 2453 } 2454 } 2455 } 2456 2457 }
Note: See TracChangeset
for help on using the changeset viewer.