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

Revision 51, 4.3 KB checked in by mattausch, 19 years ago (diff)
Line 
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
9#include <windows.h>
10
11namespace Ogre {
12        //-----------------------------------------------------------------------
13        OcclusionCullingTerrainSceneManager::OcclusionCullingTerrainSceneManager()
14        {
15                mOcclusionCullingOctreeSceneTraverser =
16                        new OcclusionCullingOctreeSceneTraverser(this, mDestRenderSystem);
17
18                //mDisplayNodes = true;
19                //mShowBoundingBoxes = true;
20                mShowBoxes = true;
21                mMaxDepth = 20;
22        }
23        //-----------------------------------------------------------------------
24        OcclusionCullingTerrainSceneManager::~OcclusionCullingTerrainSceneManager()
25        {
26                delete mOcclusionCullingOctreeSceneTraverser;
27        }
28        //-----------------------------------------------------------------------
29        void OcclusionCullingTerrainSceneManager::_renderVisibleObjects(void)
30        {
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
45                mOcclusionCullingOctreeSceneTraverser->setSceneRoot(mOctree);
46                mOcclusionCullingOctreeSceneTraverser->renderScene(mCameraInProgress);
47               
48                _deleteRenderedQueueGroups();
49
50                //-- render overlay
51                clearSpecialCaseRenderQueues();
52                SceneManager::_renderVisibleObjects( );
53       
54                clearSpecialCaseRenderQueues();
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
61                //char *msg = "now finding visible objects\n"; OutputDebugString(msg);
62        }
63        //-----------------------------------------------------------------------
64        void OcclusionCullingTerrainSceneManager::_updateSceneGraph(Camera* cam)
65        {
66                //char *msg = "now updating scenegraph\n"; OutputDebugString(msg);
67                //mOcclusionCullingTerrainSceneTraverser->preprocess();
68
69        mOcclusionCullingOctreeSceneTraverser->setNumSceneNodes((int)mSceneNodes.size());
70                mOcclusionCullingOctreeSceneTraverser->setRenderSystem(mDestRenderSystem);
71       
72                mOcclusionCullingOctreeSceneTraverser->setNumOctreeNodes(mNumOctreeNodes);
73
74                TerrainSceneManager::_updateSceneGraph(cam);
75        }
76        //-----------------------------------------------------------------------
77        bool OcclusionCullingTerrainSceneManager::setOption( const String & key, const void * val )
78        {
79                return mOcclusionCullingOctreeSceneTraverser->setOption( key, val) || TerrainSceneManager::setOption( key, val );
80        }
81        //-----------------------------------------------------------------------
82        bool OcclusionCullingTerrainSceneManager::getOption( const String & key, void *val )
83        {
84                return mOcclusionCullingOctreeSceneTraverser->getOption( key, val) || TerrainSceneManager::getOption( key, val ) ;
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        {
94                return mOcclusionCullingOctreeSceneTraverser->getOptionKeys ( refKeys ) || TerrainSceneManager::getOptionKeys( refKeys );
95        }
96        //-----------------------------------------------------------------------
97        /*unsigned int OcclusionCullingTerrainSceneManager::countNumOctrees(Octree *root)
98        {
99                unsigned int result = 1;
100                               
101                for(int i=0; i<8; ++i)
102                {
103                        Octree *nextChild = root->mChildren[(i & 4) >> 2][(i & 2) >> 1][i & 1];
104               
105                        if(nextChild != 0)
106                                result += countNumOctrees(nextChild);
107                }
108               
109                return result;
110        }*/
111}       
Note: See TracBrowser for help on using the repository browser.