Ignore:
Timestamp:
04/05/05 17:39:03 (19 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/OcclusionCullingSceneManager/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingDotSceneManager.cpp

    r38 r39  
    3131                addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND); 
    3232                addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY); 
    33                  
     33         
    3434                setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE); 
    35                 //DotSceneManager::_renderVisibleObjects( ); 
     35                DotSceneManager::_renderVisibleObjects( ); 
    3636                _deleteRenderedQueueGroups(); 
    3737 
  • trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingSceneTraverser.cpp

    r38 r39  
    118118                                        { 
    119119                                                HardwareOcclusionQuery *query = issueOcclusionQuery(node, wasVisible); 
    120                                                 queryQueue.push(query_pair(node, query)); 
     120                                                queryQueue.push(QueryPair(node, query)); 
    121121                                        } 
    122122                                         
     
    322322                for(int half = 0; half < 2; half ++) 
    323323                { 
     324                        //static Matrix4 xform[256]; 
     325 
    324326                        SolidHalfBoundingBox *box = getSolidHalfBoundingBox(half); 
     327                        box->setupBoundingBox(node->_getWorldAABB()); 
     328 
     329                        mRenderSystem->_setWorldMatrix(Matrix4::IDENTITY); 
    325330                         
    326                         box->setupBoundingBox(node->_getWorldAABB()); 
    327  
    328331                        static RenderOperation ro; 
     332 
    329333                        mSceneManager->useRenderableViewProjMode(box); 
    330334                        box->getRenderOperation(ro); 
  • trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingTerrainSceneTraverser.cpp

    r37 r39  
    44namespace Ogre { 
    55        //----------------------------------------------------------------------- 
    6         void OcclusionCullingTerrainSceneTraverser::traverseNode( Camera *cam, SceneNode *node ) 
     6        void OcclusionCullingTerrainSceneTraverser::traverseNode( Camera *cam, Octree *node ) 
    77        { 
    88                mNumTraversedNodes ++; 
    9                  
    10                 if(node->numAttachedObjects() > 0) 
     9         
     10        /*      if(node->numAttachedObjects() > 0) 
    1111                { 
    1212                        renderSceneNode(cam, node); 
    13                 } 
     13                }*/ 
    1414 
    15                 // internal node: add children to priority queue for further processing 
    16                 Node::ChildNodeIterator it = node->getChildIterator(); 
    17                                          
    18                 while (it.hasMoreElements())                     
    19                 {  
    20                         SceneNode* sceneChild = static_cast<SceneNode*>(it.getNext()); 
    21                         mDistanceQueue->push(sceneChild); 
    22                 } 
    23         } 
    24 /*      //----------------------------------------------------------------------- 
    25         void OcclusionCullingTerrainSceneTraverser::renderSceneNode( Camera *cam, SceneNode *node ) 
    26         { 
    27                 setRenderingMode(MODE_RENDER); 
    28                  
    29                 //HACK (too slow) 
    30                 mSceneManager->_renderSceneNode(cam, node); 
    31                 //MessageBox( NULL, "myplugin registered", "this is my plugin", MB_OK | MB_ICONERROR | MB_TASKMODAL); 
    32         } 
    33         //----------------------------------------------------------------------- 
    34         bool OcclusionCullingTerrainSceneTraverser::isLeaf( SceneNode *node ) 
    35         { 
    36                 return (node->numChildren() == 0); 
    37         } 
    38         //----------------------------------------------------------------------- 
    39         void OcclusionCullingTerrainSceneTraverser::pullUpVisibility( SceneNode *node ) 
    40         { 
    41                 while(node && !node->isNodeVisible()) 
     15                for(int i=0; i<8; i++) 
    4216                { 
    43                         node->setNodeVisible(true); 
    44                         node = static_cast<SceneNode *>(node->getParent()); 
     17                        if(node->mChildren[i & 4][i & 2][i & 1] != 0) 
     18                                traverseNode(cam, node->mChildren[i & 4][i & 2][i & 1]); 
    4519                } 
    4620        } 
    4721        //----------------------------------------------------------------------- 
    48         void OcclusionCullingTerrainSceneTraverser::renderBoundingBox( SceneNode *node ) 
     22        void OcclusionCullingTerrainSceneTraverser::renderScene( Camera *cam, Octree *root ) 
    4923        { 
    50                 // Render two halfes of the bounding box (using triangle fans) 
    51                 for(int half = 0; half < 2; half ++) 
     24                mNumTraversedNodes = 0; 
     25                mNumQueryCulledNodes = 0; 
     26                mNumFrustumCulledNodes = 0; 
     27                mNumRenderedGeometry = 0; 
     28                 
     29                mDistanceQueue = new OctreePriorityQueue(myless<Octree *>(cam)); 
     30//              mDistanceQueue->push(root); 
     31                mCurrentTestIdx = 0; 
     32 
     33mCurrentAlgorithm = RENDER_CULL_FRUSTUM; 
     34                switch(mCurrentAlgorithm) 
    5235                { 
    53                         SolidHalfBoundingBox *box = getSolidHalfBoundingBox(half); 
    54                          
    55                         box->setupBoundingBox(node->_getWorldAABB()); 
     36                        case RENDER_CULL_FRUSTUM: 
     37                                renderCullFrustum(cam); 
     38                        break; 
     39                /*      case RENDER_STOP_AND_WAIT: 
     40                                renderStopAndWait(cam); 
     41                                break; 
     42                        case RENDER_COHERENT: 
     43                                renderCoherentWithQueue(cam); 
     44                                break;*/ 
     45                        default: 
     46                                renderCullFrustum(cam); 
     47                                break; 
     48                }        
     49                 
     50//              delete mDistanceQueue; 
    5651 
    57                         static RenderOperation ro; 
    58                         mSceneManager->useRenderableViewProjMode(box); 
    59                         box->getRenderOperation(ro); 
    60                         ro.srcRenderable = box;  
    61                         mRenderSystem->_render(ro); 
    62  
    63                         //mSceneManager->renderSingleObject(getSolidHalfBoundingBox(half),  
    64                         //      getSolidHalfBoundingBox(half)->getTechnique()->getPass(0), false); 
    65                 } 
     52                mFrameId ++; 
     53        } 
     54        //----------------------------------------------------------------------- 
     55        void OcclusionCullingTerrainSceneTraverser::renderCullFrustum(Camera *cam) 
     56        { 
     57                /*while(!mDistanceQueue->empty()) 
     58                { 
     59                        SceneNode *node = mDistanceQueue->top(); 
     60                        mDistanceQueue->pop(); 
     61         
     62                        // interesting for visualization purpose 
     63                        node->setNodeVisible(false); 
     64                                 
     65                        if(cam->isVisible(node->_getWorldAABB())) 
     66                        { 
     67                                // update node's visited flag  
     68                                node->setLastVisited(mFrameId); 
     69                                node->setNodeVisible(true); 
     70                                traverseNode(cam, node); 
     71                        } 
     72                        else 
     73                        {                        
     74                                mNumFrustumCulledNodes ++; 
     75                        } 
     76                }*/ 
     77        }        
     78        //----------------------------------------------------------------------- 
     79/*      bool OcclusionCullingTerrainSceneTraverser::isLeaf( SceneNode *node ) 
     80        { 
     81                return (node->numChildren() == 0); 
    6682        }*/ 
     83        //----------------------------------------------------------------------- 
     84        void OcclusionCullingTerrainSceneTraverser::pullUpVisibility( Octree *node ) 
     85        { 
     86        } 
    6787}        
Note: See TracChangeset for help on using the changeset viewer.