Changeset 2669 for GTP/trunk/Lib/Vis/Preprocessing/src/GvsPreprocessor.cpp
- Timestamp:
- 04/30/08 10:09:52 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/GvsPreprocessor.cpp
r2667 r2669 20 20 21 21 #define GVS_DEBUG 0 22 22 #define NOT_ACCOUNTED_OBJECT 0 23 #define ACCOUNTED_OBJECT 2 24 #define SHOW_QT_VISUALIZATION 0 25 26 static const float MIN_DIST = 0.001f; 27 28 static ObjectContainer myobjects; 29 30 31 /** Visualization structure for the GVS algorithm. 32 */ 23 33 struct VizStruct 24 34 { … … 28 38 }; 29 39 30 31 static const float MIN_DIST = 0.001f;32 33 static ObjectContainer myobjects;34 40 static vector<VizStruct> vizContainer; 41 42 35 43 36 44 … … 153 161 //newRay->mFlags |= VssRay::ReverseSample; 154 162 155 // if ray is not further processed => delete ray 156 if (!HandleRay(newRay)) 157 { 158 //delete newRay; 159 } 163 // check if ray is not further processed (ray not deleted because using ray pool) 164 HandleRay(newRay); 160 165 161 166 return 1; … … 164 169 return 0; 165 170 } 171 172 173 void GvsPreprocessor::CountObject(Intersectable *triObj) 174 { 175 if ((triObj->mCounter != (NOT_ACCOUNTED_OBJECT + 1)) && (triObj->mCounter != (ACCOUNTED_OBJECT + 1))) 176 { 177 ++ triObj->mCounter; 178 ++ mGenericStats2; 179 } 180 } 181 182 183 void GvsPreprocessor::UpdateStatsForVisualization(KdIntersectable *kdInt) 184 { 185 mViewCellsManager->UpdateStatsForViewCell(mCurrentViewCell, kdInt); 186 187 // count new objects in pvs due to kd node conversion 188 myobjects.clear(); 189 mKdTree->CollectObjects(kdInt->GetItem(), myobjects); 190 191 ObjectContainer::const_iterator oit, oit_end = myobjects.end(); 192 193 for (oit = myobjects.begin(); oit != oit_end; ++ oit) 194 CountObject(*oit); 195 } 166 196 167 197 … … 189 219 Intersectable *obj = ray.mTerminationObject; 190 220 191 if (obj->mCounter < 2) 221 // counter < 2 => not accounted for yet 222 if (obj->mCounter < ACCOUNTED_OBJECT) 192 223 { 193 obj->mCounter += 2;224 obj->mCounter += ACCOUNTED_OBJECT; 194 225 mTrianglePvs.push_back(obj); 195 226 196 227 mGenericStats = mTrianglePvs.size(); 197 228 198 // if using kd pvs, exchange the triangle with the node in thepvs229 // exchange the triangle with the node in the pvs for kd pvs 199 230 if (mUseKdPvs) 200 231 { … … 203 234 if (!node->Mailed()) 204 235 { 236 // add to pvs 205 237 node->Mail(); 206 238 KdIntersectable *kdInt = mKdTree->GetOrCreateKdIntersectable(node); 207 239 mCurrentViewCell->GetPvs().AddSampleDirty(kdInt, 1.0f); 208 //mCurrentViewCell->GetPvs().AddSampleDirtyCheck(kdInt, 1.0f); 209 210 mViewCellsManager->UpdateStatsForViewCell(mCurrentViewCell, kdInt); 211 myobjects.clear(); 212 mKdTree->CollectObjects(node, myobjects); 213 214 // account for kd object pvs 215 ObjectContainer::const_iterator oit, oit_end = myobjects.end(); 216 217 for (oit = myobjects.begin(); oit != oit_end; ++ oit) 218 { 219 TriangleIntersectable *triObj = static_cast<TriangleIntersectable *>(*oit); 220 221 if ((triObj->mCounter != 1) && (triObj->mCounter != 3)) 222 { 223 ++ triObj->mCounter; 224 ++ mGenericStats2; 225 } 226 } 227 } 240 241 if (SHOW_QT_VISUALIZATION) UpdateStatsForVisualization(kdInt); 242 } 228 243 } 229 244 … … 902 917 ObjectContainer kdobjects; 903 918 mKdTree->CollectKdObjects(box, kdobjects); 904 //vector<KdLeaf *>::const_iterator lit, lit_end = leaves.end(); 905 //for (lit = leaves.begin(); lit != lit_end; ++ lit) 919 906 920 ObjectContainer::const_iterator oit, oit_end = kdobjects.end(); 921 907 922 for (oit = kdobjects.begin(); oit != oit_end; ++ oit) 908 923 { … … 912 927 //mCurrentViewCell->GetPvs().AddSampleDirty(kdInt, 1.0f); 913 928 mCurrentViewCell->GetPvs().AddSampleDirtyCheck(kdInt, 1.0f); 929 914 930 mViewCellsManager->UpdateStatsForViewCell(mCurrentViewCell, kdInt); 915 931 … … 924 940 TriangleIntersectable *triObj = static_cast<TriangleIntersectable *>(*oit); 925 941 926 // account for the overall pvs 927 if ((triObj->mCounter != 1) && (triObj->mCounter != 3)) 928 { 929 ++ triObj->mCounter; 930 ++ mGenericStats2; 931 } 942 CountObject(triObj); 932 943 933 944 // the triangle itself intersects 934 945 if (box.Intersects(triObj->GetItem())) 935 946 { 936 if ((triObj->mCounter < 2))947 if ((triObj->mCounter < ACCOUNTED_OBJECT)) 937 948 { 938 triObj->mCounter += 2;949 triObj->mCounter += ACCOUNTED_OBJECT; 939 950 940 951 mTrianglePvs.push_back(triObj); … … 957 968 958 969 for (oit = mObjects.begin(); oit != oit_end; ++ oit) 959 (*oit)->mCounter = 0;970 (*oit)->mCounter = NOT_ACCOUNTED_OBJECT; 960 971 961 972 ComputeViewCell(vc); … … 986 997 987 998 for (oit = mObjects.begin(); oit != oit_end; ++ oit) 988 (*oit)->mCounter = 0;999 (*oit)->mCounter = NOT_ACCOUNTED_OBJECT; 989 1000 990 1001 ComputeViewCell(vc); … … 1049 1060 1050 1061 // hack: reset counter 1051 (*oit)->mCounter = 0;1062 (*oit)->mCounter = NOT_ACCOUNTED_OBJECT; 1052 1063 1053 1064 if (!bv || bv->Mailed()) … … 1252 1263 ProcessViewCell(); 1253 1264 1254 //mGvsStats.mTrianglePvs = mCurrentViewCell->GetPvs().GetSize();1255 1265 mGvsStats.mTrianglePvs = (int)mTrianglePvs.size(); 1256 1266 mGvsStats.mTotalTrianglePvs += mGvsStats.mTrianglePvs;
Note: See TracChangeset
for help on using the changeset viewer.