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

Revision 1285, 7.7 KB checked in by szydlowski, 18 years ago (diff)

saving and loading entities to file

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