Changeset 40 for trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingTerrainSceneTraverser.cpp
- Timestamp:
- 04/06/05 18:36:40 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingTerrainSceneTraverser.cpp
r39 r40 1 1 #include "OgreOcclusionCullingTerrainSceneTraverser.h" 2 //#include <windows.h> 2 #include "OgreOcclusionCullingTerrainSceneManager.h" 3 4 #include <windows.h> 3 5 4 6 namespace Ogre { 5 7 //----------------------------------------------------------------------- 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 ) 7 14 { 8 15 mNumTraversedNodes ++; 9 16 10 /* if(node->numAttachedObjects() > 0)17 if(octree->numNodes() > 0) 11 18 { 12 render SceneNode(cam, node);13 } */19 renderOctree(cam, octree); 20 } 14 21 15 22 for(int i=0; i<8; i++) 16 23 { 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]); 19 30 } 20 31 } 21 32 //----------------------------------------------------------------------- 22 33 void OcclusionCullingTerrainSceneTraverser::renderScene( Camera *cam, Octree *root ) 34 //TODO: Renderscene independent from hierarchynode => implement only once 23 35 { 24 36 mNumTraversedNodes = 0; … … 27 39 mNumRenderedGeometry = 0; 28 40 29 mDistanceQueue = new OctreePriorityQueue( myless<Octree *>(cam));30 //mDistanceQueue->push(root);41 mDistanceQueue = new OctreePriorityQueue(octreeless<Octree *>(cam)); 42 mDistanceQueue->push(root); 31 43 mCurrentTestIdx = 0; 32 44 33 45 mCurrentAlgorithm = RENDER_CULL_FRUSTUM; 34 46 switch(mCurrentAlgorithm) … … 37 49 renderCullFrustum(cam); 38 50 break; 39 /*case RENDER_STOP_AND_WAIT:51 case RENDER_STOP_AND_WAIT: 40 52 renderStopAndWait(cam); 41 53 break; 42 54 case RENDER_COHERENT: 43 55 renderCoherentWithQueue(cam); 44 break; */56 break; 45 57 default: 46 58 renderCullFrustum(cam); … … 48 60 } 49 61 50 //delete mDistanceQueue;62 delete mDistanceQueue; 51 63 52 64 mFrameId ++; … … 55 67 void OcclusionCullingTerrainSceneTraverser::renderCullFrustum(Camera *cam) 56 68 { 57 /*while(!mDistanceQueue->empty()) 69 AxisAlignedBox box; 70 FrustumPlane plane; 71 72 while(!mDistanceQueue->empty()) 58 73 { 59 SceneNode *node = mDistanceQueue->top();74 Octree *octree = mDistanceQueue->top(); 60 75 mDistanceQueue->pop(); 61 76 62 77 // 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 //{ 67 83 // update node's visited flag 68 node->setLastVisited(mFrameId);69 node->setNodeVisible(true);70 traverse Node(cam, node);71 }84 //TODO: octree->setLastVisited(mFrameId); 85 //TODO: octree->setNodeVisible(true); 86 traverseOctree(cam, octree); 87 /*} 72 88 else 73 89 { 74 90 mNumFrustumCulledNodes ++; 75 } 76 } */91 }*/ 92 } 77 93 } 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 78 105 //----------------------------------------------------------------------- 79 106 /* bool OcclusionCullingTerrainSceneTraverser::isLeaf( SceneNode *node ) … … 85 112 { 86 113 } 114 //----------------------------------------------------------------------- 115 void OcclusionCullingTerrainSceneTraverser::renderOctree( Camera *cam, Octree *octree ) 116 { 117 setRenderingMode(MODE_RENDER); 118 ((OcclusionCullingTerrainSceneManager *)mSceneManager)->_renderOctant(cam, octree); 119 } 87 120 }
Note: See TracChangeset
for help on using the changeset viewer.