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

Revision 1250, 7.3 KB checked in by szydlowski, 18 years ago (diff)

implemented enhanced vis with early abort
also own frame & time counter in demo mode
fixed dependencies in solution file

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
44#include <OgreKdTree.h>
45
46#define CONV_OCM_TO_KDT_ALG(i) (i == 0 ? 3 : i)
47#define CONV_KDT_TO_OCM_ALG(i) (i % 3)
48#define VIZ_VIEWPORT_Z_ORDER 10
49
50using namespace Ogre;
51
52struct FrameInfo
53{
54        FrameInfo(Vector3 pos, Quaternion or, Real time):
55        mPosition(pos), mOrientation(or), mElapsedTime(time)
56        { }
57
58        Vector3 mPosition;
59        Quaternion mOrientation;
60        Real    mElapsedTime;
61};
62
63typedef std::list<FrameInfo> FrameList;
64
65class KdTreeAppListener: public FrameListener, public KeyListener
66{
67
68public:
69        // visualization modes for scene nodes
70        enum VizMode
71        {
72                NODEVIZ_NONE,
73                NODEVIZ_RENDER_NODES,
74                NODEVIZ_RENDER_NODES_AND_CONTENT,
75                NODEVIZ_MODES_NUM
76        };
77
78        enum SceneMgr
79        {
80                SM_KDT,
81                SM_OCM,
82                SM_OCT,
83                SM_GEN,
84                SM_SIZE,
85                SM_NOTSET
86        };
87
88        enum ShowTree
89        {
90                SHOWTREE_OFF,
91                SHOWTREE_HILITE,
92                SHOWTREE_ALL,
93                SHOWTREE_MODES_NUM
94        };
95
96        enum AppState
97        {
98                AS_NORMAL,
99                AS_RECORD,
100                AS_PLAYBACK
101        };
102
103        struct Options
104        {
105                Options():
106                mRotateSpeed(36.0f),
107                mMoveSpeed(100.0f),
108                mRotationPeriod(30.0f),
109                mKT(2.0f),
110                mKI(1.0f),
111                mMaxDepth(12),
112                mSceneManager(SM_KDT),
113                mRenderMethod(KdTree::KDRM_GTP_CHC),
114                mBuildMethod(KdTree::KDBM_PRIORITYQUEUE),
115                mDemoMode(false),
116                mEnhancedVisibility(false),
117                mDemoInterval(1.0f)
118                {
119
120                }
121
122                String mDemoInfileName;
123                String mDemoOutfileName;
124                String mDemoLogfileName;
125                String mComment;
126                Degree mRotateSpeed;
127                Real mMoveSpeed;
128                Real mRotationPeriod;
129                Real mKT;
130                Real mKI;
131                int mMaxDepth;
132                int mSceneManager;
133                int mRenderMethod;
134                int mBuildMethod;
135                bool mDemoMode;
136                bool mEnhancedVisibility;
137                Real mDemoInterval;
138        };
139
140        struct DemoStats
141        {
142                unsigned int mTotalNumFrames;
143                unsigned int mNumFrames;
144                Real mTotalEllapsedTime;
145                Real mEllapsedTime;
146        } mDemoStats;
147
148    // Constructor takes a RenderWindow because it uses that to determine input context
149    KdTreeAppListener(RenderWindow* win, SceneManager* sm, const Options& options, 
150                bool useBufferedInputKeys = false, bool useBufferedInputMouse = false);
151
152    virtual ~KdTreeAppListener(void);
153
154        void initOverlayElement(OverlayElement **elInfo, String ext,
155                String name, int top, String caption);
156
157        void initStatsOverlay(void);
158
159        void initKdTreeOverlay(void);
160
161        void showDebugOverlay(bool show);
162
163        void toggleVizCamera(void);
164
165        void toggleShowBoxes(void);
166
167        void toggleEnhancedVisibility(void);
168
169        void toggleBuildMethod(void);
170
171        void toggleRenderMethod(void);
172
173    virtual bool processUnbufferedKeyInput(const FrameEvent& evt);
174
175    bool processUnbufferedMouseInput(const FrameEvent& evt);
176
177        void moveCamera(void);
178
179    // Override frameStarted event to process that (don't care about frameEnded)
180    bool frameStarted(const FrameEvent& evt);
181
182    bool frameEnded(const FrameEvent& evt);
183
184        void switchMouseMode(void);
185
186        void switchKeyMode(void);
187
188        void keyClicked(KeyEvent* e);
189
190        void keyPressed(KeyEvent* e) {};
191        void keyReleased(KeyEvent* e) {};
192
193        const static Real       DEMO_WAIT;
194        const static String NA;
195        const static String RENDERMETHOD[];
196        const static String RENDERMETHODCAPTION[];
197        const static String BUILDMETHOD[];
198        const static String BUILDMETHODCAPTION[];
199        const static String SCENEMANAGER[];
200        const static String SCENEMANAGERNAME[];
201protected:
202        // basic
203        RenderWindow* mWindow;
204        SceneManager *mSceneMgr;
205        Options mOptions;
206        bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
207
208        // elements
209        SceneNode *mCamNode;
210        Camera* mCamera;
211        Camera* mTopCam;
212
213        // toggle
214        bool mStatsOn;
215
216        bool mVizCamera;
217        bool mFreeMove;
218        bool mTopCamFollow;
219
220        int mShowTree;
221
222        // counters
223        int mSeqNum;
224        unsigned int mNumScreenShots;
225
226        // rendering/texture options
227        int mSceneDetailIndex;
228        TextureFilterOptions mFiltering;
229        int mAniso;
230
231        // chc stats
232        Real mDelayedQueriesIssued;
233        Real mDelayedTraversedNodes;
234
235        // overlays
236        Overlay *mDemoOverlay;
237        Overlay *mDebugOverlay;
238        Overlay *mKdTreeOverlay;
239
240        OverlayElement *mDemoStatus;
241
242
243        OverlayElement *mRenderMethodInfo;
244        OverlayElement *mEnhancedVisInfo;
245        OverlayElement *mBuildMethodInfo;
246        OverlayElement *mKdTreeMaxDepthInfo;
247        OverlayElement *mHighlightLevelInfo;
248        OverlayElement *mKTInfo;
249        OverlayElement *mKIInfo;
250        OverlayElement *mMovementInfo;
251        OverlayElement *mTopCamInfo;
252
253        OverlayElement *mFrustumCulledNodesInfo;
254        OverlayElement *mQueryCulledNodesInfo;
255        OverlayElement *mTraversedNodesInfo;
256        OverlayElement *mHierarchyNodesInfo;
257        OverlayElement *mRenderedNodesInfo;
258        OverlayElement *mObjectsCountInfo;
259        OverlayElement *mQueriesIssuedInfo;
260
261        // input
262        EventProcessor* mEventProcessor;
263        InputReader* mInputDevice;
264
265        // movement
266        Vector3 mTranslateVector;
267        Vector3 mVizCamTransVect;
268        Radian mRotX, mRotY;
269        float mMoveScale;
270        Degree mRotScale;
271        Radian mDeathAngle;
272
273        // just to stop toggles flipping too fast
274        Real mTimeUntilNextToggle ;
275
276        // stuff for walkthrough recording/playback
277        //std::ofstream mDemoFramesLog;
278        std::list<Real> mDemoFPS;
279        Real mTimeUntilNextLogWrite;
280        FrameList mFrameList;
281        FrameList::iterator mCurrFrame;
282        Real mTimeRemaining;
283        Real mWaitBeforeDemoStart;
284
285        AppState mAppState;
286
287        void setDemoOverlay();
288
289        void toggleRecord();
290        void togglePlayback();
291
292        /** write FPS stats to log file (csv) **/
293        void saveLog();
294
295        void saveFrameInfo(Real elapsedTime);
296
297        /** save demo frame data to file **/
298        static void saveFrames(const String& filename, FrameList& framelist);
299        static void saveFramesAscii(const String& filename, FrameList& framelist);
300        static void saveFramesBinary(const String& filename, FrameList& framelist);
301
302        /** load demo frame data from file **/
303        static void loadFrames(const String& filename, FrameList& framelist);
304        static void loadFramesAscii(const String& filename, FrameList& framelist);
305        static void loadFramesBinary(const String& filename, FrameList& framelist);
306
307        void updateStats(void);
308};
309
310#endif
311
Note: See TracBrowser for help on using the repository browser.