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

Revision 2382, 8.3 KB checked in by vizrt_christian_seidl, 17 years ago (diff)

Modification: TestKdTree? works with BIH now.

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_BVH,
95                SM_BIH,
96                SM_OCM,
97                SM_OCT,
98                SM_TER,
99                SM_GEN,
100                SM_SIZE,
101                SM_NOTSET
102        };
103
104        enum ViewCellsMode
105        {
106                VCM_OFF,
107                VCM_ON,
108                VCM_FILTER,
109                VCM_SIZE,
110                VCM_NOTSET
111        };
112
113        enum ShowTree
114        {
115                SHOWTREE_OFF,
116                SHOWTREE_HILITE,
117                SHOWTREE_ALL,
118                SHOWTREE_MODES_NUM
119        };
120
121        enum AppState
122        {
123                AS_NORMAL,
124                AS_RECORD,
125                AS_PLAYBACK
126        };
127
128        struct Options
129        {
130                Options():
131                mRotateSpeed(36.0f),
132                mMoveSpeed(100.0f),
133                mRotationPeriod(30.0f),
134                mKT(2.0f),
135                mKI(1.0f),
136                mMaxDepth(10),
137                mSceneManager(SM_BVH),  //changed cse
138                mRenderMethod(KdTree::KDRM_GTP_CHC),
139                mBuildMethod(KdTree::KDBM_RECURSIVE),
140                mSceneType(ST_SIMPLE),
141                mViewCells(VCM_OFF),
142                mDelRenderQueue(true),
143                mFastStart(false),
144                mBurnIn(false),
145                mDemoMode(false),
146                mEnhancedVisibility(false),
147                mDemoInterval(1.0f),
148                myApp(0)
149                {
150
151                }
152
153                String mSceneOutfileName;
154                String mDemoInfileName;
155                String mDemoOutfileName;
156                String mDemoLogfileName;
157                String mComment;
158                Degree mRotateSpeed;
159                Real mMoveSpeed;
160                Real mRotationPeriod;
161                Real mKT;
162                Real mKI;
163                int mMaxDepth;
164                int mSceneManager;
165                int mRenderMethod;
166                int mBuildMethod;
167                int mSceneType;
168                int mViewCells;
169                bool mDelRenderQueue;
170                bool mFastStart;
171                bool mBurnIn;
172                bool mDemoMode;
173                bool mEnhancedVisibility;
174                Real mDemoInterval;
175                KdTreeApp *myApp;
176        };
177
178        struct DemoStats
179        {
180                unsigned int mTotalNumFrames;
181                unsigned int mNumFrames;
182                Real mTotalEllapsedTime;
183                Real mEllapsedTime;
184        } mDemoStats;
185
186    // Constructor takes a RenderWindow because it uses that to determine input context
187    KdTreeAppListener(RenderWindow* win, SceneManager* sm, const Options& options, 
188                bool useBufferedInputKeys = false, bool useBufferedInputMouse = false);
189
190    virtual ~KdTreeAppListener(void);
191
192        void initOverlayElement(OverlayElement **elInfo, String ext,
193                String name, int top, String caption);
194
195        void initStatsOverlay(void);
196
197        void initKdTreeOverlay(void);
198
199        void showDebugOverlay(bool show);
200
201        void toggleUseViewCells(void);
202
203        void toggleUseVisibilityFilter(void);
204
205        void toggleVizCamera(void);
206
207        void toggleShowBoxes(void);
208
209        void toggleEnhancedVisibility(void);
210
211        void toggleBuildMethod(void);
212
213        void toggleRenderMethod(void);
214
215    virtual bool processUnbufferedKeyInput(const FrameEvent& evt);
216
217    bool processUnbufferedMouseInput(const FrameEvent& evt);
218
219        void moveCamera(void);
220
221    // Override frameStarted event to process that (don't care about frameEnded)
222    bool frameStarted(const FrameEvent& evt);
223
224    bool frameEnded(const FrameEvent& evt);
225
226        void switchMouseMode(void);
227
228        void switchKeyMode(void);
229
230        void keyClicked(KeyEvent* e);
231
232        void keyPressed(KeyEvent* e) {};
233        void keyReleased(KeyEvent* e) {};
234
235        const static Real       DEMO_WAIT;
236        const static String NA;
237        const static String RENDERMETHOD[];
238        const static String RENDERMETHODCAPTION[];
239        const static String BUILDMETHOD[];
240        const static String BUILDMETHODCAPTION[];
241        const static String SCENEMANAGER[];
242        const static String SCENEMANAGERNAME[];
243protected:
244        // basic
245        RenderWindow* mWindow;
246        SceneManager *mSceneMgr;
247        Options mOptions;
248        bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
249
250        // elements
251        SceneNode *mCamNode;
252        Camera* mCamera;
253        Camera* mTopCam;
254
255        // toggle
256        bool mStatsOn;
257
258        bool mVizCamera;
259        bool mFreeMove;
260        bool mTopCamFollow;
261
262        int mShowTree;
263
264        // view cells
265        bool mViewCellsLoaded;
266        bool mUseViewCells;
267        bool mUseVisibilityFilter;
268
269        // counters
270        int mSeqNum;
271        unsigned int mNumScreenShots;
272
273        // rendering/texture options
274        int mSceneDetailIndex;
275        TextureFilterOptions mFiltering;
276        int mAniso;
277
278        // chc stats
279        Real mDelayedQueriesIssued;
280        Real mDelayedTraversedNodes;
281
282        // overlays
283        Overlay *mDemoOverlay;
284        Overlay *mDebugOverlay;
285        Overlay *mKdTreeOverlay;
286        Overlay *mLoadingOverlay;
287
288        OverlayElement *mMyLoadingInfo;
289        OverlayElement *mDemoStatus;
290        TextAreaOverlayElement *mDemoTime;
291        TextAreaOverlayElement *mDemoFPSDisp;
292
293        OverlayElement *mRenderMethodInfo;
294        OverlayElement *mEnhancedVisInfo;
295        OverlayElement *mBuildMethodInfo;
296        OverlayElement *mKdTreeMaxDepthInfo;
297        OverlayElement *mHighlightLevelInfo;
298        OverlayElement *mKTInfo;
299        OverlayElement *mKIInfo;
300        OverlayElement *mMovementInfo;
301        OverlayElement *mTopCamInfo;
302        OverlayElement *mViewCellsInfo;
303        OverlayElement *mViewFilterInfo;
304
305        OverlayElement *mFrustumCulledNodesInfo;
306        OverlayElement *mQueryCulledNodesInfo;
307        OverlayElement *mTraversedNodesInfo;
308        OverlayElement *mHierarchyNodesInfo;
309        OverlayElement *mRenderedNodesInfo;
310        OverlayElement *mObjectsCountInfo;
311        OverlayElement *mQueriesIssuedInfo;
312
313        // input
314        EventProcessor* mEventProcessor;
315        InputReader* mInputDevice;
316
317        // movement
318        Vector3 mTranslateVector;
319        Vector3 mVizCamTransVect;
320        Radian mRotX, mRotY;
321        float mMoveScale;
322        Degree mRotScale;
323        Radian mDeathAngle;
324        // for terrain
325        RaySceneQuery *mRaySceneQuery;
326
327        // just to stop toggles flipping too fast
328        Real mTimeUntilNextToggle ;
329
330        // stuff for walkthrough recording/playback
331        //std::ofstream mDemoFramesLog;
332        std::list<Real> mDemoFPS;
333        Real mTimeUntilNextLogWrite;
334        FrameList mFrameList;
335        FrameList::iterator mCurrFrame;
336        Real mTimeRemaining;
337        Real mWaitBeforeDemoStart;
338
339        AppState mAppState;
340
341        void setDemoOverlay();
342
343        void toggleRecord();
344        void togglePlayback();
345
346        /** write FPS stats to log file (csv) **/
347        void saveLog();
348
349        void saveFrameInfo(Real elapsedTime);
350
351        /** save demo frame data to file **/
352        static void saveFrames(const String& filename, FrameList& framelist);
353        static void saveFramesAscii(const String& filename, FrameList& framelist);
354        static void saveFramesBinary(const String& filename, FrameList& framelist);
355
356        /** load demo frame data from file **/
357        static void loadFrames(const String& filename, FrameList& framelist);
358        static void loadFramesAscii(const String& filename, FrameList& framelist);
359        static void loadFramesBinary(const String& filename, FrameList& framelist);
360
361        void updateStats(void);
362};
363
364#endif
365
Note: See TracBrowser for help on using the repository browser.