source: trunk/VUT/Ogre/include/OgreVisibilityOctreeSceneManager.h @ 187

Revision 187, 4.9 KB checked in by mattausch, 19 years ago (diff)

added animationbug fix (deleting while animation)fixed visibilityQueriesadditive shadow volumes fixed for octree
hack to fully empty queue after traversal
added demo for vienna model

Line 
1#ifndef _VisibilityOctreeSceneManager_H__
2#define _VisibilityOctreeSceneManager_H__
3
4#include <OgreSceneNode.h>
5#include <OgreOctreeSceneManager.h>
6#include <OgreOctreeNode.h>
7#include <OgreOctreeCamera.h>
8#include <OgrePrerequisites.h>
9
10#include "OgreOctreeHierarchyInterface.h"
11#include "VisibilityManager.h"
12
13namespace Ogre {
14
15/**
16        This class extends the octree scene manager, using
17        occlusion queries for visibility culling.
18*/
19class __declspec(dllexport) VisibilityOctreeSceneManager: public OctreeSceneManager
20{
21public:
22        VisibilityOctreeSceneManager(GtpVisibility::VisibilityManager *visManager);
23        ~VisibilityOctreeSceneManager();
24
25        void _renderVisibleObjects();
26        void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
27        void _updateSceneGraph(Camera* cam );
28
29        /** Sets the given option for the SceneManager
30                @remarks Options are: "Algorithm", int *;                       
31        */
32       
33        virtual bool setOption(const String &, const void *);
34        /** Gets the given option for the Scene VisibilityManager.
35            @remarks
36                See setOption
37        */
38        virtual bool getOption(const String &, void *);
39
40        bool getOptionValues(const String & key, StringVector &refValueList);
41        bool getOptionKeys(StringVector &refKeys);
42
43        /** Sets the visibility manager.
44                @param visManager the visibility manager
45        */
46        void setVisibilityManager(GtpVisibility::VisibilityManager *visManager);
47        /** See set.
48        */
49        GtpVisibility::VisibilityManager *getVisibilityManager();
50       
51        /** Render a set of objects, see renderSingleObject for param definitions
52                Override so we can handle delayed rendering of transparent objects
53        */
54        virtual void renderObjects(const RenderPriorityGroup::TransparentRenderablePassList& objs,
55            bool doLightIteration, const LightList* manualLightList = 0);
56
57        /** Writes out stats into the Ogre log file.
58        */
59        void WriteLog();
60
61        /** Override pass so we can do the z-fail pass.
62        */
63        Pass* setPass(Pass* pass);
64
65        /** Override from SceneManager so we can skip all but first pass for depth pass.
66        */
67        bool validatePassForRendering(Pass* pass);
68
69        void RenderItemBuffer(RenderPriorityGroup* pGroup);
70        void RenderSingleObjectForItemBuffer(Renderable *rend, Pass *pass);
71        void renderQueueGroupObjects(RenderQueueGroup* pGroup);
72
73        /** Override from SceneManager so that sub entities can be assigned an id for item buffer.
74        */
75        //Entity* createEntity(const String& entityName, const String& meshName);
76
77        /** Returns pointer to visibility manager.
78        */
79        GtpVisibility::VisibilityManager *GetVisibilityManager();
80
81        /** Returns hierarchy interface.
82        */
83        OctreeHierarchyInterface *GetHierarchyInterface();
84
85        void renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup);
86        void renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup);
87
88protected:
89       
90        /** Creates material for depth pass, e.g., a pass that only fills the depth buffer.
91        */
92        void InitDepthPass();
93        /** Creates material for item buffer.
94        */
95        void InitItemBufferPass();
96        /** Fills render queue so that a visualization can be rendered.
97        */
98        void PrepareVisualization(Camera *cam);
99        /** Initialises necessary parameters for hierarchical visibility culling.
100        */
101        void InitVisibilityCulling(Camera *cam);
102       
103        /// the interface to the scene hierarchy.
104        OctreeHierarchyInterface *mHierarchyInterface;
105        /// manages all visibility options
106        GtpVisibility::VisibilityManager *mVisibilityManager;
107       
108        /// if a visualization of the hierarchical culling is shown
109        bool mShowVisualization;
110
111        /// if the culled nodes are indicated in the visualization
112        bool mVisualizeCulledNodes;
113
114        /// if symbols for the nodes are shown in the visualization
115        bool mRenderNodesForViz;
116        /// if content of the nodes is shown in the visualization
117        bool mRenderNodesContentForViz;
118
119        /// render transparents after the hierarchical traversal
120        bool mDelayRenderTransparents;
121
122        /// use a depth pass (i.e., fill only the depth buffer in the first pass)
123        bool mUseDepthPass;
124        /// flag indicating if we currently render the depth pass
125        bool mRenderDepthPass;
126
127        /// if we use an item buffer for rendering (i.e., object ids as color codes
128        bool mUseItemBuffer;
129        /// if we currently render the item buffer
130        bool mRenderItemBuffer;
131
132        /// if depth write should be enabled
133        bool mEnableDepthWrite;
134        /// if transparents are skipped during rendering
135        bool mSkipTransparents;
136
137        /// the depth pass (no lighting, just filling the depth buffer)
138        Pass *mDepthPass;
139        Pass *mItemBufferPass;
140
141        int mCurrentEntityId;
142        /// flag for passes which should not be deleted from queue during first traversal
143        int mLeavePassesInQueue;
144        ShadowTechnique mSavedShadowTechnique;
145
146        /// if transparent object are considered for item buffer visibility
147        bool mRenderTransparentsForItemBuffer;
148        /// Always execute the vertex program of a pass, e.g., for the depth pass or item buffer
149        bool mExecuteVertexProgramForAllPasses;
150
151        bool mIsHierarchicalCulling;
152};
153
154} // namespace Ogre
155
156#endif // VisibilityOctreeSceneManager_H
Note: See TracBrowser for help on using the repository browser.