Changeset 40 for trunk/VUT/OcclusionCullingSceneManager/src
- Timestamp:
- 04/06/05 18:36:40 (20 years ago)
- Location:
- trunk/VUT/OcclusionCullingSceneManager/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingSceneTraverser.cpp
r39 r40 42 42 mCurrentTestIdx = 0; 43 43 44 //mCurrentAlgorithm = RENDER_CULL_FRUSTUM;44 mCurrentAlgorithm = RENDER_CULL_FRUSTUM; 45 45 switch(mCurrentAlgorithm) 46 46 { … … 148 148 { 149 149 // update node's visited flag 150 char msg2[100]; 151 sprintf(msg2,"yes, visible\n"); 152 OutputDebugString(msg2); 153 150 154 node->setLastVisited(mFrameId); 151 155 node->setNodeVisible(true); … … 154 158 else 155 159 { 160 char msg2[100]; 161 sprintf(msg2,"no, invisible\n"); 162 OutputDebugString(msg2); 163 156 164 mNumFrustumCulledNodes ++; 157 165 } … … 252 260 setRenderingMode(MODE_RENDER); 253 261 254 //HACK (too slow)255 262 mSceneManager->_renderSceneNode(cam, node); 256 263 } … … 260 267 //-- initialise occlusion queries. 261 268 deleteQueries(); 262 263 //char str[100];sprintf(str, "num nodes: %d", mNumSceneNodes);264 //MessageBox( NULL, str, "this is my plugin", MB_OK | MB_ICONERROR | MB_TASKMODAL);265 269 266 270 for(unsigned int i=0; i < mNumSceneNodes; i++) -
trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingTerrainSceneManager.cpp
r34 r40 14 14 OcclusionCullingTerrainSceneManager::OcclusionCullingTerrainSceneManager() 15 15 { 16 mOcclusionCullingSceneTraverser = new OcclusionCullingSceneTraverser(this, mDestRenderSystem); 16 //mOcclusionCullingTerrainSceneTraverser = 17 // new OcclusionCullingTerrainSceneTraverser(this, mDestRenderSystem); 18 19 mOcclusionCullingTerrainSceneTraverser = 20 new OcclusionCullingSceneTraverser(this, mDestRenderSystem); 21 17 22 mDisplayNodes = true; 18 23 //mShowBoundingBoxes = true; … … 22 27 OcclusionCullingTerrainSceneManager::~OcclusionCullingTerrainSceneManager() 23 28 { 24 delete mOcclusionCulling SceneTraverser;29 delete mOcclusionCullingTerrainSceneTraverser; 25 30 } 26 31 //----------------------------------------------------------------------- 27 /*void OcclusionCullingTerrainSceneManager::_renderVisibleObjects(void)32 void OcclusionCullingTerrainSceneManager::_renderVisibleObjects(void) 28 33 { 29 mOcclusionCullingSceneTraverser->renderScene(mCameraInProgress, mSceneRoot); 34 //-- render background 35 clearSpecialCaseRenderQueues(); 36 addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND); 37 addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY); 38 39 setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE); 40 SceneManager::_renderVisibleObjects( ); 41 _deleteRenderedQueueGroups(); 42 43 //-- render visible objects (i.e., all but overlay) 44 clearSpecialCaseRenderQueues(); 45 addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY); 46 setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); 47 48 //mOcclusionCullingTerrainSceneTraverser->renderScene(mCameraInProgress, mOctree); 49 //mOcclusionCullingTerrainSceneTraverser->renderScene(mCameraInProgress, mTerrainRoot); 50 mOcclusionCullingTerrainSceneTraverser->renderScene(mCullCamera, mSceneRoot); 51 _deleteRenderedQueueGroups(); 52 53 //-- render overlay 54 clearSpecialCaseRenderQueues(); 55 SceneManager::_renderVisibleObjects( ); 56 57 clearSpecialCaseRenderQueues(); 30 58 } 31 59 //----------------------------------------------------------------------- … … 38 66 void OcclusionCullingTerrainSceneManager::_updateSceneGraph(Camera* cam) 39 67 { 40 mOcclusionCullingSceneTraverser->preprocess(); 68 mOcclusionCullingTerrainSceneTraverser->setNumSceneNodes(mSceneNodes.size()); 69 mOcclusionCullingTerrainSceneTraverser->setRenderSystem(mDestRenderSystem); 41 70 71 mOcclusionCullingTerrainSceneTraverser->preprocess(); 72 42 73 TerrainSceneManager::_updateSceneGraph(cam); 43 } */74 } 44 75 //----------------------------------------------------------------------- 45 76 bool OcclusionCullingTerrainSceneManager::setOption( const String & key, const void * val ) 46 77 { 47 return mOcclusionCulling SceneTraverser->setOption( key, val) || TerrainSceneManager::setOption( key, val );78 return mOcclusionCullingTerrainSceneTraverser->setOption( key, val) || TerrainSceneManager::setOption( key, val ); 48 79 } 49 80 //----------------------------------------------------------------------- 50 81 bool OcclusionCullingTerrainSceneManager::getOption( const String & key, void *val ) 51 82 { 52 return mOcclusionCulling SceneTraverser->getOption( key, val) || TerrainSceneManager::getOption( key, val ) ;83 return mOcclusionCullingTerrainSceneTraverser->getOption( key, val) || TerrainSceneManager::getOption( key, val ) ; 53 84 } 54 85 //----------------------------------------------------------------------- … … 60 91 bool OcclusionCullingTerrainSceneManager::getOptionKeys( StringVector & refKeys ) 61 92 { 62 return mOcclusionCullingSceneTraverser->getOptionKeys ( refKeys ) || TerrainSceneManager::getOptionKeys( refKeys ); 93 return mOcclusionCullingTerrainSceneTraverser->getOptionKeys ( refKeys ) || TerrainSceneManager::getOptionKeys( refKeys ); 94 } 95 //----------------------------------------------------------------------- 96 void OcclusionCullingTerrainSceneManager::_renderOctant(Camera *cam, Octree *octant) 97 { 98 //Add stuff to be rendered; 99 NodeList::iterator it = octant->mNodes.begin(); 100 101 if ( mShowBoxes ) 102 { 103 mBoxes.push_back( octant->getWireBoundingBox() ); 104 } 105 106 while ( it != octant->mNodes.end() ) 107 { 108 OctreeNode *sn = *it; 109 110 mNumObjects++; 111 112 // check bounding box visibility of scene nodes 113 if( cam->isVisible( sn->_getWorldAABB() ) ) 114 { 115 sn->_addToRenderQueue(cam, getRenderQueue(), false ); 116 //node->_findVisibleObjects(cam, getRenderQueue(), false, mDisplayNodes, false); 117 mVisible.push_back( sn ); 118 119 if ( mDisplayNodes ) 120 { 121 getRenderQueue()->addRenderable( sn ); 122 123 // check if the scene manager or this node wants the bounding box shown. 124 if (sn->getShowBoundingBox() || mShowBoundingBoxes) 125 sn->_addBoundingBoxToQueue(getRenderQueue()); 126 } 127 } 128 ++it; 129 } 130 131 SceneManager::_renderVisibleObjects(); 132 133 // delete all rendered objects from renderqueue 134 _deleteRenderedQueueGroups(); 63 135 } 64 136 } -
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.