source: trunk/VUT/work/iv/IVFrameListener.h @ 187

Revision 187, 6.2 KB checked in by mattausch, 19 years ago (diff)

added animationbug fix (deleting while animation)fixed visibilityQueriesadditive shadow volumes fixed for octree
hack to fully empty queue after traversal
added demo for vienna model

Line 
1#ifndef _IVFrameListener_H__
2#define _IVFrameListener_H__
3
4#include "CEGUIForwardRefs.h"
5#include <Ogre.h>
6#include <OgreKeyEvent.h>
7#include <OgreEventListeners.h>
8#include <OgreStringConverter.h>
9#include <OgreException.h>
10#include "VisibilityEnvironment.h"
11#include "VisibilityManager.h"
12
13
14
15class TestCullingIVApplication;
16
17
18using namespace Ogre;
19
20
21/** Frame listener specialised for terrains.
22*/
23class IVFrameListener: public FrameListener, public MouseListener,
24                                                        public MouseMotionListener, public KeyListener
25{
26public:
27
28        IVFrameListener(RenderWindow* win,
29                                                Camera* cam,
30                                                SceneManager *sceneManager,
31                                                CEGUI::Renderer *renderer,
32                                                Camera *vizCamera,
33                                                SceneNode *camNode,
34                                                Light *sunLight,
35                                                TestCullingIVApplication *app);
36
37        ~IVFrameListener();
38
39
40        bool frameStarted(const FrameEvent& evt);
41        bool frameEnded(const FrameEvent& evt);
42   //bool processUnbufferedKeyInput(const FrameEvent& evt);
43   
44
45        /* MouseListener callbacks. */
46        virtual void mouseClicked(MouseEvent* e) { }
47        virtual void mouseEntered(MouseEvent* e) { }
48        virtual void mouseExited(MouseEvent* e)  { }
49
50        // This is when the mouse button goes DOWN.
51        void mousePressed(MouseEvent* e);
52
53        // This is when the mouse button is let UP.
54        void mouseReleased(MouseEvent* e);
55
56        /* MouseMotionListener callbacks */
57        void mouseMoved(MouseEvent *e);
58
59        // This is when the mouse is clicked, held and dragged.
60        void mouseDragged(MouseEvent *e);
61
62        void mouseDragDropped(MouseEvent *e);
63        void keyPressed(KeyEvent* e);
64
65        void keyReleased(KeyEvent* e);
66        void keyClicked(KeyEvent* e);
67
68        /** The information about camera position and orienation per frame.
69        */
70        typedef struct
71        {
72                Vector3 position;
73                Quaternion orientation;
74                Real timeElapsed;
75        } frame_info;
76
77        enum  {WALKTHROUGH, REPLAY, STATE_NUM};
78
79        // visualization modes for scene nodes
80        enum {NODEVIZ_NONE, NODEVIZ_RENDER_NODES, NODEVIZ_RENDER_NODES_AND_CONTENT, NODEVIZ_MODES_NUM};
81        //enum {NODEVIZ_NONE, NODEVIZ_RENDER_GEOMETRY, NODEVIZ_MODES_NUM};
82
83        void zoomVizCamera(int zoom);
84
85        void addFrameInfo(SceneNode *camNode, Real timeElapsed);
86        void setCurrentFrameInfo(Real timeElapsed);
87
88        void setAlgorithm(int algorithm);
89
90        void moveCamera();
91
92        void writeFrames();
93        void loadFrames();
94
95        bool processUnbufferedKeyInput(const FrameEvent& evt);
96        bool processUnbufferedMouseInput(const FrameEvent& evt);
97
98        void showStats(bool show);
99
100        void updateStats();
101        void toggleShowHelp();
102        void toggleShowStats();
103
104        void toggleShowShadows();
105        void toggleDisplayCameraDetails();
106        void takeScreenshot();
107        void nextSceneDetailLevel();
108        void nextFilter();
109        void nextAlgorithm();
110        void nextNodeVizMode();
111        void nextAppState();
112        void changeThreshold(int incr);
113        void changeAssumedVisibility(int incr);
114        void toggleTestGeometryForVisibleLeaves();
115        void toggleShowOctree();
116        void toggleUseDepthPass();
117        void toggleShowViz();
118        void toggleRecord();
119
120        bool Clamp2Floor();
121
122        static String msAlgorithmCaptions[];
123               
124        protected:
125
126        void initHelpOverlayElement(String name, int top);
127        void initOverlayElement(OverlayElement **elInfo, String ext, String name,
128                                                        int top, String caption);
129
130        //-- initialise overlays
131        void initHelpOverlay();
132        void initVisStatsOverlay();
133        void initQueryOverlay();
134
135        void resetStats();
136
137        SceneManager *mSceneMgr;           // A pointer to the scene manager
138
139        CEGUI::Renderer *mGUIRenderer;     // cegui renderer
140
141        int mCurrentAlgorithm;
142        int mVisibilityThreshold;
143        int mAssumedVisibility;
144        // the current frame number
145        int mCurrentFrame;
146        // the current application state
147        int mAppState;
148        // visualization mode
149        int mNodeVizMode;
150
151
152        OverlayElement *mAlgorithmInfo;
153        OverlayElement *mThresholdInfo;
154        OverlayElement *mAssumedVisibilityInfo;
155        OverlayElement *mFrustumCulledNodesInfo;
156        OverlayElement *mQueryCulledNodesInfo;
157        OverlayElement *mTraversedNodesInfo;
158        OverlayElement *mHierarchyNodesInfo;
159        OverlayElement *mTestGeometryForVisibleLeavesInfo;
160        OverlayElement *mUseDepthPassInfo;
161        OverlayElement *mRenderedNodesInfo;
162        OverlayElement *mObjectsCountInfo;
163        OverlayElement *mQueriesIssuedInfo;
164        OverlayElement *mDelayedQueriesIssuedInfo;
165        OverlayElement *mDelayedTraversedNodesInfo;
166        OverlayElement *mCurrentObjectTypeInfo;
167
168        OverlayElement *mQueryTypeInfo;
169        OverlayElement *mQueryVisibleNodesInfo;
170        OverlayElement *mQueryVisibleGeometryInfo;
171        OverlayElement *mQueryVisiblePatchInfo;
172
173        OverlayElement *mQueryVisiblityInfo;
174        OverlayElement *mQueryNodeVisibilityInfo;
175        OverlayElement *mQueryGeometryVisibilityInfo;
176        OverlayElement *mQueryPatchVisibilityInfo;
177        //OverlayElement *mHelpInfo;
178       
179        bool mTestGeometryForVisibleLeaves;
180        bool mShowOctree;
181        bool mUseDepthPass;
182        bool mShowVisualization;
183        bool mCullCamera;
184        bool mRecord;
185        bool mShowShadows;
186        bool mVisualizeCulledNodes;
187        bool mShowHelp;
188        bool mStatsOn;
189        bool mLMouseDown, mRMouseDown;     // True if the mouse buttons are down
190        bool mShutdownRequested;
191        bool mDisplayCameraDetails;
192        bool mUseItemBuffer;
193        bool mUseAnimation;
194
195        int mItemBufferMode;
196
197        Real mVizCameraHeight;
198
199        Camera *mVizCamera;
200        SceneNode *mCamNode;
201
202        std::vector<frame_info> mFrameInfo;
203               
204        Real mReplayTimeElapsed;
205        //EventProcessor* mEventProcessor;
206        InputReader* mInputDevice;
207        Camera* mCamera;
208
209        Vector3 mTranslateVector;
210        RenderWindow* mWindow;
211
212        unsigned int mNumScreenShots;
213        int mSceneDetailIndex;
214        int mAniso;
215
216        float mMoveScale;
217        Real mMoveSpeed;
218        Degree mRotScale;
219
220        // just to stop toggles flipping too fast
221        Real mTimeDelay;
222        Radian mRotX, mRotY;
223        TextureFilterOptions mFiltering;
224
225        Degree mRotateSpeed;
226
227        Overlay* mDebugOverlay;
228        Overlay* mHelpOverlay;
229        Overlay* mCullStatsOverlay;
230        Overlay* mQueryOverlay;
231
232        Light *mSunLight;
233        GtpVisibility::VisibilityManager *mVisibilityManager;
234        EventProcessor* mEventProcessor;
235
236        bool mShiftPressed;
237        bool mShowQueryStats;
238
239        unsigned long mAvgFps;
240        unsigned long mFrameCount;
241
242        //bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
243       
244        float mDelayedQueriesIssued;
245        float mDelayedTraversedNodes;
246
247        TestCullingIVApplication *mApplication;
248        RaySceneQuery *mRaySceneQuery;
249};
250
251
252#endif //_IVFrameListener_H__
Note: See TracBrowser for help on using the repository browser.