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

Revision 160, 7.6 KB checked in by mattausch, 19 years ago (diff)

added animation

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