Changeset 30


Ignore:
Timestamp:
03/24/05 18:00:59 (20 years ago)
Author:
gametools
Message:
 
Location:
trunk/VUT/OcclusionCullingSceneManager
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/OcclusionCullingSceneManager/TestCulling/TestCullingApplication.cpp

    r29 r30  
    114114 
    115115                // show overlay 
    116         Overlay* pOver = OverlayManager::getSingleton().getByName("Example/OcclusionDemoOverlay");     
    117         mAlgorithmInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/OcclusionTechniqueInfo"); 
    118         //mMaterialInfo = OverlayManager::getSingleton().getOverlayElement("Example/Shadows/MaterialInfo"); 
     116        Overlay* pOver = OverlayManager::getSingleton().getByName("Example/OcclusionDemoOverlay");  
     117 
     118        mAlgorithmInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/AlgorithmInfo"); 
     119                mThresholdInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/ThresholdInfo"); 
     120                mFrustumCulledNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/FrustumCulledNodesInfo"); 
     121                mQueryCulledNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/QueryCulledNodesInfo"); 
     122        mTraversedNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/TraversedNodesInfo"); 
     123                 
     124                //mMaterialInfo = OverlayManager::getSingleton().getOverlayElement("Example/Shadows/MaterialInfo"); 
    119125        //mInfo = OverlayManager::getSingleton().getOverlayElement("Example/Shadows/Info"); 
    120126 
    121127                mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); 
    122         //mMaterialInfo->setCaption(": " + mAtheneMaterials[mCurrentAtheneMaterial]); 
     128                mThresholdInfo->setCaption(": dfddfdffdfd0"); 
     129                mFrustumCulledNodesInfo->setCaption(": 0"); 
     130                mQueryCulledNodesInfo->setCaption(": 0"); 
     131                mTraversedNodesInfo->setCaption(": 0"); 
     132 
    123133        pOver->show(); 
    124134} // MouseQueryListener 
     
    185195 
    186196    KEY_PRESSED(KC_O, 1, changeAlgorithm()); 
     197        //KEY_PRESSED(KC_T, 1, changeAlgorithm()); 
    187198       
     199        changeStats(); 
     200 
    188201    return ExampleFrameListener::frameStarted(evt) && ExampleFrameListener::frameEnded(evt);         
    189202} 
     
    192205{ 
    193206    mCurrentAlgorithm = ++mCurrentAlgorithm % OcclusionCullingSceneManager::NUM_RENDERMODES; 
    194     mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); 
    195  
     207 
     208        mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); 
    196209        mSceneMgr->setOption("Algorithm", &mCurrentAlgorithm); 
    197210} 
    198  
     211//----------------------------------------------------------------------- 
     212void MouseQueryListener::changeStats() 
     213{ 
     214        unsigned int opt = 0; 
     215         
     216        mSceneMgr->getOption("Threshold", &opt); mThresholdInfo->setCaption(": " + opt); 
     217        mSceneMgr->getOption("NumFrustumCulledNodes", &opt); mFrustumCulledNodesInfo->setCaption(": " + opt); 
     218        mSceneMgr->getOption("NumQueryCulledNodes", &opt); mQueryCulledNodesInfo->setCaption(": " + opt); 
     219        mSceneMgr->getOption("NumTraversedNodes", &opt); mTraversedNodesInfo->setCaption(": " + opt); 
     220} 
     221//----------------------------------------------------------------------- 
    199222INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT ) 
    200223{ 
  • trunk/VUT/OcclusionCullingSceneManager/TestCulling/TestCullingApplication.h

    r29 r30  
    8888*/ 
    8989        void changeAlgorithm(); 
    90  
     90        void changeStats(); 
    9191 
    9292protected: 
     
    9898//      bool mShutdownRequested; 
    9999        int mCurrentAlgorithm; 
     100         
    100101        OverlayElement *mAlgorithmInfo; 
     102        OverlayElement *mThresholdInfo; 
     103        OverlayElement *mFrustumCulledNodesInfo; 
     104        OverlayElement *mQueryCulledNodesInfo; 
     105    OverlayElement *mTraversedNodesInfo; 
     106 
    101107}; 
    102108 
     
    142148 
    143149    }*/ 
    144     // Override scene manager (use indoor instead of generic) 
    145150     
    146151 
  • trunk/VUT/OcclusionCullingSceneManager/include/OgreOcclusionCullingSceneManager.h

    r29 r30  
    7171                enum {MODE_QUERY, MODE_RENDER}; 
    7272 
    73                 int isLeaf(SceneNode *node); 
    74                 int countSceneNodes(SceneNode *node); 
     73                bool isLeaf(SceneNode *node); 
     74                unsigned int countSceneNodes(SceneNode *node); 
    7575                void renderZPass(); 
    7676                void traverseNode(SceneNode *node); 
     
    105105                PriorityQueue *mDistanceQueue;  
    106106                 
    107                 unsigned int mFrameId; 
    108                 unsigned int mVisibilityThreshold; 
    109                 unsigned int mNumSceneNodes; 
    110                 int mCurrentTestIdx; 
    111                 int mQueryMode; 
    112                  
    113                 std::vector<HardwareOcclusionQuery *> mOcclusionQueries; 
     107                        std::vector<HardwareOcclusionQuery *> mOcclusionQueries; 
    114108                // two halfes of a aabb 
    115109                SolidHalfBoundingBox *mHalfBoundingBox[2];       
    116110                int mCurrentAlgorithm; 
     111 
     112                unsigned int mFrameId; 
     113                unsigned int mVisibilityThreshold; 
     114                 
     115                int mCurrentTestIdx; 
     116                int mQueryMode; 
     117 
     118                //--- statistics 
     119                unsigned int mNumSceneNodes; 
     120                unsigned int mNumTraversedNodes; 
     121                unsigned int mNumQueryCulledNodes; 
     122                unsigned int mNumFrustumCulledNodes; 
     123                unsigned int mNumRenderedGeometry; 
    117124        }; 
    118125 
  • trunk/VUT/OcclusionCullingSceneManager/scripts/OcclusionDemo.overlay

    r29 r30  
    2424 
    2525 
    26                 element TextArea(Example/Occlusion/OcclusionTechnique) 
     26                element TextArea(Example/Occlusion/Algorithm) 
    2727                { 
    2828                        metrics_mode pixels 
     
    3737                        colour_bottom 0.3 0.5 0.3 
    3838                } 
    39                 element TextArea(Example/Occlusion/OcclusionTechniqueInfo) 
    40                 { 
    41                         metrics_mode pixels 
    42                         left 155 
    43                         top 5 
    44                         width 90 
    45                         height 30 
    46                         font_name TrebuchetMSBold 
    47                         char_height 16 
    48                         caption : 
    49                         colour_top 0.5 0.7 0.5 
    50                         colour_bottom 0.3 0.5 0.3 
    51                 } 
    52  
    53                 element TextArea(Example/Occlusion/Materials) 
    54                 { 
    55                         metrics_mode pixels 
    56                         left 5 
    57                         top 20 
    58                         width 90 
    59                         height 30 
    60                         font_name TrebuchetMSBold 
    61                         char_height 16 
    62                         caption [M] Athene Material 
    63                         colour_top 0.5 0.7 0.5 
    64                         colour_bottom 0.3 0.5 0.3 
    65                 } 
    66                 element TextArea(Example/Occlusion/MaterialInfo) 
    67                 { 
    68                         metrics_mode pixels 
    69                         left 155 
    70                         top 20 
    71                         width 90 
    72                         height 30 
    73                         font_name TrebuchetMSBold 
    74                         char_height 16 
    75                         caption : 
    76                         colour_top 0.5 0.7 0.5 
    77                         colour_bottom 0.3 0.5 0.3 
    78                 } 
    79                 element TextArea(Example/Occlusion/OcclusionInfo) 
    80                 { 
    81                         metrics_mode pixels 
    82                         left 5 
    83                         top 35 
    84                         width 250 
    85                         height 30 
    86                         font_name TrebuchetMSBold 
    87                         char_height 16 
     39                element TextArea(Example/Occlusion/AlgorithmInfo) 
     40                { 
     41                        metrics_mode pixels 
     42                        left 155 
     43                        top 5 
     44                        width 90 
     45                        height 30 
     46                        font_name TrebuchetMSBold 
     47                        char_height 16 
     48                        caption : 
     49                        colour_top 0.5 0.7 0.5 
     50                        colour_bottom 0.3 0.5 0.3 
     51                } 
     52 
     53                element TextArea(Example/Occlusion/Threshold) 
     54                { 
     55                        metrics_mode pixels 
     56                        left 5 
     57                        top 20 
     58                        width 90 
     59                        height 30 
     60                        font_name TrebuchetMSBold 
     61                        char_height 16 
     62                        caption [-][+] Thresholdz 
     63                        colour_top 0.5 0.7 0.5 
     64                        colour_bottom 0.3 0.5 0.3 
     65                } 
     66                element TextArea(Example/Occlusion/ThresholdInfo) 
     67                { 
     68                        metrics_mode pixels 
     69                        left 155 
     70                        top 20 
     71                        width 90 
     72                        height 30 
     73                        font_name TrebuchetMSBold 
     74                        char_height 16 
     75                        caption :dddd 
    8876                        colour_top 0.5 0.7 0.5 
    8977                        colour_bottom 0.3 0.5 0.3 
     
    112100                border_bottomright_uv 0.9961 0.0039 1.0000 0.0000 
    113101 
    114  
    115                 element TextArea(Example/Occlusion/CulledNodes) 
    116                 { 
    117                         metrics_mode pixels 
    118                         left 5 
    119                         top 5 
    120                         width 180 
    121                         height 30 
    122                         font_name TrebuchetMSBold 
    123                         char_height 16 
    124                         caption Culled Nodes 
     102                element TextArea(Example/Occlusion/FrustumCulledNodes) 
     103                { 
     104                        metrics_mode pixels 
     105                        left 5 
     106                        top 5 
     107                        width 180 
     108                        height 30 
     109                        font_name TrebuchetMSBold 
     110                        char_height 16 
     111                        caption Frustum Culled Nodes 
     112                        colour_top 0.5 0.7 0.5 
     113                        colour_bottom 0.3 0.5 0.3 
     114                } 
     115                element TextArea(Example/Occlusion/FrustumCulledNodesInfo) 
     116                { 
     117                        metrics_mode pixels 
     118                        left 155 
     119                        top 5 
     120                        width 90 
     121                        height 30 
     122                        font_name TrebuchetMSBold 
     123                        char_height 16 
     124                        caption :jjkj 
     125                        colour_top 0.5 0.7 0.5 
     126                        colour_bottom 0.3 0.5 0.3 
     127                } 
     128                element TextArea(Example/Occlusion/QueryCulledNodes) 
     129                { 
     130                        metrics_mode pixels 
     131                        left 5 
     132                        top 20 
     133                        width 180 
     134                        height 30 
     135                        font_name TrebuchetMSBold 
     136                        char_height 16 
     137                        caption Query Query Culled Nodes 
    125138                        colour_top 0.5 0.7 0.5 
    126139                        colour_bottom 0.3 0.5 0.3 
    127140                }        
     141                element TextArea(Example/Occlusion/QueryCulledNodesInfo) 
     142                { 
     143                        metrics_mode pixels 
     144                        left 155 
     145                        top 20 
     146                        width 90 
     147                        height 30 
     148                        font_name TrebuchetMSBold 
     149                        char_height 16 
     150                        caption : 
     151                        colour_top 0.5 0.7 0.5 
     152                        colour_bottom 0.3 0.5 0.3 
     153                } 
     154                element TextArea(Example/Occlusion/TraversedNodes) 
     155                { 
     156                        metrics_mode pixels 
     157                        left 5 
     158                        top 35 
     159                        width 180 
     160                        height 30 
     161                        font_name TrebuchetMSBold 
     162                        char_height 16 
     163                        caption Traversed Nodes 
     164                        colour_top 0.5 0.7 0.5 
     165                        colour_bottom 0.3 0.5 0.3 
     166                }        
     167                element TextArea(Example/Occlusion/TraversedNodesInfo) 
     168                { 
     169                        metrics_mode pixels 
     170                        left 155 
     171                        top 35 
     172                        width 90 
     173                        height 30 
     174                        font_name TrebuchetMSBold 
     175                        char_height 16 
     176                        caption : 
     177                        colour_top 0.5 0.7 0.5 
     178                        colour_bottom 0.3 0.5 0.3 
     179                } 
     180                element TextArea(Example/Occlusion/SceneNodes) 
     181                { 
     182                        metrics_mode pixels 
     183                        left 5 
     184                        top 50 
     185                        width 180 
     186                        height 30 
     187                        font_name TrebuchetMSBold 
     188                        char_height 16 
     189                        caption Traversed Scene Nodes 
     190                        colour_top 0.5 0.7 0.5 
     191                        colour_bottom 0.3 0.5 0.3 
     192                }        
     193                element TextArea(Example/Occlusion/SceneNodesInfo) 
     194                { 
     195                        metrics_mode pixels 
     196                        left 155 
     197                        top 50 
     198                        width 90 
     199                        height 30 
     200                        font_name TrebuchetMSBold 
     201                        char_height 16 
     202                        caption : 
     203                        colour_top 0.5 0.7 0.5 
     204                        colour_bottom 0.3 0.5 0.3 
     205                } 
    128206        } 
    129207} 
  • trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingSceneManager.cpp

    r29 r30  
    1515        OcclusionCullingSceneManager::OcclusionCullingSceneManager():  
    1616        mFrameId(1), mDistanceQueue(NULL), mVisibilityThreshold(0), mCurrentTestIdx(0), 
    17         mQueryMode(MODE_RENDER), mNumSceneNodes(0), mCurrentAlgorithm(RENDER_COHERENT) 
     17        mQueryMode(MODE_RENDER), mNumSceneNodes(0), mCurrentAlgorithm(RENDER_COHERENT), 
     18        mNumTraversedNodes(0), mNumQueryCulledNodes(0), mNumFrustumCulledNodes(0), mNumRenderedGeometry(0) 
    1819        {                
    1920                mHalfBoundingBox[0] = mHalfBoundingBox[1] = 0; 
     
    3637        void OcclusionCullingSceneManager::_renderVisibleObjects(void) 
    3738        { 
     39                mNumTraversedNodes = 0; 
     40                mNumQueryCulledNodes = 0; 
     41                mNumFrustumCulledNodes = 0; 
     42                mNumRenderedGeometry = 0; 
     43                 
    3844                mDistanceQueue = new PriorityQueue(myless<SceneNode *>(mCameraInProgress)); 
    39                  
    4045                mDistanceQueue->push(mSceneRoot); 
    41  
    4246                mCurrentTestIdx = 0; 
    43  
    4447                //renderZPass(); 
    4548 
     
    6265                delete mDistanceQueue; 
    6366 
    64                 /*mDestRenderSystem->_setDepthBufferParams(true, false, CMPF_LESS); 
    65                   SceneManager::_renderVisibleObjects(); 
    66                   mDestRenderSystem->_setDepthBufferParams(); 
    67           mDistanceQueue.push(mSceneRoot); 
    68                   Preprocess(); 
    69                   //ResetQueries(); 
    70                 */ 
    71                  
    7267                mFrameId ++; 
    7368        } 
     
    10297                                        traverseNode(node); 
    10398                                } 
     99                                else 
     100                                { 
     101                                        mNumQueryCulledNodes ++; 
     102                                } 
    104103                        }        
    105104 
     
    108107                        { 
    109108                                SceneNode *node = mDistanceQueue->top(); 
    110  
    111109                                mDistanceQueue->pop(); 
    112110         
     
    134132                                        // always traverse a node if it was visible 
    135133                                        if(wasVisible) 
     134                                        { 
    136135                                                traverseNode(node); 
     136                                        } 
     137                                } 
     138                                else 
     139                                { 
     140                                        mNumFrustumCulledNodes ++; 
    137141                                } 
    138142                        } 
     
    157161                                traverseNode(node); 
    158162                        } 
     163                        else 
     164                        {                        
     165                                mNumFrustumCulledNodes ++; 
     166                        } 
    159167                } 
    160168        }        
     
    179187                                query->pullOcclusionQuery(&visiblePixels); 
    180188                                 
    181                                 //char str[100]; sprintf(str, "number: %d, id: %d", (int)visiblePixels, mCurrentTestIdx); 
    182                                 //MessageBox( NULL, str, "this is my plugin", MB_OK | MB_ICONERROR | MB_TASKMODAL); 
    183  
    184189                                // node visible 
    185190                                if(visiblePixels > mVisibilityThreshold) 
     
    187192                                        traverseNode(node); 
    188193                                } 
    189                         }                                        
     194                                else 
     195                                { 
     196                                        mNumQueryCulledNodes ++; 
     197                                } 
     198                        } 
     199                        else 
     200                        { 
     201                                mNumFrustumCulledNodes ++; 
     202                        } 
    190203                } 
    191204        } 
     
    203216                /* 
    204217                static RenderOperation ro; 
    205  
    206                 // Issue view / projection changes if any 
    207218                useRenderableViewProjMode(&box); 
    208  
    209219                box.getRenderOperation(ro); 
    210220                ro.srcRenderable = &box;  
     
    237247        void OcclusionCullingSceneManager::traverseNode(SceneNode *node) 
    238248        { 
    239                 if(isLeaf(node)) 
     249                mNumTraversedNodes ++; 
     250 
     251                if(node->numAttachedObjects() > 0) 
    240252                { 
    241253                        render(node); 
    242254                } 
    243                 else // internal node: add children to priority queue for further processing 
    244                 { 
    245                         Node::ChildNodeIterator it = node->getChildIterator(); 
     255 
     256                // internal node: add children to priority queue for further processing 
     257                Node::ChildNodeIterator it = node->getChildIterator(); 
    246258                                         
    247                         while (it.hasMoreElements()) 
    248                         {  
    249                                 SceneNode* sceneChild = static_cast<SceneNode*>(it.getNext()); 
    250                                 mDistanceQueue->push(sceneChild); 
    251                         } 
    252                  } 
     259                while (it.hasMoreElements())                     
     260                {  
     261                        SceneNode* sceneChild = static_cast<SceneNode*>(it.getNext()); 
     262                        mDistanceQueue->push(sceneChild); 
     263                } 
    253264        } 
    254265        //----------------------------------------------------------------------- 
    255266        void OcclusionCullingSceneManager::render(SceneNode *node) 
    256267        { 
    257                 //setRenderingMode(MODE_RENDER); 
    258                 //MessageBox( NULL, "harhar", "this is my plugin", MB_OK | MB_ICONERROR | MB_TASKMODAL); 
     268                setRenderingMode(MODE_RENDER); 
     269                 
    259270                //HACK (too slow) 
    260271                node->_findVisibleObjects(mCameraInProgress, getRenderQueue(), false,  
     
    266277        void OcclusionCullingSceneManager::_updateSceneGraph(Camera* cam) 
    267278        { 
    268                 int numnodes = countSceneNodes(mSceneRoot); 
    269                  
     279                unsigned int numnodes = countSceneNodes(mSceneRoot); 
     280         
    270281                //-- initialise occlusion queries. 
    271282                if(numnodes != mNumSceneNodes) 
    272283                { 
    273284                        deleteQueries(); 
     285                         
    274286                        mNumSceneNodes = numnodes; 
    275287 
    276288                        for(unsigned int i=0; i < mNumSceneNodes; i++) 
    277289                        { 
    278                                 HardwareOcclusionQuery *hw = mDestRenderSystem->createHardwareOcclusionQuery(); 
    279                                 mOcclusionQueries.push_back(hw); 
    280                         } 
     290                                mOcclusionQueries.push_back(mDestRenderSystem->createHardwareOcclusionQuery()); 
     291                        }        
    281292                } 
    282293 
     
    284295        } 
    285296        //----------------------------------------------------------------------- 
    286         int OcclusionCullingSceneManager::countSceneNodes(SceneNode *node) 
    287         { 
    288                 int num = 1; 
    289                 if(isLeaf(node)) 
    290                 { 
    291                         return num; 
    292                 } 
    293  
     297        unsigned int OcclusionCullingSceneManager::countSceneNodes(SceneNode *node) 
     298        { 
     299                unsigned int result = 1; 
     300                 
    294301                Node::ChildNodeIterator it = node->getChildIterator(); 
    295302                 
     
    297304                {  
    298305                        SceneNode* sceneChild = static_cast<SceneNode*>(it.getNext()); 
    299                         num += countSceneNodes(sceneChild); 
     306                        result += countSceneNodes(sceneChild); 
    300307        } 
    301308 
    302                 return num; 
    303         } 
    304         //----------------------------------------------------------------------- 
    305         int OcclusionCullingSceneManager::isLeaf(SceneNode *node) 
     309                return result; 
     310        } 
     311        //----------------------------------------------------------------------- 
     312        bool OcclusionCullingSceneManager::isLeaf(SceneNode *node) 
    306313        { 
    307314                return (node->numChildren() == 0); 
     
    353360                        return true; 
    354361                } 
    355          
     362                if ( key == "Threshold" ) 
     363                { 
     364                        mCurrentAlgorithm = * static_cast < const int * > ( val ); 
     365                        return true; 
     366                } 
     367                 
    356368                return SceneManager::setOption( key, val ); 
    357369        } 
     
    362374                { 
    363375                        * static_cast < int * > ( val ) = mCurrentAlgorithm; 
     376                        return true; 
     377                } 
     378                if ( key == "Threshold" ) 
     379                { 
     380                        * static_cast < int * > ( val ) = mVisibilityThreshold; 
     381                        return true; 
     382                } 
     383                if ( key == "NumSceneNodes" ) 
     384                { 
     385                        * static_cast < unsigned int * > ( val ) = mNumSceneNodes; 
     386                        return true; 
     387                } 
     388                if ( key == "NumTraversedNodes" ) 
     389                { 
     390                        * static_cast < unsigned int * > ( val ) = mNumTraversedNodes; 
     391                        return true; 
     392                } 
     393                if ( key == "NumQueryCulledNodes" ) 
     394                { 
     395                        * static_cast < unsigned int * > ( val ) = mNumQueryCulledNodes; 
     396                        return true; 
     397                } 
     398                if ( key == "NumFrustumCulledNodes" ) 
     399                { 
     400                        * static_cast < unsigned int * > ( val ) = mNumFrustumCulledNodes; 
    364401                        return true; 
    365402                } 
     
    377414                SceneManager::getOptionKeys( refKeys ); 
    378415                refKeys.push_back( "Algorithm" ); 
    379          
     416                refKeys.push_back( "Threshold" ); 
     417                refKeys.push_back( "NumSceneNodes" ); 
     418                refKeys.push_back( "NumTraversedNodes" ); 
     419                refKeys.push_back( "NumQueryCulledNodes" ); 
     420                refKeys.push_back( "NumFrustumCulledNodes" ); 
     421                //refKeys.push_back( "mNumRenderedGeometry" ); 
    380422                return true; 
    381423        } 
Note: See TracChangeset for help on using the changeset viewer.