source: trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingTerrainSceneManager.cpp @ 51

Revision 51, 4.3 KB checked in by mattausch, 19 years ago (diff)
RevLine 
[33]1#include "OgreOcclusionCullingTerrainSceneManager.h"
2#include "OgreMath.h"
3#include "OgreIteratorWrappers.h"
4#include "OgreRenderSystem.h"
5#include "OgreCamera.h"
6#include "OgreHardwareOcclusionQuery.h"
7#include "OgreSolidHalfBoundingBox.h"
8
[41]9#include <windows.h>
[33]10
11namespace Ogre {
12        //-----------------------------------------------------------------------
13        OcclusionCullingTerrainSceneManager::OcclusionCullingTerrainSceneManager()
14        {
[48]15                mOcclusionCullingOctreeSceneTraverser =
16                        new OcclusionCullingOctreeSceneTraverser(this, mDestRenderSystem);
[40]17
[41]18                //mDisplayNodes = true;
[34]19                //mShowBoundingBoxes = true;
[51]20                mShowBoxes = true;
[44]21                mMaxDepth = 20;
[33]22        }
23        //-----------------------------------------------------------------------
24        OcclusionCullingTerrainSceneManager::~OcclusionCullingTerrainSceneManager()
25        {
[48]26                delete mOcclusionCullingOctreeSceneTraverser;
[33]27        }
28        //-----------------------------------------------------------------------
[40]29        void OcclusionCullingTerrainSceneManager::_renderVisibleObjects(void)
[33]30        {
[40]31                //-- render background
32                clearSpecialCaseRenderQueues();
33                addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND);
34                addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY);
35       
36                setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
37                SceneManager::_renderVisibleObjects( );
38                _deleteRenderedQueueGroups();
39
40                //-- render visible objects (i.e., all but overlay)
41                clearSpecialCaseRenderQueues();
42                addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
43                setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
44
[48]45                mOcclusionCullingOctreeSceneTraverser->setSceneRoot(mOctree);
46                mOcclusionCullingOctreeSceneTraverser->renderScene(mCameraInProgress);
[42]47               
[40]48                _deleteRenderedQueueGroups();
49
50                //-- render overlay
51                clearSpecialCaseRenderQueues();
52                SceneManager::_renderVisibleObjects( );
53       
54                clearSpecialCaseRenderQueues();
[33]55        }
56        //-----------------------------------------------------------------------
57        void OcclusionCullingTerrainSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters)
58        {
59                // must be empty because objects are found and rendered in an interleaved fashion
60                // in _renderVisibibleObjects
[42]61                //char *msg = "now finding visible objects\n"; OutputDebugString(msg);
[33]62        }
63        //-----------------------------------------------------------------------
64        void OcclusionCullingTerrainSceneManager::_updateSceneGraph(Camera* cam)
65        {
[42]66                //char *msg = "now updating scenegraph\n"; OutputDebugString(msg);
[44]67                //mOcclusionCullingTerrainSceneTraverser->preprocess();
68
[48]69        mOcclusionCullingOctreeSceneTraverser->setNumSceneNodes((int)mSceneNodes.size());
70                mOcclusionCullingOctreeSceneTraverser->setRenderSystem(mDestRenderSystem);
[44]71       
[48]72                mOcclusionCullingOctreeSceneTraverser->setNumOctreeNodes(mNumOctreeNodes);
[33]73
74                TerrainSceneManager::_updateSceneGraph(cam);
[40]75        }
[33]76        //-----------------------------------------------------------------------
77        bool OcclusionCullingTerrainSceneManager::setOption( const String & key, const void * val )
78        {
[48]79                return mOcclusionCullingOctreeSceneTraverser->setOption( key, val) || TerrainSceneManager::setOption( key, val );
[33]80        }
81        //-----------------------------------------------------------------------
82        bool OcclusionCullingTerrainSceneManager::getOption( const String & key, void *val )
83        {
[48]84                return mOcclusionCullingOctreeSceneTraverser->getOption( key, val) || TerrainSceneManager::getOption( key, val ) ;
[33]85        }
86        //-----------------------------------------------------------------------
87        bool OcclusionCullingTerrainSceneManager::getOptionValues( const String & key, StringVector  &refValueList )
88        {
89                return TerrainSceneManager::getOptionValues( key, refValueList );
90        }
91        //-----------------------------------------------------------------------
92        bool OcclusionCullingTerrainSceneManager::getOptionKeys( StringVector & refKeys )
93        {
[48]94                return mOcclusionCullingOctreeSceneTraverser->getOptionKeys ( refKeys ) || TerrainSceneManager::getOptionKeys( refKeys );
[33]95        }
[40]96        //-----------------------------------------------------------------------
[42]97        /*unsigned int OcclusionCullingTerrainSceneManager::countNumOctrees(Octree *root)
[41]98        {
99                unsigned int result = 1;
100                               
[42]101                for(int i=0; i<8; ++i)
[41]102                {
103                        Octree *nextChild = root->mChildren[(i & 4) >> 2][(i & 2) >> 1][i & 1];
104               
105                        if(nextChild != 0)
[42]106                                result += countNumOctrees(nextChild);
[41]107                }
108               
109                return result;
[42]110        }*/
[33]111}       
Note: See TracBrowser for help on using the repository browser.