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

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