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

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

Added support for BvHierarchy? Scene Manager to test app

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