Changeset 507 for trunk/VUT/GtpVisibilityPreprocessor/src/KdTree.cpp
- Timestamp:
- 01/07/06 10:50:29 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/GtpVisibilityPreprocessor/src/KdTree.cpp
r505 r507 941 941 KdTree::GetRandomLeaf(const bool onlyUnmailed) 942 942 { 943 943 stack<KdNode *> nodeStack; 944 944 nodeStack.push(mRoot); 945 946 945 946 int mask = rand(); 947 947 948 948 while (!nodeStack.empty()) { … … 967 967 968 968 int 969 CastBeam( 970 Beam &beam 971 ) 972 { 973 974 975 return 0; 976 } 969 KdTree::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.