source: trunk/VUT/Ogre/src/OgreVisibilityTerrainSceneManager.cpp @ 86

Revision 86, 4.4 KB checked in by mattausch, 19 years ago (diff)
Line 
1#include "OgreVisibilityTerrainSceneManager.h"
2#include "OgreOctreeHierarchyInterface.h"
3#include "OgreVisibilityOptionsManager.h"
4#include <OgreMath.h>
5#include <OgreIteratorWrappers.h>
6#include <OgreRenderSystem.h>
7#include <OgreCamera.h>
8
9//#include <windows.h>
10
11namespace Ogre {
12//namespace GtpVisibility {
13//-----------------------------------------------------------------------
14VisibilityTerrainSceneManager::VisibilityTerrainSceneManager(
15        GtpVisibility::VisibilityManager *visManager): mVisibilityManager(visManager)
16{
17        mHierarchyInterface =
18                new OctreeHierarchyInterface(this, mDestRenderSystem);
19
20        //mShowBoxes = true;
21        //mDisplayNodes = true;
22        //mShowBoundingBoxes = true;
23        mMaxDepth = 20;
24}
25//-----------------------------------------------------------------------
26VisibilityTerrainSceneManager::~VisibilityTerrainSceneManager()
27{
28        delete mHierarchyInterface;
29}
30//-----------------------------------------------------------------------
31void VisibilityTerrainSceneManager::_renderVisibleObjects()
32{
33        //-- render background
34        clearSpecialCaseRenderQueues();
35        addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND);
36        addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY);
37
38        setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
39        SceneManager::_renderVisibleObjects();
40#ifdef GTP_VISIBILITY_MODIFIED_OGRE
41        _deleteRenderedQueueGroups();
42#endif
43
44        //-- render visible objects (i.e., all but overlay)
45        clearSpecialCaseRenderQueues();
46        addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
47        setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
48
49        mHierarchyInterface->InitFrame(mOctree, mCameraInProgress);
50        mVisibilityManager->ApplyVisibilityCulling();
51
52#ifdef GTP_VISIBILITY_MODIFIED_OGRE
53        _deleteRenderedQueueGroups();
54#endif
55
56        //-- render overlay
57        clearSpecialCaseRenderQueues();
58        SceneManager::_renderVisibleObjects( );
59}
60//-----------------------------------------------------------------------
61void VisibilityTerrainSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters)
62{
63        // must be empty because objects are found and rendered in an interleaved fashion
64        // in _renderVisibibleObjects
65}
66//-----------------------------------------------------------------------
67void VisibilityTerrainSceneManager::_updateSceneGraph(Camera* cam)
68{
69        //mHierarchyInterface->setNumSceneNodes((int)mSceneNodes.size());
70        mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface);
71        mHierarchyInterface->SetRenderSystem(mDestRenderSystem);
72
73#ifdef GTP_VISIBILITY_MODIFIED_OGRE
74    mHierarchyInterface->SetNumOctreeNodes(mNumOctreeNodes);
75#endif
76        TerrainSceneManager::_updateSceneGraph(cam);
77}
78//-----------------------------------------------------------------------
79bool VisibilityTerrainSceneManager::setOption(const String & key, const void * val)
80{
81        return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
82                setOption(key, val) || TerrainSceneManager::setOption(key, val);
83}
84//-----------------------------------------------------------------------
85bool VisibilityTerrainSceneManager::getOption(const String & key, void *val)
86{
87        if (key == "NumHierarchyNodes")
88        {
89                * static_cast<unsigned int *>(val) = (unsigned int)mNumOctreeNodes;
90                return true;
91        }
92       
93        return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
94                getOption(key, val) && TerrainSceneManager::getOption(key, val);
95}
96//-----------------------------------------------------------------------
97bool VisibilityTerrainSceneManager::getOptionValues(const String & key, StringVector  &refValueList)
98{
99        return TerrainSceneManager::getOptionValues( key, refValueList);
100}
101//-----------------------------------------------------------------------
102bool VisibilityTerrainSceneManager::getOptionKeys(StringVector & refKeys)
103{
104        return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
105                getOptionKeys(refKeys) || TerrainSceneManager::getOptionKeys(refKeys);
106}
107//-----------------------------------------------------------------------
108void VisibilityTerrainSceneManager::setVisibilityManager(GtpVisibility::VisibilityManager *visManager)
109{
110        mVisibilityManager = visManager;
111}
112//-----------------------------------------------------------------------
113GtpVisibility::VisibilityManager *VisibilityTerrainSceneManager::getVisibilityManager( void )
114{
115        return mVisibilityManager;
116}
117//} // namespace GtpVisibility
118} // namespace Ogre
Note: See TracBrowser for help on using the repository browser.