Ignore:
Timestamp:
10/10/06 01:27:11 (18 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBoundingBoxConverter.cpp

    r1296 r1595  
    99namespace Ogre 
    1010{ 
    11 //------------------------------------------------------------------------- 
    12 OgreBoundingBoxConverter::OgreBoundingBoxConverter(OctreeSceneManager *sm): 
    13 mOctSceneMgr(sm), mKdSceneMgr(0) 
    14 { 
    15 } 
    16 //------------------------------------------------------------------------- 
    17 OgreBoundingBoxConverter::OgreBoundingBoxConverter(KdTreeSceneManager *sm): 
    18 mOctSceneMgr(0), mKdSceneMgr(sm) 
    19 { 
    20 } 
    21 //------------------------------------------------------------------------- 
    22 bool OgreBoundingBoxConverter::IdentifyObjects(const GtpVisibilityPreprocessor::IndexedBoundingBoxContainer &iboxes, 
    23                                                                                            GtpVisibilityPreprocessor::ObjectContainer &objects) const 
    24 { 
    25         GtpVisibilityPreprocessor::IndexedBoundingBoxContainer:: 
    26                 const_iterator iit, iit_end = iboxes.end(); 
    27    
    28         for (iit = iboxes.begin(); iit != iit_end; ++ iit) 
    29         { 
    30                 const GtpVisibilityPreprocessor::AxisAlignedBox3 box = (*iit).second; 
    31                 const AxisAlignedBox currentBox = OgreTypeConverter::ConvertToOgre(box); 
    32     
    33                 Entity *ent = FindCorrespondingObject(currentBox); 
    34  
    35                 // create new mesh instance 
    36                 OgreMeshInstance *omi = new OgreMeshInstance(ent); 
    37                 omi->SetId((*iit).first); 
    38                 objects.push_back(omi); 
    39         } 
    40  
    41         return true; 
    42 } 
    43 //------------------------------------------------------------------------- 
    44 inline static AxisAlignedBox EnlargeBox(const AxisAlignedBox &box) 
    45 { 
    46         const float eps = 1e-3f; 
    47         const Vector3 veps(eps, eps, eps); 
    48  
    49         Vector3 max = box.getMaximum(); 
    50         Vector3 min = box.getMinimum(); 
    51  
    52         return AxisAlignedBox(min - veps, max + veps); 
    53 } 
    54 //----------------------------------------------------------------------- 
    55 Entity *OgreBoundingBoxConverter::FindCorrespondingObject(const AxisAlignedBox &box) const 
    56 { 
    57         list<SceneNode *> sceneNodeList; 
    58         AxisAlignedBox mybox = EnlargeBox(box); 
    59         //AxisAlignedBox dummy(Vector3(-50000, -50000, -50000), Vector3(50000, 50000, 50000)); 
    60          
    61         // get intersecting scene nodes 
    62         if (mOctSceneMgr) 
    63                 mOctSceneMgr->findNodesIn(mybox, sceneNodeList, NULL); 
    64         else if (mKdSceneMgr) 
    65                 mKdSceneMgr->findNodesIn(mybox, sceneNodeList, NULL); 
    66         else 
    67                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, "Bounding Box Converter cannot " 
    68                 "find appropriate scene manager.", "OgreBoundingBoxConverter::FindCorrespondingObject"); 
    69          
    70  
    71         list<SceneNode *>::const_iterator sit, sit_end = sceneNodeList.end(); 
    72  
    73         // minimal overlap 
    74         float overlap = 0;//1e-6; 
    75  
    76         Entity *bestFittingObj = NULL; 
    77         float bestFit = overlap; 
    78  
    79         // perfect fit threshold 
    80         const float thresh = 1.0 - GtpVisibilityPreprocessor::Limits::Small; 
    8111 
    8212 
    83         // find the bbox which is closest to the current bbox 
    84         for (sit = sceneNodeList.begin(); sit != sceneNodeList.end(); ++ sit) 
    85         { 
    86                 SceneNode *sn = *sit; 
    87                 SceneNode::ObjectIterator oit = sn->getAttachedObjectIterator(); 
    88  
    89         while (oit.hasMoreElements()) 
    90                 { 
    91                         MovableObject *mo = oit.getNext(); 
    92  
    93                         // we are only interested in scene entities 
    94                         if (mo->getMovableType() != "Entity") 
    95                         { 
    96                                 continue; 
    97                         } 
    98                           
    99                         const AxisAlignedBox bbox = EnlargeBox(mo->getWorldBoundingBox()); 
    100                                          
    101  
    102                         // compute measure how much aabbs overlap 
    103                         overlap = RatioOfOverlap(OgreTypeConverter::ConvertFromOgre(mybox), 
    104                                                                          OgreTypeConverter::ConvertFromOgre(bbox)); 
    105          
    106                          if (overlap > bestFit) 
    107                          { 
    108                                  bestFit = overlap; 
    109                          
    110                                  bestFittingObj = static_cast<Entity *>(mo); 
    111  
    112                                  // perfect fit => object found, early exit 
    113                                  if (overlap >= thresh) 
    114                                          return bestFittingObj;                          
    115                          } 
    116                 } 
    117         } 
    118  
    119         if (0) 
    120         { 
    121                 std::stringstream d;  
    122                 if (bestFittingObj) 
    123                         d << "best fit: " << bestFit;      
    124                 else 
    125                         d << "warning, objects do not fit\n" << box; 
    126          
    127                 Ogre::LogManager::getSingleton().logMessage(d.str()); 
    128         } 
    129  
    130         return bestFittingObj; 
    131 } 
    13213 
    13314} 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBvHierarchySceneManager.cpp

    r1593 r1595  
    2727{ 
    2828 
    29 BvHierarchySceneManager::BvHierarchySceneManager(const String& name, GtpVisibility::VisibilityManager *vm): 
     29BvHierarchySceneManager::BvHierarchySceneManager(const String& name,  
     30                                                                                                 GtpVisibility::VisibilityManager *vm): 
    3031SceneManager(name),  
    3132mVisibilityManager(vm),  
     
    13231324        // converter between view cell ids and Ogre entites  
    13241325        GtpVisibilityPreprocessor::IndexedBoundingBoxContainer iboxes; 
    1325 #if 0 
    1326         OgreBoundingBoxConverter bconverter(this); 
    1327  
    1328         // load the view cells assigning the found objects to the pvss 
     1326        BvhBoundingBoxConverter bconverter(this); 
     1327 
     1328        // load the view cells and assigns the objects in the pvs to  
     1329        // the scene objects using the bounding boxes 
    13291330        mViewCellsManager =  
    13301331                GtpVisibilityPreprocessor::ViewCellsManager::LoadViewCells(filename, &mObjects, false, &bconverter); 
    13311332 
    13321333        return (mViewCellsManager != NULL); 
    1333 #endif 
    13341334} 
    13351335//------------------------------------------------------------------------- 
    13361336void BvHierarchySceneManager::applyViewCellPvs(GtpVisibilityPreprocessor::ViewCell *vc,  
    13371337                                                                                                        const bool load) 
    1338 {       // NOTE: should not happen, rather apply view cell representing unbounded space then 
     1338{       // NOTE: should not happen, rather apply view cell  
     1339        // representing unbounded space then 
    13391340        if (!vc)  
    1340         {        
    1341                 // set everything visible for savety 
     1341        {       // set everything visible for savety 
    13421342                SetObjectsVisible(true); 
    1343  
    13441343                return; 
    13451344        } 
     
    13481347                oit_end = vc->GetPvs().mEntries.end(); 
    13491348 
     1349        ////////////// 
    13501350        //-- PVS of view cell 
    13511351        for (oit = vc->GetPvs().mEntries.begin(); oit != oit_end; ++ oit) 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTreeSceneManager.cpp

    r1593 r1595  
    13221322        // converter between view cell ids and Ogre entites  
    13231323        GtpVisibilityPreprocessor::IndexedBoundingBoxContainer iboxes; 
    1324         OgreBoundingBoxConverter bconverter(this); 
     1324        KdTreeBoundingBoxConverter bconverter(this); 
    13251325 
    13261326        // load the view cells assigning the found objects to the pvss 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOcclusionCullingSceneManager.cpp

    r1593 r1595  
    593593                        // reset view cell 
    594594                        OGRE_DELETE(mCurrentViewCell); 
    595  
     595                         
    596596                        if (mUseViewCells) 
    597597                        { 
     
    601601                        mElementaryViewCell = NULL; 
    602602 
    603                         // if using view cells, all objects are set to false initially 
     603                        // if we use view cells, all objects are set to false initially 
    604604                        SetObjectsVisible(!mUseViewCells); 
    605605                } 
     
    10601060        // converter between view cell ids and Ogre entites  
    10611061        GtpVisibilityPreprocessor::IndexedBoundingBoxContainer iboxes; 
    1062         OgreBoundingBoxConverter bconverter(this); 
     1062        OctreeBoundingBoxConverter bconverter(this); 
    10631063 
    10641064        // load the view cells assigning the found objects to the pvss 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformHierarchyInterface.cpp

    r1495 r1595  
    125125{ 
    126126        // create new query if there is no query left 
    127         if (mCurrentTestIdx == mOcclusionQueries.size()) 
     127        if (mCurrentTestIdx == (int)mOcclusionQueries.size()) 
    128128        { 
    129129                mOcclusionQueries.push_back(new PlatformOcclusionQuery(mRenderSystem)); 
    130         } 
    131  
    132         std::stringstream d; 
    133         d << "resizing queries: " << (int)mOcclusionQueries.size() << std::endl; 
    134         LogManager::getSingleton().logMessage(d.str()); 
     130 
     131                std::stringstream d; 
     132                d << "resizing queries: " << (int)mOcclusionQueries.size() << std::endl; 
     133                LogManager::getSingleton().logMessage(d.str()); 
     134        } 
    135135         
    136136        return mOcclusionQueries[mCurrentTestIdx ++]; 
Note: See TracChangeset for help on using the changeset viewer.