source: trunk/VUT/work/TestCullingTerrain/TerrainFrameListener.h @ 187

Revision 187, 7.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 _TerrainFrameListener_H__
2#define _TerrainFrameListener_H__
3
4#include "CEGUIForwardRefs.h"
5#include <Ogre.h>
6#include <OgreKeyEvent.h>
7#include <OgreEventListeners.h>
8#include <OgreStringConverter.h>
9#include <OgreException.h>
10#include "VisibilityEnvironment.h"
11#include "VisibilityManager.h"
12#include "OgreTerrainContentGenerator.h"
13#include "OgrePlatformQueryManager.h"
14
15
16class TestCullingTerrainApplication;
17
18
19using namespace Ogre;
20
21
22/** Frame listener specialised for terrains.
23*/
24class TerrainFrameListener: public FrameListener, public MouseListener,
25                                                        public MouseMotionListener, public KeyListener
26{
27public:
28       
29   TerrainFrameListener(RenderWindow* win,
30                                                Camera* cam,
31                                                SceneManager *sceneManager,
32                                                CEGUI::Renderer *renderer,
33                                                TerrainContentGenerator *contentGenerator,
34                                                Camera *vizCamera,
35                                                SceneNode *camNode,
36                                                Light *sunLight,
37                                                TestCullingTerrainApplication *app);
38
39   ~TerrainFrameListener();
40
41
42   bool frameStarted(const FrameEvent& evt);
43   bool frameEnded(const FrameEvent& evt);
44   //bool processUnbufferedKeyInput(const FrameEvent& evt);
45   
46
47   /* MouseListener callbacks. */
48   virtual void mouseClicked(MouseEvent* e) { }
49   virtual void mouseEntered(MouseEvent* e) { }
50   virtual void mouseExited(MouseEvent* e)  { }
51
52   // This is when the mouse button goes DOWN.
53   void mousePressed(MouseEvent* e);
54
55   // This is when the mouse button is let UP.
56   void mouseReleased(MouseEvent* e);
57
58   /* MouseMotionListener callbacks */
59   void mouseMoved(MouseEvent *e);
60   
61   // This is when the mouse is clicked, held and dragged.
62   void mouseDragged(MouseEvent *e);
63
64   void mouseDragDropped(MouseEvent *e);
65   void keyPressed(KeyEvent* e);
66
67   void keyReleased(KeyEvent* e);
68   void keyClicked(KeyEvent* e);
69 
70   /** The information about camera position and orienation per frame.
71   */
72   typedef struct
73   {
74           Vector3 position;
75           Quaternion orientation;
76           Real timeElapsed;
77   } frame_info;
78
79   enum  {WALKTHROUGH, REPLAY, STATE_NUM};
80
81   // visualization modes for scene nodes
82   enum {NODEVIZ_NONE, NODEVIZ_RENDER_NODES, NODEVIZ_RENDER_NODES_AND_CONTENT, NODEVIZ_MODES_NUM};
83   //enum {NODEVIZ_NONE, NODEVIZ_RENDER_GEOMETRY, NODEVIZ_MODES_NUM};
84
85   void zoomVizCamera(int zoom);
86       
87   void addFrameInfo(SceneNode *camNode, Real timeElapsed);
88   void setCurrentFrameInfo(Real timeElapsed);
89
90   void setAlgorithm(int algorithm);
91
92   void moveCamera();
93
94   void writeFrames();
95   void loadFrames();
96
97 
98    // Constructor takes a RenderWindow because it uses that to determine input context
99    //ExampleFrameListener(RenderWindow* win, Camera* cam, bool useBufferedInputKeys = false, bool useBufferedInputMouse = false)
100   
101    bool processUnbufferedKeyInput(const FrameEvent& evt);
102    bool processUnbufferedMouseInput(const FrameEvent& evt);
103
104    void showStats(bool show);
105
106        void updateStats();
107
108        void toggleShowHelp();
109        void toggleShowStats();
110
111        void toggleShowShadows();
112        void toggleDisplayCameraDetails();
113        void takeScreenshot();
114        void nextSceneDetailLevel();
115        void nextFilter();
116        void nextAlgorithm();
117        void nextNodeVizMode();
118        void nextAppState();
119    void changeThreshold(int incr);
120        void changeAssumedVisibility(int incr);
121        void setTestGeometryForVisibleLeaves(bool testGeometryForVisibleLeaves);
122        void toggleShowOctree();
123        void toggleUseDepthPass();
124        void toggleShowViz();
125        void toggleRecord();
126
127        /** Applies visibility query. Collects the visible objects
128                and their visibility information.
129                @param fromPoint if query should be from point or from camera
130                @param relativeVisibility if query should return number of visible pixels or
131                the ratio visible / projected pixels.
132                @param useItemBuffer if item buffer should be used or occlusion queries
133        */
134        void applyVisibilityQuery(bool fromPoint, bool relativeVisibility, bool useItemBuffer);
135
136        void toggleShowQueryStats();
137
138        /** Sets the type of the objects generated in the scene.
139        */
140        void setObjectType(int objectType);
141
142        static String msAlgorithmCaptions[];
143        static String msQueryTypeCaptions[];
144        static String msQueryRelativeVisCaptions[];
145        static String msQueryMethodCaptions[];
146        static Real msObjectTerrainOffsets[];
147        static Real msObjectScales[];
148        static String msObjectCaptions[];
149
150protected:
151
152        void initHelpOverlayElement(String name, int top);
153        void initOverlayElement(OverlayElement **elInfo, String ext, String name,
154                                                        int top, String caption);
155
156        //-- initialise overlays
157        void initHelpOverlay();
158        void initVisStatsOverlay();
159        void initQueryOverlay();
160
161        void resetStats();
162       
163        SceneManager *mSceneMgr;           // A pointer to the scene manager
164   
165        CEGUI::Renderer *mGUIRenderer;     // cegui renderer
166       
167        int mCurrentAlgorithm;
168        int mVisibilityThreshold;
169        int mAssumedVisibility;
170        // the current frame number
171        int mCurrentFrame;
172        // the current application state
173        int mAppState;
174        // The number of objects on the screen
175        int mObjectCount;           
176        // visualization mode
177        int mNodeVizMode;
178
179        SceneNode *mCurrentObject;    // the newly created object
180
181        OverlayElement *mAlgorithmInfo;
182        OverlayElement *mThresholdInfo;
183        OverlayElement *mAssumedVisibilityInfo;
184        OverlayElement *mFrustumCulledNodesInfo;
185        OverlayElement *mQueryCulledNodesInfo;
186    OverlayElement *mTraversedNodesInfo;
187        OverlayElement *mHierarchyNodesInfo;
188        OverlayElement *mTestGeometryForVisibleLeavesInfo;
189        OverlayElement *mUseDepthPassInfo;
190        OverlayElement *mRenderedNodesInfo;
191        OverlayElement *mObjectsCountInfo;
192        OverlayElement *mQueriesIssuedInfo;
193        OverlayElement *mDelayedQueriesIssuedInfo;
194        OverlayElement *mDelayedTraversedNodesInfo;
195        OverlayElement *mCurrentObjectTypeInfo;
196
197        OverlayElement *mQueryTypeInfo;
198        OverlayElement *mQueryVisibleNodesInfo;
199        OverlayElement *mQueryVisibleGeometryInfo;
200        OverlayElement *mQueryVisiblePatchInfo;
201
202        OverlayElement *mQueryVisiblityInfo;
203        OverlayElement *mQueryNodeVisibilityInfo;
204        OverlayElement *mQueryGeometryVisibilityInfo;
205        OverlayElement *mQueryPatchVisibilityInfo;
206        //OverlayElement *mHelpInfo;
207
208        RayQueryExecutor *mRayQueryExecutor;
209        TerrainContentGenerator *mTerrainContentGenerator;
210
211        bool mTestGeometryForVisibleLeaves;
212        bool mShowOctree;
213        bool mUseDepthPass;
214        bool mShowVisualization;
215        bool mCullCamera;
216        bool mRecord;
217        bool mShowShadows;
218        bool mVisualizeCulledNodes;
219        bool mShowHelp;
220        bool mStatsOn;
221        bool mLMouseDown, mRMouseDown;     // True if the mouse buttons are down
222        bool mShutdownRequested;
223        bool mDisplayCameraDetails;
224        bool mUseItemBuffer;
225        bool mUseAnimation;
226       
227        int mItemBufferMode;
228
229        Real mVizCameraHeight;
230
231        Camera *mVizCamera;
232        SceneNode *mCamNode;
233       
234        //std::deque<Vector3> mWalkList;   // The list of points we are walking to
235        std::vector<frame_info> mFrameInfo;
236               
237        Real mReplayTimeElapsed;
238        //EventProcessor* mEventProcessor;
239    InputReader* mInputDevice;
240    Camera* mCamera;
241
242    Vector3 mTranslateVector;
243    RenderWindow* mWindow;
244   
245        unsigned int mNumScreenShots;
246    int mSceneDetailIndex;
247        int mAniso;
248
249        float mMoveScale;
250    Degree mRotScale;
251
252    // just to stop toggles flipping too fast
253    Real mTimeDelay;
254    Radian mRotX, mRotY;
255    TextureFilterOptions mFiltering;
256 
257        Real mMoveSpeed;
258    Degree mRotateSpeed;
259   
260        Overlay* mDebugOverlay;
261        Overlay* mHelpOverlay;
262        Overlay* mCullStatsOverlay;
263        Overlay* mQueryOverlay;
264
265        Light *mSunLight;
266        GtpVisibility::VisibilityManager *mVisibilityManager;
267        EventProcessor* mEventProcessor;
268       
269        bool mShiftPressed;
270        bool mShowQueryStats;
271
272        unsigned long mAvgFps;
273        unsigned long mFrameCount;
274
275        //bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
276        PlatformQueryManager *mQueryManager;
277
278        float mDelayedQueriesIssued;
279        float mDelayedTraversedNodes;
280
281        int mCurrentObjectType;
282
283        bool mDeleteObjects;
284
285        TestCullingTerrainApplication *mApplication;
286};
287
288
289#endif //_TerrainFrameListener_H__
Note: See TracBrowser for help on using the repository browser.