Ignore:
Timestamp:
04/06/05 18:36:40 (19 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r39 r40  
    11#include "OgreOcclusionCullingTerrainSceneTraverser.h" 
    2 //#include <windows.h> 
     2#include "OgreOcclusionCullingTerrainSceneManager.h" 
     3 
     4#include <windows.h> 
    35 
    46namespace Ogre { 
    57        //----------------------------------------------------------------------- 
    6         void OcclusionCullingTerrainSceneTraverser::traverseNode( Camera *cam, Octree *node ) 
     8        OcclusionCullingTerrainSceneTraverser::OcclusionCullingTerrainSceneTraverser(SceneManager *sm, RenderSystem *rsys):  
     9        OcclusionCullingSceneTraverser(sm, rsys) 
     10        { 
     11        } 
     12        //----------------------------------------------------------------------- 
     13        void OcclusionCullingTerrainSceneTraverser::traverseOctree( Camera *cam, Octree *octree ) 
    714        { 
    815                mNumTraversedNodes ++; 
    916         
    10         /*      if(node->numAttachedObjects() > 0) 
     17                if(octree->numNodes() > 0) 
    1118                { 
    12                         renderSceneNode(cam, node); 
    13                 }*/ 
     19                        renderOctree(cam, octree); 
     20                } 
    1421 
    1522                for(int i=0; i<8; i++) 
    1623                { 
    17                         if(node->mChildren[i & 4][i & 2][i & 1] != 0) 
    18                                 traverseNode(cam, node->mChildren[i & 4][i & 2][i & 1]); 
     24                        char msg[100]; 
     25                        sprintf(msg,"current node: %d\n", i); 
     26                        OutputDebugString(msg); 
     27 
     28                        if(octree->mChildren[i & 4][i & 2][i & 1] != 0) 
     29                                traverseOctree(cam, octree->mChildren[i & 4][i & 2][i & 1]);                     
    1930                } 
    2031        } 
    2132        //----------------------------------------------------------------------- 
    2233        void OcclusionCullingTerrainSceneTraverser::renderScene( Camera *cam, Octree *root ) 
     34                //TODO: Renderscene independent from hierarchynode => implement only once 
    2335        { 
    2436                mNumTraversedNodes = 0; 
     
    2739                mNumRenderedGeometry = 0; 
    2840                 
    29                 mDistanceQueue = new OctreePriorityQueue(myless<Octree *>(cam)); 
    30 //              mDistanceQueue->push(root); 
     41                mDistanceQueue = new OctreePriorityQueue(octreeless<Octree *>(cam)); 
     42                mDistanceQueue->push(root); 
    3143                mCurrentTestIdx = 0; 
    32  
     44                 
    3345mCurrentAlgorithm = RENDER_CULL_FRUSTUM; 
    3446                switch(mCurrentAlgorithm) 
     
    3749                                renderCullFrustum(cam); 
    3850                        break; 
    39                 /*      case RENDER_STOP_AND_WAIT: 
     51                        case RENDER_STOP_AND_WAIT: 
    4052                                renderStopAndWait(cam); 
    4153                                break; 
    4254                        case RENDER_COHERENT: 
    4355                                renderCoherentWithQueue(cam); 
    44                                 break;*/ 
     56                                break; 
    4557                        default: 
    4658                                renderCullFrustum(cam); 
     
    4860                }        
    4961                 
    50 //              delete mDistanceQueue; 
     62                delete mDistanceQueue; 
    5163 
    5264                mFrameId ++; 
     
    5567        void OcclusionCullingTerrainSceneTraverser::renderCullFrustum(Camera *cam) 
    5668        { 
    57                 /*while(!mDistanceQueue->empty()) 
     69                AxisAlignedBox box; 
     70                FrustumPlane plane; 
     71 
     72                while(!mDistanceQueue->empty()) 
    5873                { 
    59                         SceneNode *node = mDistanceQueue->top(); 
     74                        Octree *octree = mDistanceQueue->top(); 
    6075                        mDistanceQueue->pop(); 
    6176         
    6277                        // interesting for visualization purpose 
    63                         node->setNodeVisible(false); 
    64                                  
    65                         if(cam->isVisible(node->_getWorldAABB())) 
    66                         { 
     78                        //TODO: octree->setNodeVisible(false); 
     79                        octree->_getCullBounds(&box); 
     80 
     81                        //if(cam->isVisible(box, &plane)) 
     82                        //{ 
    6783                                // update node's visited flag  
    68                                 node->setLastVisited(mFrameId); 
    69                                 node->setNodeVisible(true); 
    70                                 traverseNode(cam, node); 
    71                         } 
     84                                //TODO: octree->setLastVisited(mFrameId); 
     85                                //TODO: octree->setNodeVisible(true); 
     86                                traverseOctree(cam, octree); 
     87                        /*} 
    7288                        else 
    7389                        {                        
    7490                                mNumFrustumCulledNodes ++; 
    75                         } 
    76                 }*/ 
     91                        }*/ 
     92                } 
    7793        }        
     94         
     95        /** Renders the scene with the hierarchical stop and wait algorithm. */ 
     96        void OcclusionCullingTerrainSceneTraverser::renderStopAndWait( Camera *cam ) 
     97        { 
     98        } 
     99 
     100        /** Renders the scene with the coherent hierarchical algorithm and the query queye. */ 
     101        void OcclusionCullingTerrainSceneTraverser::renderCoherentWithQueue( Camera *cam ) 
     102        { 
     103        } 
     104         
    78105        //----------------------------------------------------------------------- 
    79106/*      bool OcclusionCullingTerrainSceneTraverser::isLeaf( SceneNode *node ) 
     
    85112        { 
    86113        } 
     114        //----------------------------------------------------------------------- 
     115        void OcclusionCullingTerrainSceneTraverser::renderOctree( Camera *cam, Octree *octree ) 
     116        { 
     117                setRenderingMode(MODE_RENDER); 
     118                ((OcclusionCullingTerrainSceneManager *)mSceneManager)->_renderOctant(cam, octree); 
     119        } 
    87120}        
Note: See TracChangeset for help on using the changeset viewer.