Ignore:
Timestamp:
05/18/05 02:06:32 (19 years ago)
Author:
mattausch
Message:

fixed bug with shadow maps

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/Ogre/src/OgreVisibilityTerrainSceneManager.cpp

    r101 r103  
    1616VisibilityTerrainSceneManager::VisibilityTerrainSceneManager( 
    1717        GtpVisibility::VisibilityManager *visManager) 
    18 : mVisibilityManager(visManager), mUseVisibilityCulling(true), 
    19 mShowVisualization(false) 
     18: mVisibilityManager(visManager),  
     19mUseVisibilityCulling(true), 
     20mShowVisualization(false), 
     21mRenderNodesForViz(false) 
    2022{ 
    2123        mHierarchyInterface =  
     
    2426        //mDisplayNodes = true; 
    2527        //mShowBoundingBoxes = true; 
     28 
     29        // TODO: set maxdepth to reasonable value 
    2630        mMaxDepth = 50; 
    2731} 
     
    3236} 
    3337//----------------------------------------------------------------------- 
     38void VisibilityTerrainSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters) 
     39{ 
     40        mHierarchyInterface->SetOnlyShadowCasters(onlyShadowCasters); 
     41        // does nothing if hierarchical culling is used => 
     42        // we interleave identification and rendering of objects  
     43        // in _renderVisibibleObjects 
     44        if (!mUseVisibilityCulling) 
     45        { 
     46                OctreeSceneManager::_findVisibleObjects(cam, onlyShadowCasters); 
     47                return;  
     48        } 
     49 
     50        //-- show visibile scene nodes and octree bounding boxes from last frame 
     51        if (mShowVisualization) 
     52    { 
     53                // add player camera for visualization purpose 
     54                Camera *c; 
     55                if ((c = getCamera("PlayerCam")) != NULL) 
     56                { 
     57                        getRenderQueue()->addRenderable(c); 
     58                } 
     59                 
     60                for (NodeList::iterator it = mVisible.begin(); it != mVisible.end(); ++it) 
     61                { 
     62                        getRenderQueue()->addRenderable(*it); 
     63 
     64                        if (mRenderNodesForViz) 
     65                        { 
     66                                (*it)->_addToRenderQueue(cam, getRenderQueue(), false); 
     67                        } 
     68                } 
     69                for (BoxList::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) 
     70                { 
     71                        getRenderQueue()->addRenderable(*it); 
     72                } 
     73        } 
     74         
     75        mVisible.clear(); 
     76    mBoxes.clear(); 
     77} 
     78//----------------------------------------------------------------------- 
    3479void VisibilityTerrainSceneManager::_renderVisibleObjects() 
    3580{ 
    36         // two cameras (one for culling, one for rendering) 
    37         mHierarchyInterface->InitFrame(mOctree, mCameraInProgress,  
    38                                                         mCullCamera ? getCamera("CullCamera") : NULL); 
    39         //mVisibilityManager->GetCullingManager()->InitFrame(); 
    40          
     81        if (!mShowVisualization) 
     82        { 
     83                // two cameras (one for culling, one for rendering) 
     84                mHierarchyInterface->InitFrame(mOctree, mCameraInProgress,  
     85                                                                mCullCamera ? getCamera("CullCamera") : NULL); 
     86 
     87                // call initframe to reset culling manager stats 
     88                mVisibilityManager->GetCullingManager()->InitFrame(); 
     89        } 
     90 
    4191        // standard terrain scenemanager rendering without hierarchical culling 
    42         if(!mUseVisibilityCulling || mShowVisualization) 
     92        if (!mUseVisibilityCulling || mShowVisualization) 
    4393        {        
    4494                TerrainSceneManager::_renderVisibleObjects(); 
     
    85135} 
    86136//----------------------------------------------------------------------- 
    87 void VisibilityTerrainSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters) 
    88 { 
    89         // does nothing if hierarchical culling is used => 
    90         // we interleave identification and rendering of objects  
    91         // in _renderVisibibleObjects 
    92         getRenderQueue()->clear(); 
    93          
    94         if (!mUseVisibilityCulling) 
    95         { 
    96                 OctreeSceneManager::_findVisibleObjects(cam, onlyShadowCasters); 
    97                 return;  
    98         } 
    99          
    100         //-- show visibile scene nodes and octree bounding boxes from last frame 
    101         if (mShowVisualization) 
    102     { 
    103                 // add cull camera for visualization purpose 
    104                 if (mCullCamera) 
    105                 { 
    106                         Camera *c; 
    107                         if ((c = getCamera("CullCamera")) != NULL) 
    108                         { 
    109                                 getRenderQueue()->addRenderable(c); 
    110                         } 
    111                 } 
    112  
    113                 for (NodeList::iterator it = mVisible.begin(); it != mVisible.end(); ++it) 
    114                 { 
    115                         getRenderQueue()->addRenderable(*it); 
    116                 } 
    117                 for (BoxList::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) 
    118                 { 
    119                         getRenderQueue()->addRenderable(*it); 
    120                 } 
    121         } 
    122          
    123         mVisible.clear(); 
    124     mBoxes.clear(); 
    125 } 
    126 //----------------------------------------------------------------------- 
    127137void VisibilityTerrainSceneManager::_updateSceneGraph(Camera* cam) 
    128138{ 
    129         // mHierarchyInterface->setNumSceneNodes((int)mSceneNodes.size()); 
    130139        mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface); 
    131140        mHierarchyInterface->SetRenderSystem(mDestRenderSystem); 
     
    149158                return true; 
    150159        } 
     160        if (key == "RenderNodesForViz") 
     161        { 
     162                mRenderNodesForViz = (*static_cast<const bool *>(val)); 
     163                return true; 
     164        } 
    151165        if (key == "SkyBoxEnabled") 
    152166        { 
     
    180194} 
    181195//----------------------------------------------------------------------- 
    182 bool VisibilityTerrainSceneManager::getOptionValues(const String & key, StringVector  &refValueList) 
     196bool VisibilityTerrainSceneManager::getOptionValues(const String & key, StringVector &refValueList) 
    183197{ 
    184198        return TerrainSceneManager::getOptionValues( key, refValueList); 
     
    200214        return mVisibilityManager; 
    201215} 
    202 //----------------------------------------------------------------------- 
    203 void VisibilityTerrainSceneManager::SetShowVisualization(bool showViz) 
    204 { 
    205         mShowVisualization = showViz; 
    206 } 
    207 /* 
    208 //----------------------------------------------------------------------- 
    209 void SetSkyBoxEnabled(bool enabled) 
    210 { 
    211         mSkyBoxEnabled = enabled; 
    212 } 
    213 //----------------------------------------------------------------------- 
    214 void SetSkyPlaneEnabled(bool enabled) 
    215 { 
    216         mSkyPlaneEnabled = enabled; 
    217 } 
    218 //----------------------------------------------------------------------- 
    219 void SetSkyDomeEnabled(bool enabled) 
    220 { 
    221         mSkyDomeEnabled = enabled; 
    222 } */ 
     216 
    223217//----------------------------------------------------------------------- 
    224218void VisibilityTerrainSceneManager::WriteLog() 
     
    236230        LogManager::getSingleton().logMessage(d.str()); 
    237231} 
     232 
     233 
    238234} // namespace Ogre 
Note: See TracChangeset for help on using the changeset viewer.