#ifndef _OcclusionCullingTerrainSceneManager_H__ #define _OcclusionCullingTerrainSceneManager_H__ #include #include #include #include #include #include #include "OgrePrerequisites.h" #include "OgreOcclusionCullingTerrainSceneTraverser.h" //#include "OgreSolidHalfBoundingBox.h" using namespace std; namespace Ogre { /** Class which implements a scene mangager which uses occlusion queries for culling occluded objects */ class OcclusionCullingTerrainSceneManager: public TerrainSceneManager { public: OcclusionCullingTerrainSceneManager(); ~OcclusionCullingTerrainSceneManager(); void _renderVisibleObjects(void); void _findVisibleObjects(Camera* cam, bool onlyShadowCasters); void _updateSceneGraph(Camera* cam); /** Sets the given option for the SceneManager @remarks Options are: "Algorithm", int *; */ virtual bool setOption( const String &, const void * ); /** Gets the given option for the Scene Manager. @remarks See setOption */ virtual bool getOption( const String &, void * ); bool getOptionValues( const String & key, StringVector &refValueList ); bool getOptionKeys( StringVector &refKeys ); /** Renders one octant of an octree, i.e., renders current octant node and does not traverse deeper into the tree. @remark Note that OctreeNode instances are NOT part of the octree hierarchy, instead one octant of an Octree contains many OctreeNode instances. @param octree the octree to be rendered @param cam current camera */ void _renderOctant(Camera* cam, Octree *octree); protected: /** Recursively counts octree size (i.e., number of octree instances) @param root current octree */ unsigned int countOctreeSize(Octree *root); OcclusionCullingTerrainSceneTraverser *mOcclusionCullingTerrainSceneTraverser; //OcclusionCullingSceneTraverser *mOcclusionCullingTerrainSceneTraverser; }; } #endif // OcclusionCullingTerrainSceneManager_H