Ignore:
Timestamp:
03/18/07 00:26:49 (18 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src
Files:
3 edited

Legend:

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

    r2066 r2258  
    4949} 
    5050 
     51 
    5152void BvHierarchyInterface::RenderNode(GtpVisibility::HierarchyNode *node) 
    5253{ 
     
    6263        } 
    6364} 
     65 
    6466 
    6567void BvHierarchyInterface::PullUpVisibility(GtpVisibility::HierarchyNode *node) const 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOcclusionCullingSceneManager.cpp

    r2255 r2258  
    1212#include <OgreIteratorWrappers.h> 
    1313#include <OgreHeightmapTerrainPageSource.h> 
    14 #include "VspBspTree.h" 
    15 #include "Containers.h" 
     14//#include "Containers.h" 
    1615#include "ViewCellsManager.h" 
    1716#include <OgreConfigFile.h> 
    1817#include "OgreTypeConverter.h" 
    1918#include "OgreMeshInstance.h" 
    20 #include "common.h" 
     19//#include "common.h" 
    2120#include "OgreBoundingBoxConverter.h" 
    2221#include <OgreManualObject.h> 
     
    775774                                                                                                                bool onlyShadowCasters) 
    776775{ 
    777         // clear render queue 
    778         // fully reset it after some frames 
    779         const bool flushQueue =  
    780                 mDeleteQueueAfterRendering && ((mCurrentFrame % mFlushRate) == 0); 
    781         getRenderQueue()->clear(flushQueue); 
    782  
    783         ++ mCurrentFrame; 
    784  
    785776        if (mShowVisualization) 
    786777    { 
     
    790781                PrepareVisualization(cam); 
    791782                 
    792                         // lists only used for visualization 
     783                // lists only used for visualization 
    793784                mVisible.clear(); 
    794785                mBoxes.clear(); 
     
    797788        } 
    798789         
    799  
    800         mVisible.clear(); 
    801         mBoxes.clear(); 
    802  
    803790        /////////// 
    804791        //-- set visibility according to pvs of current view cell 
     
    820807        else if (mUseDepthPass) 
    821808        { 
     809                mVisible.clear(); 
     810                mBoxes.clear(); 
     811 
     812                // clear render queue before depth pass 
     813                getRenderQueue()->clear(); 
     814 
    822815                // render scene once in order to fill depth buffer 
    823816                RenderHierarchicalCulling(); 
    824817        } 
    825          
    826         // only shadow casters will be rendered in shadow texture pass 
    827         //if (0) mHierarchyInterface->SetOnlyShadowCasters(onlyShadowCasters); 
    828818} 
    829819//----------------------------------------------------------------------- 
     
    838828        } 
    839829 
    840         //const bool flushQueue = mDeleteQueueAfterRendering && ((mCurrentFrame % mFlushRate) == 0); 
    841         //++ mCurrentFrame; 
     830        // clear render queue 
     831        // fully reset it after some frames 
     832        const bool flushQueue =  
     833                mDeleteQueueAfterRendering && ((mCurrentFrame % mFlushRate) == 0); 
     834         
     835        ++ mCurrentFrame; 
    842836 
    843837        // create material for item buffer pass 
     
    956950 
    957951        // remove rest from queue 
    958 #if 0 
    959952        getRenderQueue()->clear(flushQueue); 
    960 #endif 
     953 
    961954         
    962955        if (0) WriteLog(); // write out stats 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOctreeHierarchyInterface.cpp

    r2066 r2258  
    99 
    1010//----------------------------------------------------------------------- 
    11 OctreeHierarchyInterface::OctreeHierarchyInterface(OctreeSceneManager *sm, RenderSystem *rsys):  
     11OctreeHierarchyInterface::OctreeHierarchyInterface(OctreeSceneManager *sm,  
     12                                                                                                   RenderSystem *rsys):  
    1213SceneNodeHierarchyInterface(sm, rsys) 
    13 { 
    14 } 
     14{} 
    1515//----------------------------------------------------------------------- 
    1616void OctreeHierarchyInterface::TraverseNode(GtpVisibility::HierarchyNode *node) 
     
    2727         
    2828         
     29        // if not all subtrees are empty 
     30        if (!IsLeaf(node)) 
     31        { 
     32                Octree *nextChild; 
     33 
     34                if ((nextChild = octree->mChildren[0][0][0]) != NULL) 
     35                        mDistanceQueue->push(nextChild); 
     36                if ((nextChild = octree->mChildren[0][0][1]) != NULL) 
     37                        mDistanceQueue->push(nextChild); 
     38                if ((nextChild = octree->mChildren[0][1][0]) != NULL) 
     39                        mDistanceQueue->push(nextChild); 
     40                if ((nextChild = octree->mChildren[0][1][1]) != NULL) 
     41                mDistanceQueue->push(nextChild); 
     42                if ((nextChild = octree->mChildren[1][0][0]) != NULL) 
     43                        mDistanceQueue->push(nextChild); 
     44                if ((nextChild = octree->mChildren[1][0][1]) != NULL) 
     45                        mDistanceQueue->push(nextChild); 
     46                if ((nextChild = octree->mChildren[1][1][0]) != NULL) 
     47                        mDistanceQueue->push(nextChild); 
     48                if ((nextChild = octree->mChildren[1][1][1]) != NULL) 
     49                        mDistanceQueue->push(nextChild); 
     50        } 
     51} 
     52//----------------------------------------------------------------------- 
     53HierarchyNode *OctreeHierarchyInterface::GetRandomLeaf()  
     54{  
     55        return NULL; 
     56} 
     57//----------------------------------------------------------------------- 
     58bool OctreeHierarchyInterface::GIsNodeFullyVisible(GtpVisibility::HierarchyNode *node) const 
     59{ 
     60        return static_cast<Octree *>(node)->isOctreeFullyVisible(); 
     61} 
     62//----------------------------------------------------------------------- 
     63void OctreeHierarchyInterface::TraverseNode2(GtpVisibility::HierarchyNode *node) 
     64{ 
     65        ++ mNumTraversedNodes; 
     66 
     67        Octree *octree = static_cast<Octree *>(node); 
     68 
     69        // if we come across some renderable geometry => render it 
     70        if (!octree->mNodes.empty()) 
     71        { 
     72                // render everything from here 
     73                if (octree->isOctreeFullyVisible()) 
     74                {                
     75                        RenderNodeRecursive(node); 
     76                        return; 
     77                } 
     78 
     79                RenderNode(node); 
     80        } 
     81                 
    2982        // if not all subtrees are empty 
    3083        if (!IsLeaf(node)) 
     
    107160} 
    108161//----------------------------------------------------------------------- 
     162void OctreeHierarchyInterface::DetermineFullVisibility(GtpVisibility::HierarchyNode *node) const 
     163{                
     164        Octree *octant = static_cast<Octree *>(node); 
     165 
     166        // leaf node: terminate recursion 
     167        if (IsLeaf(node)) 
     168        { 
     169                octant->setOctreeFullyVisible(octant->isOctreeVisible()); 
     170                return; 
     171        } 
     172 
     173        octant->setOctreeFullyVisible(false); 
     174 
     175        Octree *nextChild; 
     176 
     177        for (int i = 0; i < 8; ++ i) 
     178        { 
     179                int x = i & 4; 
     180                int y = i & 2; 
     181                int z = i & 1; 
     182 
     183                if ((nextChild = octant->mChildren[x][y][z]) != NULL) 
     184                { 
     185                        DetermineFullVisibility(nextChild); 
     186                        if (!nextChild->isOctreeFullyVisible()) 
     187                        return; 
     188                } 
     189        } 
     190 
     191        // all children fully visible => pull up 
     192        octant->setOctreeFullyVisible(true); 
     193} 
     194//----------------------------------------------------------------------- 
    109195void OctreeHierarchyInterface::RenderNode(GtpVisibility::HierarchyNode *node) 
    110196{ 
     
    118204                        static_cast<OctreeSceneManager *>(mSceneManager); 
    119205 
    120                 ocm->_renderOctant(mCamera, octant, mOnlyShadowCasters, mLeavePassesInQueue); 
     206                ocm->_renderOctant(mCamera,  
     207                                                   octant,  
     208                                                   mOnlyShadowCasters,  
     209                                                   mLeavePassesInQueue); 
    121210 
    122211                mVisibleNodes.push_back(node); 
    123212        } 
    124 #endif 
    125          
     213#endif   
    126214} 
    127215//----------------------------------------------------------------------- 
     
    189277} 
    190278 
     279 
    191280} // namespace Ogre 
Note: See TracChangeset for help on using the changeset viewer.