Changeset 148


Ignore:
Timestamp:
06/23/05 00:56:37 (20 years ago)
Author:
mattausch
Message:

fixed

assumed visibility

Location:
trunk/VUT
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibility/src/CoherentHierarchicalCullingManager.cpp

    r147 r148  
    6464                        else 
    6565                        { 
    66                                 // if intersects near plane => skip occlusion query because wrong results possible 
    67                                 if (intersects) 
     66                                // identify previously visible nodes 
     67                                bool wasVisible = mHierarchyInterface->IsNodeVisible(node) &&  
     68                                        (mHierarchyInterface->LastVisited(node) == mHierarchyInterface->GetFrameId() - 1); 
     69 
     70                                // if node is assumed to be visible in this frame => skip query 
     71                                // if intersects near plane => also skip query because wrong results possible 
     72                                bool assumeVisible = intersects || 
     73                                        (wasVisible && (mAssumedVisibility > 0) &&  
     74                                         mHierarchyInterface->HasGeometry(node) && DecideVisible(node));         
     75 
     76                                if (assumeVisible) 
    6877                                { 
    69                                         // update octant's visited flag 
     78                                        // update node's visited flag 
    7079                                        mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); 
    7180 
     
    7685                                } 
    7786 
    78                                 // identify previously visible nodes 
    79                                 bool wasVisible = mHierarchyInterface->IsNodeVisible(node) &&  
    80                                         (mHierarchyInterface->LastVisited(node) == mHierarchyInterface->GetFrameId() - 1); 
    81                                 // if visibility is assumed to be true in this frame 
    82                                 bool assumeVisible = wasVisible && (mAssumedVisibility > 0) && DecideVisible(node); 
    83  
    84                                 // identify nodes that we cannot skip queries for 
     87                // identify nodes that we cannot skip queries for 
    8588                                // geometry not only in leaves => test for renderable geometry 
    86                                 bool issueQuery = !wasVisible ||  
    87                                         (mHierarchyInterface->HasGeometry(node) && !assumeVisible); 
     89                                bool issueQuery = !wasVisible || mHierarchyInterface->HasGeometry(node); 
    8890                                                                 
    8991                                // reset node's visibility classification 
    90                                 mHierarchyInterface->SetNodeVisible(node, !issueQuery && assumeVisible); 
     92                                mHierarchyInterface->SetNodeVisible(node, false); 
    9193 
    9294                                // update node's visited flag 
  • trunk/VUT/Ogre/src/OgreVisibilityTerrainSceneManager.cpp

    r147 r148  
    223223        else 
    224224        {        
    225                 // if not the shadow pass we interleave identification  
     225                // for hierarchical culling, we interleave identification  
    226226                // and rendering of objects in _renderVisibibleObjects 
     227 
     228                // only for the shadow pass we use standard rendering 
    227229                if (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE &&  
    228230                        mIlluminationStage == IRS_RENDER_TO_TEXTURE) 
     
    242244void VisibilityTerrainSceneManager::_renderVisibleObjects() 
    243245{ 
    244         // visualization: apply standard rendering 
    245         if (mShowVisualization) 
     246        // visualization or shadow pass: apply standard rendering 
     247        if (mShowVisualization || (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE &&  
     248                mIlluminationStage == IRS_RENDER_TO_TEXTURE)) 
    246249        {        
    247250                IlluminationRenderStage savedStage = mIlluminationStage;  
    248251         
    249                 // disable illumination stage so we have no shadow rendering 
    250                 mIlluminationStage = IRS_NONE; 
    251          
     252                if (mShowVisualization)  
     253                        // disable illumination stage so we have no shadows in visualization 
     254                        mIlluminationStage = IRS_NONE; 
     255 
     256                // standard rendering for shadow maps because of performance 
    252257                TerrainSceneManager::_renderVisibleObjects(); 
    253258 
    254259                mIlluminationStage = savedStage; 
    255260        } 
    256         // normal rendering for shadow maps because of performance 
    257         else if (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE &&  
    258                          mIlluminationStage == IRS_RENDER_TO_TEXTURE) 
    259         { 
    260                 TerrainSceneManager::_renderVisibleObjects(); 
    261         } 
    262         else 
     261        else // the hierarchical culling algorithm 
    263262        { 
    264263                //-- hierarchical culling 
Note: See TracChangeset for help on using the changeset viewer.