source: trunk/VUT/OcclusionCullingSceneManager/TestCulling/TestCullingApplication.cpp @ 29

Revision 29, 7.5 KB checked in by gametools, 20 years ago (diff)
Line 
1/**
2    \file
3        TestCullingApplication.cpp
4    \brief
5        Tests the occlusion culling algorithm
6*/
7
8//#pragma warning (push)
9//#pragma warning( disable : 4267 )
10
11#include <OgreNoMemoryMacros.h>
12#include <CEGUI/CEGUI.h>
13#include <../CEGUIRenderer/include/OgreCEGUIRenderer.h>
14#include <../CEGUIRenderer/include/OgreCEGUIResourceProvider.h>
15#include <../CEGUIRenderer/include/OgreCEGUITexture.h>
16#include <OgreMemoryMacros.h>
17//#pragma warning (pop)
18/*
19#include <CEGUI/CEGUIImageset.h>
20#include <CEGUI/CEGUISystem.h>
21#include <CEGUI/CEGUISchemeManager.h>
22#include <CEGUI/CEGUIWindowManager.h>
23#include <CEGUI/CEGUIWindow.h>
24#include <CEGUI/CEGUILogger.h>
25#include <CEGUI/elements/CEGUICombobox.h>
26#include <CEGUI/elements/CEGUIListbox.h>
27#include <CEGUI/elements/CEGUIListboxTextItem.h>
28#include <CEGUI/elements/CEGUIPushButton.h>
29#include <CEGUI/elements/CEGUIScrollbar.h>
30#include <CEGUI/elements/CEGUIStaticImage.h>
31
32#include "OgreCEGUIRenderer.h"
33#include "OgreCEGUIResourceProvider.h"
34*/
35#include "Ogre.h"
36#include "TestCullingApplication.h"
37
38#define WIN32_LEAN_AND_MEAN
39#include "windows.h"
40
41/***********************************************/
42/* TestCullingApplication implementation       */
43/***********************************************/
44
45
46//-----------------------------------------------------------------------
47void TestCullingApplication::createScene(void)
48{
49     // Create a skybox
50     mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");
51         mShip = mSceneMgr->createEntity("razor", "razor.mesh");
52         mShipNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
53         mShipNode->attachObject(mShip);
54
55         mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));
56
57         // CEGUI setup
58     mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, ST_GENERIC);
59     mGUISystem = new CEGUI::System(mGUIRenderer);
60
61         // Mouse
62     CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLook.scheme");
63     CEGUI::MouseCursor::getSingleton().setImage("TaharezLook", "MouseArrow");
64         mGUISystem->setDefaultMouseCursor(
65                (CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");
66
67         CEGUI::MouseCursor::getSingleton().show( );
68     
69        /* CEGUI::Window* sheet =
70            CEGUI::WindowManager::getSingleton().loadWindowLayout(
71                (CEGUI::utf8*)"ogregui.layout");
72
73     mGUISystem->setGUISheet(sheet);*/
74}
75//-----------------------------------------------------------------------
76void TestCullingApplication::createFrameListener(void)
77{
78        mFrameListener= new MouseQueryListener(mWindow, mCamera, mSceneMgr, mGUIRenderer, mShipNode);
79        mFrameListener->showDebugOverlay(true);
80        mRoot->addFrameListener(mFrameListener);
81}
82//-----------------------------------------------------------------------
83void TestCullingApplication::chooseSceneManager(void)
84{
85    mSceneMgr = mRoot->getSceneManager(ST_GENERIC);
86}
87
88/***********************************************/
89/* MouseQueryListener implementation           */
90/***********************************************/
91
92//-----------------------------------------------------------------------
93MouseQueryListener::MouseQueryListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, CEGUI::Renderer *renderer,
94                                           SceneNode* shipNode)
95        : ExampleFrameListener(win, cam, false, true), mGUIRenderer(renderer), mShipNode(shipNode)//,  mShutdownRequested(false)
96{
97
98                // Setup default variables
99        mCurrentObject = NULL;
100        mLMouseDown = false;
101        mRMouseDown = false;
102        mSceneMgr = sceneManager;
103
104        // Reduce move speed
105        mMoveSpeed = 50;
106        mRotateSpeed *= 2;
107       
108                mCurrentAlgorithm = OcclusionCullingSceneManager::RENDER_COHERENT;
109
110                // Register this so that we get mouse events.
111        mEventProcessor->addMouseListener(this);
112        mEventProcessor->addMouseMotionListener(this);
113                mEventProcessor->addKeyListener(this);
114
115                // show overlay
116        Overlay* pOver = OverlayManager::getSingleton().getByName("Example/OcclusionDemoOverlay");   
117        mAlgorithmInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/OcclusionTechniqueInfo");
118        //mMaterialInfo = OverlayManager::getSingleton().getOverlayElement("Example/Shadows/MaterialInfo");
119        //mInfo = OverlayManager::getSingleton().getOverlayElement("Example/Shadows/Info");
120
121                mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]);
122        //mMaterialInfo->setCaption(": " + mAtheneMaterials[mCurrentAtheneMaterial]);
123        pOver->show();
124} // MouseQueryListener
125//-----------------------------------------------------------------------
126void MouseQueryListener::mouseMoved (MouseEvent *e)
127{
128        // Update CEGUI with the mouse motion
129    CEGUI::System::getSingleton().injectMouseMove(e->getRelX() * mGUIRenderer->getWidth(), e->getRelY() * mGUIRenderer->getHeight());
130}
131//-----------------------------------------------------------------------
132void MouseQueryListener::mousePressed(MouseEvent* e)
133{
134     // Left mouse button down
135     if (e->getButtonID() & InputEvent::BUTTON0_MASK)
136     {
137                 CEGUI::MouseCursor::getSingleton().hide( );
138                 mLMouseDown = true;
139     } // if
140     // Right mouse button down
141     else if (e->getButtonID() & InputEvent::BUTTON1_MASK)
142     {
143         CEGUI::MouseCursor::getSingleton().hide( );
144         mRMouseDown = true;
145     } // else if
146} // mousePressed
147
148 //-----------------------------------------------------------------------
149void MouseQueryListener::mouseReleased(MouseEvent* e)
150{
151    // Left mouse button up
152    if (e->getButtonID() & InputEvent::BUTTON0_MASK)
153    {
154                CEGUI::MouseCursor::getSingleton().show( );
155        mLMouseDown = false;
156    } // if
157    // Right mouse button up
158    else if (e->getButtonID() & InputEvent::BUTTON1_MASK)
159    {
160        CEGUI::MouseCursor::getSingleton().show( );
161        mRMouseDown = false;
162    } // else if
163} // mouseReleased
164//-----------------------------------------------------------------------
165void MouseQueryListener::mouseDragged (MouseEvent *e)
166 {
167     // If we are dragging the left mouse button.
168     if ( mLMouseDown )
169     {
170                  mShipNode->translate(-e->getRelX() * 200, -e->getRelY() * 200, 0.0);
171     } // if
172
173    // If we are dragging the right mouse button.
174    else if ( mRMouseDown )
175    {
176        mCamera->yaw( -e->getRelX() * mRotateSpeed );
177        mCamera->pitch( -e->getRelY() * mRotateSpeed );
178    } // else if
179} // mouseDragged
180//-----------------------------------------------------------------------
181bool MouseQueryListener::frameEnded(const FrameEvent& evt)
182{
183    if (timeDelay >= 0)
184        timeDelay -= evt.timeSinceLastFrame;
185
186    KEY_PRESSED(KC_O, 1, changeAlgorithm());
187     
188    return ExampleFrameListener::frameStarted(evt) && ExampleFrameListener::frameEnded(evt);       
189}
190//-----------------------------------------------------------------------
191void MouseQueryListener::changeAlgorithm()
192{
193    mCurrentAlgorithm = ++mCurrentAlgorithm % OcclusionCullingSceneManager::NUM_RENDERMODES;
194    mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]);
195
196        mSceneMgr->setOption("Algorithm", &mCurrentAlgorithm);
197}
198
199INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
200{
201    // Create application object
202    TestCullingApplication app;
203
204        try {
205        app.go();
206    } catch( Ogre::Exception& e ) {
207        MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
208    }   
209
210    return 0;
211}
Note: See TracBrowser for help on using the repository browser.