source: GTP/trunk/App/Demos/Vis/KdTreeDemo/OGRE/include/TestKdTreeAppListener.h @ 1304

Revision 1304, 8.3 KB checked in by szydlowski, 18 years ago (diff)

final touches

Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4    (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2005 The OGRE Team
8Also see acknowledgements in Readme.html
9
10You may use this sample code for anything you like, it is not covered by the
11LGPL like the rest of the engine.
12-----------------------------------------------------------------------------
13*/
14/*
15-----------------------------------------------------------------------------
16Filename:    ExampleFrameListener.h
17Description: Defines an example frame listener which responds to frame events.
18This frame listener just moves a specified camera around based on
19keyboard and mouse movements.
20Mouse:    Freelook
21W or Up:  Forward
22S or Down:Backward
23A:        Step left
24D:        Step right
25             PgUp:     Move upwards
26             PgDown:   Move downwards
27             F:        Toggle frame rate stats on/off
28                         R:        Render mode
29             T:        Cycle texture filtering
30                       Bilinear, Trilinear, Anisotropic(8)
31             P:        Toggle on/off display of camera position / orientation
32-----------------------------------------------------------------------------
33*/
34
35#ifndef __KdTreeAppListener_H__
36#define __KdTreeAppListener_H__
37
38#include <Ogre.h>
39#include <OgreKeyEvent.h>
40#include <OgreEventListeners.h>
41#include <OgreStringConverter.h>
42#include <OgreException.h>
43#include <OgreTextAreaOverlayElement.h>
44
45#include <OgreKdTree.h>
46
47#define CONV_OCM_TO_KDT_ALG(i) (i == 0 ? 3 : i)
48#define CONV_KDT_TO_OCM_ALG(i) (i % 3)
49#define VIZ_VIEWPORT_Z_ORDER 10
50
51#define TERRAIN_SCENE "terrain"
52
53using namespace Ogre;
54
55struct FrameInfo
56{
57        FrameInfo(Vector3 pos, Quaternion or, Real time):
58        mPosition(pos), mOrientation(or), mElapsedTime(time)
59        { }
60
61        Vector3 mPosition;
62        Quaternion mOrientation;
63        Real    mElapsedTime;
64};
65
66typedef std::list<FrameInfo> FrameList;
67
68class KdTreeApp;
69
70class KdTreeAppListener: public FrameListener, public KeyListener
71{
72
73public:
74        // visualization modes for scene nodes
75        enum VizMode
76        {
77                NODEVIZ_NONE,
78                NODEVIZ_RENDER_NODES,
79                NODEVIZ_RENDER_NODES_AND_CONTENT,
80                NODEVIZ_MODES_NUM
81        };
82
83        enum SceneType
84        {
85                ST_SIMPLE,
86                ST_TERRAIN,
87                ST_GEOMETRY
88        };
89
90        enum SceneMgr
91        {
92                SM_KDT,
93                SM_KTE,
94                SM_OCM,
95                SM_OCT,
96                SM_TER,
97                SM_GEN,
98                SM_SIZE,
99                SM_NOTSET
100        };
101
102        enum ViewCellsMode
103        {
104                VCM_OFF,
105                VCM_ON,
106                VCM_FILTER,
107                VCM_SIZE,
108                VCM_NOTSET
109        };
110
111        enum ShowTree
112        {
113                SHOWTREE_OFF,
114                SHOWTREE_HILITE,
115                SHOWTREE_ALL,
116                SHOWTREE_MODES_NUM
117        };
118
119        enum AppState
120        {
121                AS_NORMAL,
122                AS_RECORD,
123                AS_PLAYBACK
124        };
125
126        struct Options
127        {
128                Options():
129                mRotateSpeed(36.0f),
130                mMoveSpeed(100.0f),
131                mRotationPeriod(30.0f),
132                mKT(2.0f),
133                mKI(1.0f),
134                mMaxDepth(10),
135                mSceneManager(SM_KDT),
136                mRenderMethod(KdTree::KDRM_GTP_CHC),
137                mBuildMethod(KdTree::KDBM_RECURSIVE),
138                mSceneType(ST_SIMPLE),
139                mViewCells(VCM_OFF),
140                mDelRenderQueue(true),
141                mFastStart(false),
142                mBurnIn(false),
143                mDemoMode(false),
144                mEnhancedVisibility(false),
145                mDemoInterval(1.0f),
146                myApp(0)
147                {
148
149                }
150
151                String mSceneOutfileName;
152                String mDemoInfileName;
153                String mDemoOutfileName;
154                String mDemoLogfileName;
155                String mComment;
156                Degree mRotateSpeed;
157                Real mMoveSpeed;
158                Real mRotationPeriod;
159                Real mKT;
160                Real mKI;
161                int mMaxDepth;
162                int mSceneManager;
163                int mRenderMethod;
164                int mBuildMethod;
165                int mSceneType;
166                int mViewCells;
167                bool mDelRenderQueue;
168                bool mFastStart;
169                bool mBurnIn;
170                bool mDemoMode;
171                bool mEnhancedVisibility;
172                Real mDemoInterval;
173                KdTreeApp *myApp;
174        };
175
176        struct DemoStats
177        {
178                unsigned int mTotalNumFrames;
179                unsigned int mNumFrames;
180                Real mTotalEllapsedTime;
181                Real mEllapsedTime;
182        } mDemoStats;
183
184    // Constructor takes a RenderWindow because it uses that to determine input context
185    KdTreeAppListener(RenderWindow* win, SceneManager* sm, const Options& options, 
186                bool useBufferedInputKeys = false, bool useBufferedInputMouse = false);
187
188    virtual ~KdTreeAppListener(void);
189
190        void initOverlayElement(OverlayElement **elInfo, String ext,
191                String name, int top, String caption);
192
193        void initStatsOverlay(void);
194
195        void initKdTreeOverlay(void);
196
197        void showDebugOverlay(bool show);
198
199        void toggleUseViewCells(void);
200
201        void toggleUseVisibilityFilter(void);
202
203        void toggleVizCamera(void);
204
205        void toggleShowBoxes(void);
206
207        void toggleEnhancedVisibility(void);
208
209        void toggleBuildMethod(void);
210
211        void toggleRenderMethod(void);
212
213    virtual bool processUnbufferedKeyInput(const FrameEvent& evt);
214
215    bool processUnbufferedMouseInput(const FrameEvent& evt);
216
217        void moveCamera(void);
218
219    // Override frameStarted event to process that (don't care about frameEnded)
220    bool frameStarted(const FrameEvent& evt);
221
222    bool frameEnded(const FrameEvent& evt);
223
224        void switchMouseMode(void);
225
226        void switchKeyMode(void);
227
228        void keyClicked(KeyEvent* e);
229
230        void keyPressed(KeyEvent* e) {};
231        void keyReleased(KeyEvent* e) {};
232
233        const static Real       DEMO_WAIT;
234        const static String NA;
235        const static String RENDERMETHOD[];
236        const static String RENDERMETHODCAPTION[];
237        const static String BUILDMETHOD[];
238        const static String BUILDMETHODCAPTION[];
239        const static String SCENEMANAGER[];
240        const static String SCENEMANAGERNAME[];
241protected:
242        // basic
243        RenderWindow* mWindow;
244        SceneManager *mSceneMgr;
245        Options mOptions;
246        bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
247
248        // elements
249        SceneNode *mCamNode;
250        Camera* mCamera;
251        Camera* mTopCam;
252
253        // toggle
254        bool mStatsOn;
255
256        bool mVizCamera;
257        bool mFreeMove;
258        bool mTopCamFollow;
259
260        int mShowTree;
261
262        // view cells
263        bool mViewCellsLoaded;
264        bool mUseViewCells;
265        bool mUseVisibilityFilter;
266
267        // counters
268        int mSeqNum;
269        unsigned int mNumScreenShots;
270
271        // rendering/texture options
272        int mSceneDetailIndex;
273        TextureFilterOptions mFiltering;
274        int mAniso;
275
276        // chc stats
277        Real mDelayedQueriesIssued;
278        Real mDelayedTraversedNodes;
279
280        // overlays
281        Overlay *mDemoOverlay;
282        Overlay *mDebugOverlay;
283        Overlay *mKdTreeOverlay;
284        Overlay *mLoadingOverlay;
285
286        OverlayElement *mMyLoadingInfo;
287        OverlayElement *mDemoStatus;
288        TextAreaOverlayElement *mDemoTime;
289        TextAreaOverlayElement *mDemoFPSDisp;
290
291        OverlayElement *mRenderMethodInfo;
292        OverlayElement *mEnhancedVisInfo;
293        OverlayElement *mBuildMethodInfo;
294        OverlayElement *mKdTreeMaxDepthInfo;
295        OverlayElement *mHighlightLevelInfo;
296        OverlayElement *mKTInfo;
297        OverlayElement *mKIInfo;
298        OverlayElement *mMovementInfo;
299        OverlayElement *mTopCamInfo;
300        OverlayElement *mViewCellsInfo;
301        OverlayElement *mViewFilterInfo;
302
303        OverlayElement *mFrustumCulledNodesInfo;
304        OverlayElement *mQueryCulledNodesInfo;
305        OverlayElement *mTraversedNodesInfo;
306        OverlayElement *mHierarchyNodesInfo;
307        OverlayElement *mRenderedNodesInfo;
308        OverlayElement *mObjectsCountInfo;
309        OverlayElement *mQueriesIssuedInfo;
310
311        // input
312        EventProcessor* mEventProcessor;
313        InputReader* mInputDevice;
314
315        // movement
316        Vector3 mTranslateVector;
317        Vector3 mVizCamTransVect;
318        Radian mRotX, mRotY;
319        float mMoveScale;
320        Degree mRotScale;
321        Radian mDeathAngle;
322        // for terrain
323        RaySceneQuery *mRaySceneQuery;
324
325        // just to stop toggles flipping too fast
326        Real mTimeUntilNextToggle ;
327
328        // stuff for walkthrough recording/playback
329        //std::ofstream mDemoFramesLog;
330        std::list<Real> mDemoFPS;
331        Real mTimeUntilNextLogWrite;
332        FrameList mFrameList;
333        FrameList::iterator mCurrFrame;
334        Real mTimeRemaining;
335        Real mWaitBeforeDemoStart;
336
337        AppState mAppState;
338
339        void setDemoOverlay();
340
341        void toggleRecord();
342        void togglePlayback();
343
344        /** write FPS stats to log file (csv) **/
345        void saveLog();
346
347        void saveFrameInfo(Real elapsedTime);
348
349        /** save demo frame data to file **/
350        static void saveFrames(const String& filename, FrameList& framelist);
351        static void saveFramesAscii(const String& filename, FrameList& framelist);
352        static void saveFramesBinary(const String& filename, FrameList& framelist);
353
354        /** load demo frame data from file **/
355        static void loadFrames(const String& filename, FrameList& framelist);
356        static void loadFramesAscii(const String& filename, FrameList& framelist);
357        static void loadFramesBinary(const String& filename, FrameList& framelist);
358
359        void updateStats(void);
360};
361
362#endif
363
Note: See TracBrowser for help on using the repository browser.