Changeset 2066 for GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE
- Timestamp:
- 01/31/07 01:51:57 (18 years ago)
- Location:
- GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreBoundingBoxConverter.h
r1676 r2066 21 21 typedef vector<Entity *> EntityContainer; 22 22 23 class ObjectsIntersectable: public GtpVisibilityPreprocessor::IntersectableWrapper<EntityContainer *>23 class EngineIntersectable: public GtpVisibilityPreprocessor::IntersectableWrapper<EntityContainer *> 24 24 { 25 25 public: 26 ObjectsIntersectable(EntityContainer *item):26 EngineIntersectable(EntityContainer *item): 27 27 GtpVisibilityPreprocessor::IntersectableWrapper<EntityContainer *>(item) {} 28 28 29 29 // hack 30 ObjectsIntersectable::~ObjectsIntersectable() 31 { 32 //CLEAR_CONTAINER(*mItem); 30 EngineIntersectable::~EngineIntersectable() 31 { 33 32 delete mItem; 34 33 } … … 36 35 int Type() const 37 36 { 38 return Intersectable:: OBJECTS_INTERSECTABLE;37 return Intersectable::ENGINE_INTERSECTABLE; 39 38 } 40 39 }; … … 90 89 vector<Entity *> &objects) const; 91 90 91 /// this can be any scene manager 92 92 T *mSceneMgr; 93 93 }; … … 108 108 109 109 // get intersecting scene nodes 110 // note: this function must be provided by scene manager 110 111 mSceneMgr->findNodesIn(mybox, sceneNodeList, NULL); 111 112 … … 169 170 return bestFittingObj; 170 171 } 171 //----------------------------------------------------------------------- 172 /*template<typename T> 172 173 174 #define ENLARGE_OBJECT_BBOX 0 175 #define ENLRAGE_NODE_BBOX 0 176 template<typename T> 173 177 void PlatFormBoundingBoxConverter<T>::FindIntersectingObjects(const AxisAlignedBox &box, 174 178 EntityContainer &objects) const 175 { //return;179 { 176 180 list<SceneNode *> sceneNodeList; 177 181 178 // get intersecting scene nodes (= candidates) 182 // find intersecting scene nodes to get candidates for intersection 183 // note: this function has to be provided by scene manager 184 #if ENLARGE_NODE_BBOX 185 // make search radius larger 179 186 AxisAlignedBox mybox = EnlargeBox(box); 180 187 mSceneMgr->findNodesIn(mybox, sceneNodeList, NULL); 181 //mSceneMgr->findNodesIn(box, sceneNodeList, NULL);182 188 183 189 list<SceneNode *>::const_iterator sit, sit_end = sceneNodeList.end(); 184 190 185 GtpVisibilityPreprocessor::AxisAlignedBox3 nodeBox = OgreTypeConverter::ConvertFromOgre(mybox); 186 //GtpVisibilityPreprocessor::AxisAlignedBox3 nodeBox = OgreTypeConverter::ConvertFromOgre(box); 187 188 // find really intersecting objects 191 GtpVisibilityPreprocessor::AxisAlignedBox3 nodeBox = 192 OgreTypeConverter::ConvertFromOgre(mybox); 193 #else 194 195 mSceneMgr->findNodesIn(box, sceneNodeList, NULL); 196 197 GtpVisibilityPreprocessor::AxisAlignedBox3 nodeBox = 198 OgreTypeConverter::ConvertFromOgre(box); 199 #endif 200 201 // loop through the intersected scene nodes 189 202 for (sit = sceneNodeList.begin(); sit != sceneNodeList.end(); ++ sit) 190 203 { … … 192 205 SceneNode::ObjectIterator oit = sn->getAttachedObjectIterator(); 193 206 207 // find the objects that intersect the box 194 208 while (oit.hasMoreElements()) 195 209 { … … 198 212 // we are only interested in scene entities 199 213 if (mo->getMovableType() != "Entity") 214 continue; 215 216 // get the bounding box of the objects 217 #if ENLARGE_OBJECT_BBOX) 218 // compare with enlarged entitiy box 219 const AxisAlignedBox bbox = EnlargeBox(mo->getWorldBoundingBox()); 220 #else 221 const AxisAlignedBox bbox = mo->getWorldBoundingBox(); 222 #endif 223 224 // test for intersection (note: function provided of preprocessor) 225 if (Overlap(nodeBox, OgreTypeConverter::ConvertFromOgre(bbox))) 200 226 { 201 continue;227 objects.push_back(static_cast<Entity *>(mo)); 202 228 } 203 204 //const AxisAlignedBox bbox = EnlargeBox(mo->getWorldBoundingBox());205 const AxisAlignedBox bbox = mo->getWorldBoundingBox();206 207 const bool overlaps = Overlap(nodeBox,208 OgreTypeConverter::ConvertFromOgre(bbox)209 );210 //,0.00001);211 212 if (overlaps)213 {214 objects.push_back(static_cast<Entity *>(mo));215 }216 229 } 217 230 } 218 231 } 219 */220 template<typename T>221 void PlatFormBoundingBoxConverter<T>::FindIntersectingObjects(const AxisAlignedBox &box,222 EntityContainer &objects) const223 {//return;224 list<SceneNode *> sceneNodeList;225 226 // get intersecting scene nodes (= candidates)227 //AxisAlignedBox mybox = EnlargeBox(box);228 //mSceneMgr->findNodesIn(mybox, sceneNodeList, NULL);229 mSceneMgr->findNodesIn(box, sceneNodeList, NULL);230 231 list<SceneNode *>::const_iterator sit, sit_end = sceneNodeList.end();232 233 //GtpVisibilityPreprocessor::AxisAlignedBox3 nodeBox = OgreTypeConverter::ConvertFromOgre(mybox);234 GtpVisibilityPreprocessor::AxisAlignedBox3 nodeBox = OgreTypeConverter::ConvertFromOgre(box);235 236 // find really intersecting objects237 for (sit = sceneNodeList.begin(); sit != sceneNodeList.end(); ++ sit)238 {239 SceneNode *sn = *sit;240 SceneNode::ObjectIterator oit = sn->getAttachedObjectIterator();241 242 while (oit.hasMoreElements())243 {244 MovableObject *mo = oit.getNext();245 246 // we are only interested in scene entities247 if (mo->getMovableType() != "Entity")248 {249 continue;250 }251 252 //const AxisAlignedBox bbox = EnlargeBox(mo->getWorldBoundingBox());253 const AxisAlignedBox bbox = mo->getWorldBoundingBox();254 255 const bool overlaps =256 Overlap(nodeBox, OgreTypeConverter::ConvertFromOgre(bbox));257 258 259 if (overlaps)260 {261 objects.push_back(static_cast<Entity *>(mo));262 }263 }264 }265 }266 232 #if USE_KD_PVS 267 //-------------------------------------------------------------------------268 template<typename T>269 bool PlatFormBoundingBoxConverter<T>::IdentifyObjects(270 const GtpVisibilityPreprocessor::IndexedBoundingBoxContainer &iboxes,271 GtpVisibilityPreprocessor::ObjectContainer &objects) const272 {273 //Ogre::LogManager().logMessage("pvs: intersecting objects");274 const long startTime = GtpVisibilityPreprocessor::GetTime();275 276 GtpVisibilityPreprocessor::IndexedBoundingBoxContainer::277 const_iterator iit, iit_end = iboxes.end();278 279 int i = 0;280 281 for (iit = iboxes.begin(); iit != iit_end; ++ iit, ++ i)282 {283 if (0 && ((i % 1000) == 0))284 {285 std::stringstream d; d << "found " << i << " objects";286 Ogre::LogManager().getSingleton().logMessage(d.str());287 }288 289 const AxisAlignedBox box = OgreTypeConverter::ConvertToOgre((*iit).second);290 291 //GtpVisibilityPreprocessor::ObjectContainer *entryObjects = new EntityContainer();292 EntityContainer *entryObjects = new EntityContainer();293 294 // find all objects that intersect the bounding box295 FindIntersectingObjects(box, *entryObjects);296 297 /*vector<Entity *>::const_iterator mit, mit_end = sceneObjects.end();298 299 for (mit = sceneObjects.begin(); mit != mit_end; ++ mit)300 {301 Entity *ent = *mit;302 // create new mesh instance303 OgreMeshInstance *omi = new OgreGetOrCreateOgreMeshInstance(ent);304 //omi->SetId((*iit).first);305 entryObjects->push_back(omi);306 }*/307 308 ObjectsIntersectable *entry =309 new ObjectsIntersectable(entryObjects);310 entry->SetId((*iit).first);311 //kdObj->mBbox = (*iit).second;312 objects.push_back(entry);313 }314 315 //std::stringstream d; d << "finished object intersection in " << GtpVisibilityPreprocessor::TimeDiff(startTime, GtpVisibilityPreprocessor::GetTime()) * 1e-3 << "secs";316 //Ogre::LogManager().logMessage(d.str());317 318 return true;319 }320 #else321 233 //------------------------------------------------------------------------- 322 234 template<typename T> … … 330 242 for (iit = iboxes.begin(); iit != iit_end; ++ iit) 331 243 { 244 const AxisAlignedBox box = 245 OgreTypeConverter::ConvertToOgre((*iit).second); 246 247 EntityContainer *entryObjects = new EntityContainer(); 248 249 // find all objects that intersect the bounding box 250 FindIntersectingObjects(box, *entryObjects); 251 252 EngineIntersectable *entry = 253 new EngineIntersectable(entryObjects); 254 entry->SetId((*iit).first); 255 256 objects.push_back(entry); 257 } 258 259 return true; 260 } 261 #else 262 //------------------------------------------------------------------------- 263 template<typename T> 264 bool PlatFormBoundingBoxConverter<T>::IdentifyObjects( 265 const GtpVisibilityPreprocessor::IndexedBoundingBoxContainer &iboxes, 266 GtpVisibilityPreprocessor::ObjectContainer &objects) const 267 { 268 GtpVisibilityPreprocessor::IndexedBoundingBoxContainer:: 269 const_iterator iit, iit_end = iboxes.end(); 270 271 for (iit = iboxes.begin(); iit != iit_end; ++ iit) 272 { 332 273 const GtpVisibilityPreprocessor::AxisAlignedBox3 box = (*iit).second; 333 274 const AxisAlignedBox currentBox = OgreTypeConverter::ConvertToOgre(box); 334 275 335 276 Entity *ent = FindBestFittingObject(currentBox); 336 337 if (ent) 338 { 339 // create new mesh instance 340 OgreMeshInstance *omi = new OgreMeshInstance(ent); 341 omi->SetId((*iit).first); 342 objects.push_back(omi); 343 } 277 if (!ent) continue; 278 279 // create new mesh instance 280 OgreMeshInstance *omi = new OgreMeshInstance(ent); 281 omi->SetId((*iit).first); 282 objects.push_back(omi); 344 283 } 345 284 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreMeshInstance.h
r1593 r2066 10 10 Wrapper for Ogre object intances for use with the preprocessed view cells. 11 11 */ 12 #if 0 12 13 class __declspec(dllexport) OgreMeshInstance: public GtpVisibilityPreprocessor::Intersectable 13 14 { … … 56 57 }; 57 58 59 58 60 } // namespace Ogre 59 61 #endif 60 62 #endif // OgreMeshIntance -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBvHierarchy.cpp
r1344 r2066 1536 1536 it != leaf->mBvhRenderables.end(); it ++) 1537 1537 { 1538 SceneNode *sn = dynamic_cast<SceneNode *>(*it);1538 SceneNode *sn = static_cast<SceneNode *>(*it); 1539 1539 1540 1540 if (sn != exclude) … … 1618 1618 while (it != end) 1619 1619 { 1620 scenenode = dynamic_cast<BvHierarchySceneNode *>(*it);1620 scenenode = static_cast<BvHierarchySceneNode *>(*it); 1621 1621 mBuildLog->logMessage(pad + "# Leaf level " + 1622 1622 StringConverter::toString(node->getLevel()) + -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBvHierarchyInterface.cpp
r1320 r2066 132 132 } 133 133 134 dynamic_cast<BvHierarchySceneManager *>(mSceneManager)->getRenderQueue()->addRenderable(box);134 static_cast<BvHierarchySceneManager *>(mSceneManager)->getRenderQueue()->addRenderable(box); 135 135 } 136 136 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBvHierarchySceneManager.cpp
r1816 r2066 1357 1357 if (entry.mObject) 1358 1358 { 1359 OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(entry.mObject);1359 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry.mObject); 1360 1360 omi->GetEntity()->setVisible(load); 1361 1361 } -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTree.cpp
r1593 r2066 1528 1528 it != leaf->mKdRenderables.end(); it ++) 1529 1529 { 1530 SceneNode *sn = dynamic_cast<SceneNode *>(*it);1530 SceneNode *sn = static_cast<SceneNode *>(*it); 1531 1531 1532 1532 if (sn != exclude) … … 1606 1606 while (it != end) 1607 1607 { 1608 scenenode = dynamic_cast<KdTreeSceneNode *>(*it);1608 scenenode = static_cast<KdTreeSceneNode *>(*it); 1609 1609 mBuildLog->logMessage(pad + "# Leaf level " + 1610 1610 StringConverter::toString(node->getLevel()) + -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTreeHierarchyInterface.cpp
r1304 r2066 132 132 } 133 133 134 dynamic_cast<KdTreeSceneManager *>(mSceneManager)->getRenderQueue()->addRenderable(box);134 static_cast<KdTreeSceneManager *>(mSceneManager)->getRenderQueue()->addRenderable(box); 135 135 } 136 136 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTreeSceneManager.cpp
r1816 r2066 1346 1346 ////////// 1347 1347 //-- set PVS of view cell visible 1348 1348 1349 GtpVisibilityPreprocessor::ObjectPvsIterator pit = vc->GetPvs().GetIterator(); 1349 1350 … … 1354 1355 if (entry.mObject) 1355 1356 { 1356 OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(entry.mObject);1357 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry.mObject); 1357 1358 omi->GetEntity()->setVisible(load); 1358 1359 } -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreMeshInstance.cpp
r1593 r2066 4 4 namespace Ogre 5 5 { 6 7 6 OgreMeshInstance::OgreMeshInstance(Entity *ent): 8 7 GtpVisibilityPreprocessor::Intersectable(), mEntity(ent) … … 74 73 return s; 75 74 } 76 77 75 } -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOcclusionCullingSceneManager.cpp
r1823 r2066 28 28 29 29 //----------------------------------------------------------------------- 30 OcclusionCullingSceneManager::OcclusionCullingSceneManager(const String& name, 31 GtpVisibility::VisibilityManager *visManager): 30 OcclusionCullingSceneManager::OcclusionCullingSceneManager( 31 const String& name, 32 GtpVisibility::VisibilityManager *visManager): 32 33 TerrainSceneManager(name), 33 34 mVisibilityManager(visManager), … … 432 433 433 434 if (obj->Type() == 434 GtpVisibilityPreprocessor::Intersectable:: OBJECTS_INTERSECTABLE)435 GtpVisibilityPreprocessor::Intersectable::ENGINE_INTERSECTABLE) 435 436 { 436 ObjectsIntersectable *oi = dynamic_cast<ObjectsIntersectable *>(obj);437 EngineIntersectable *oi = static_cast<EngineIntersectable *>(obj); 437 438 438 439 EntityContainer *entries = oi->GetItem(); … … 457 458 case GtpVisibilityPreprocessor::Intersectable::OGRE_MESH_INSTANCE: 458 459 { 459 OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(obj);460 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(obj); 460 461 omi->GetEntity()->_updateRenderQueue(getRenderQueue()); 461 462 } 462 463 break; 463 464 464 case GtpVisibilityPreprocessor::Intersectable:: OBJECTS_INTERSECTABLE:465 case GtpVisibilityPreprocessor::Intersectable::ENGINE_INTERSECTABLE: 465 466 { 466 ObjectsIntersectable *oi = dynamic_cast<ObjectsIntersectable *>(obj);467 EngineIntersectable *oi = static_cast<EngineIntersectable *>(obj); 467 468 468 469 EntityContainer *entries = oi->GetItem(); … … 471 472 for (eit = entries->begin(); eit != eit_end; ++ eit) 472 473 { 473 //OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(*eit);474 //OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(*eit); 474 475 Entity *ent = *eit; 475 476 Any newAny = ent->getUserAny(); … … 1394 1395 case GtpVisibilityPreprocessor::Intersectable::OGRE_MESH_INSTANCE: 1395 1396 { 1396 OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(entry);1397 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry); 1397 1398 omi->GetEntity()->setVisible(visible); 1398 1399 //GtpVisibilityPreprocessor::Debug << "assigned id " << omi->GetId() << endl; 1399 1400 } 1400 1401 break; 1401 case GtpVisibilityPreprocessor::Intersectable:: OBJECTS_INTERSECTABLE:1402 case GtpVisibilityPreprocessor::Intersectable::ENGINE_INTERSECTABLE: 1402 1403 { 1403 //GtpVisibilityPreprocessor::ObjectsIntersectable *oi = 1404 // dynamic_cast<GtpVisibilityPreprocessor::ObjectsIntersectable *>(entry); 1405 ObjectsIntersectable *oi = dynamic_cast<ObjectsIntersectable *>(entry); 1406 1407 //GtpVisibilityPreprocessor::ObjectContainer *entries = oi->GetItem(); 1404 EngineIntersectable *oi = static_cast<EngineIntersectable *>(entry); 1405 1408 1406 EntityContainer *entries = oi->GetItem(); 1409 1407 EntityContainer::const_iterator eit, … … 1411 1409 for (eit = entries->begin(); eit != eit_end; ++ eit) 1412 1410 { 1413 //OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(*eit);1414 1411 Entity *ent = *eit; 1415 1412 ent->setVisible(visible); 1416 //GtpVisibilityPreprocessor::Debug << "assigned id " << omi->GetId() << endl;1417 1413 } 1418 1414 } … … 1484 1480 case GtpVisibilityPreprocessor::Intersectable::OGRE_MESH_INSTANCE: 1485 1481 { 1486 OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(obj);1482 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(obj); 1487 1483 omi->GetEntity()->setVisible(load); 1488 1484 //GtpVisibilityPreprocessor::Debug << "assigned id " << omi->GetId() << endl; 1489 1485 } 1490 1486 break; 1491 case GtpVisibilityPreprocessor::Intersectable:: OBJECTS_INTERSECTABLE:1487 case GtpVisibilityPreprocessor::Intersectable::ENGINE_INTERSECTABLE: 1492 1488 { 1493 //GtpVisibilityPreprocessor:: ObjectsIntersectable *oi =1494 // dynamic_cast<GtpVisibilityPreprocessor::ObjectsIntersectable *>(entry);1495 ObjectsIntersectable *oi = dynamic_cast<ObjectsIntersectable *>(obj);1489 //GtpVisibilityPreprocessor::EngineIntersectable *oi = 1490 // static_cast<GtpVisibilityPreprocessor::EngineIntersectable *>(entry); 1491 EngineIntersectable *oi = static_cast<EngineIntersectable *>(obj); 1496 1492 1497 1493 //GtpVisibilityPreprocessor::ObjectContainer *entries = oi->GetItem(); … … 1502 1498 for (eit = entries->begin(); eit != eit_end; ++ eit) 1503 1499 { 1504 //OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(*eit);1500 //OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(*eit); 1505 1501 //omi->GetEntity()->setVisible(load); 1506 1502 Entity *ent = *eit; -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOcclusionQueriesQueryManager.cpp
r1602 r2066 27 27 // we need access to the scene manager and the rendersystem 28 28 PlatformHierarchyInterface *pfHierarchyInterface = 29 // dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface);29 //static_cast<PlatformHierarchyInterface *>(mHierarchyInterface); 30 30 static_cast<PlatformHierarchyInterface *>(mHierarchyInterface); 31 31 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOctreeHierarchyInterface.cpp
r944 r2066 116 116 octant->setLastRendered(mFrameId); 117 117 OctreeSceneManager *ocm = 118 dynamic_cast<OctreeSceneManager *>(mSceneManager);118 static_cast<OctreeSceneManager *>(mSceneManager); 119 119 120 120 ocm->_renderOctant(mCamera, octant, mOnlyShadowCasters, mLeavePassesInQueue); … … 172 172 } 173 173 174 // dynamic_cast<OctreeSceneManager *>(mSceneManager)->getBoxes()->push_back(box);175 dynamic_cast<OctreeSceneManager *>(mSceneManager)->getBoxes()->push_back(box);174 //static_cast<OctreeSceneManager *>(mSceneManager)->getBoxes()->push_back(box); 175 static_cast<OctreeSceneManager *>(mSceneManager)->getBoxes()->push_back(box); 176 176 } 177 177 //----------------------------------------------------------------------- -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformQueryManager.cpp
r925 r2066 33 33 bool relativeVisibility) 34 34 { 35 SceneManager *sm = // dynamic_cast<PlatformHierarchyInterface *>35 SceneManager *sm = //static_cast<PlatformHierarchyInterface *> 36 36 static_cast<PlatformHierarchyInterface *> 37 37 (mHierarchyInterface)->GetSceneManager(); … … 96 96 // we need access to the scene manager and the rendersystem 97 97 PlatformHierarchyInterface *pfHierarchyInterface = 98 // dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface);98 //static_cast<PlatformHierarchyInterface *>(mHierarchyInterface); 99 99 static_cast<PlatformHierarchyInterface *>(mHierarchyInterface); 100 100 … … 195 195 196 196 SceneManager *sm = 197 // dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface)->GetSceneManager();197 //static_cast<PlatformHierarchyInterface *>(mHierarchyInterface)->GetSceneManager(); 198 198 static_cast<PlatformHierarchyInterface *>(mHierarchyInterface)->GetSceneManager(); 199 199
Note: See TracChangeset
for help on using the changeset viewer.