- Timestamp:
- 01/09/09 02:16:38 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/PvsCollectionRenderer.cpp
r3258 r3259 23 23 void PvsCollectionRenderer::Traverse() 24 24 { 25 mPIS.clear(); 26 25 27 //////////// 26 28 //-- part1: do frustum culling + pvs … … 49 51 } 50 52 53 int pisSize = (int)mPIS.size(); 54 55 51 56 //////////// 52 57 //-- part2: test the potentially invisible nodes … … 57 62 58 63 OcclusionQuery *query = mQueryHandler.RequestQuery(); 59 64 query->Reset(); 65 60 66 int querySize = 50; 61 67 … … 87 93 probablyVisibleNodes.clear(); 88 94 89 95 int qsize = (int)queries.size(); 96 int fqueries = 0; 97 90 98 // get query results: collect probably visible nodes 91 99 while (!queries.empty()) … … 98 106 if (visiblePixels > 0) 99 107 { 108 ++ fqueries; 109 100 110 BvhNodeContainer::const_iterator bit, bit_end = q->GetNodes().end(); 101 111 … … 109 119 } 110 120 121 //cout << "probably visible: " << fqueries << " of " << qsize << " (" << (int)probablyVisibleNodes.size() << " of " << pisSize << " nodes)" << endl; 122 123 111 124 112 125 ////////////// 113 126 //-- part4: test probably visible nodes individually, update pvs of current view cell 114 127 115 return; 116 //if (!mViewCell) return; 128 if (!mViewCell) return; 117 129 118 130 // query all nodes individually … … 122 134 { 123 135 BvhNode *n = *bit; 124 queries.push(IssueOcclusionQuery(n)); 136 137 // node intersects near plane => 138 // add immediately because testing the bb could fail 139 if (mBvh->IntersectsNearPlane(n)) 140 { 141 mViewCell->mPvs.AddEntry(mBvh, n); 142 } 143 else 144 { 145 queries.push(IssueOcclusionQuery(n)); 146 } 125 147 } 126 148 … … 132 154 133 155 const int visiblePixels = q->GetQueryResult(); 134 156 135 157 if (visiblePixels > 0) 136 158 { 137 // add node to pvs 138 int geometrySize; 139 SceneEntity **entities; 140 entities = mBvh->GetGeometry(q->GetFrontNode(), geometrySize); 141 142 for (int i = 0; i < geometrySize; ++ i) 143 { 144 mViewCell->mPvs.AddEntry(entities[i]); 145 } 159 mViewCell->mPvs.AddEntry(mBvh, q->GetFrontNode()); 146 160 } 147 161 }
Note: See TracChangeset
for help on using the changeset viewer.