source: GTP/trunk/App/Demos/Illum/Ogre/src/ReflectionTest/include/ReflectionTest.h @ 1847

Revision 1847, 13.1 KB checked in by szirmay, 18 years ago (diff)
Line 
1
2
3
4/*
5-----------------------------------------------------------------------------
6This source file is part of OGRE
7    (Object-oriented Graphics Rendering Engine)
8For the latest info, see http://www.ogre3d.org/
9
10Copyright (c) 2000-2005 The OGRE Team
11Also see acknowledgements in Readme.html
12
13You may use this sample code for anything you like, it is not covered by the
14LGPL like the rest of the engine.
15-----------------------------------------------------------------------------
16*/
17
18/**
19    \file
20        Lighting.h
21    \brief
22        Shows lighting support in OGRE. Also demonstrates the use of billboards
23        and controllers for automatic time-relative behaviour.
24*/
25
26
27#include "ExampleApplication.h"
28#include "OgreIlluminationManager.h"
29#include "SpriteParticleRenderer.h"
30#include "FrameCapture.h"
31
32int scene = 1;
33FrameCapture* capture;
34
35// Listener class for frame updates
36class RaytraceDemoListener : public ExampleFrameListener
37{
38protected:
39        unsigned long framecount;
40        SceneNode* objectNode;
41       
42public:
43    RaytraceDemoListener(RenderWindow* window, Camera* maincam, SceneNode* objectNode)
44        :ExampleFrameListener(window, maincam)
45                                 
46    {
47                this->mMoveSpeed = 0.5;
48                framecount = 0;         
49                this->objectNode = objectNode;
50               
51    }
52
53        void moveCamera()
54    {/*
55           mCamera->yaw(mRotX);
56       mCamera->pitch(mRotY);
57       mCamera->moveRelative(mTranslateVector);*/
58
59                mCamera->getParentSceneNode()->yaw(mRotX, Node::TransformSpace::TS_WORLD);
60                mCamera->getParentSceneNode()->pitch(mRotY, Node::TransformSpace::TS_LOCAL);
61                mCamera->getParentSceneNode()->translate(mTranslateVector, Node::TransformSpace::TS_LOCAL);
62               
63    }
64
65        bool processUnbufferedKeyInput(const FrameEvent& evt)
66    {
67                static float objmove = 0.01;
68                if (mInputDevice->isKeyDown(KC_UP))
69        {
70                        objectNode->translate(0,0,objmove);
71        }
72                if (mInputDevice->isKeyDown(KC_MULTIPLY))
73        {
74                        //objectNode->scale(1.1,1.1,1.1);
75                        objectNode->rotate(Vector3(0,0,1), Degree(10));
76                        mTimeUntilNextToggle = 1;
77        }
78                if (mInputDevice->isKeyDown(KC_DIVIDE))
79        {
80                        //objectNode->scale(1.0/1.1,1.0/1.1,1.0/1.1);
81                        objectNode->rotate(Vector3(1,0,0), Degree(10));
82                        mTimeUntilNextToggle = 1;
83        }
84                if (mInputDevice->isKeyDown(KC_ADD))
85        {
86                        objectNode->rotate(Vector3(0,1,0), Degree(10));
87        }
88                if (mInputDevice->isKeyDown(KC_HOME))
89        {
90                        objectNode->translate(0,objmove,0);
91        }
92                if (mInputDevice->isKeyDown(KC_END))
93        {
94                        objectNode->translate(0,-objmove,0);
95        }
96                if (mInputDevice->isKeyDown(KC_DOWN))
97        {
98                        objectNode->translate(0,0,-objmove);
99        }
100                if (mInputDevice->isKeyDown(KC_RIGHT))
101        {
102                        objectNode->translate(-objmove,0,0);
103        }
104                if (mInputDevice->isKeyDown(KC_LEFT))
105        {
106                        objectNode->translate(objmove,0,0);
107        }
108
109                if (mInputDevice->isKeyDown(KC_A))
110        {
111            // Move camera left
112            mTranslateVector.x = -mMoveScale;
113        }
114
115        if (mInputDevice->isKeyDown(KC_D))
116        {
117            // Move camera RIGHT
118            mTranslateVector.x = mMoveScale;
119        }
120
121        /* Move camera forward by keypress. */
122        if ( mInputDevice->isKeyDown(KC_W) )
123        {
124            mTranslateVector.z = -mMoveScale;
125        }
126               
127        /* Move camera backward by keypress. */
128        if (mInputDevice->isKeyDown(KC_S) )
129        {
130            mTranslateVector.z = mMoveScale;
131        }
132
133        if (mInputDevice->isKeyDown(KC_PGUP))
134        {
135            // Move camera up
136            mTranslateVector.y = mMoveScale;
137        }
138
139        if (mInputDevice->isKeyDown(KC_PGDOWN))
140        {
141            // Move camera down
142            mTranslateVector.y = -mMoveScale;
143        }
144                if (mInputDevice->isKeyDown(KC_N) && mTimeUntilNextToggle <= 0)
145        {
146                        capture->playEvent();
147            mTimeUntilNextToggle = 1;
148        }
149                if (mInputDevice->isKeyDown(KC_B) && mTimeUntilNextToggle <= 0)
150        {
151                        capture->recordEvent();
152            mTimeUntilNextToggle = 1;
153        }
154                if (mInputDevice->isKeyDown(KC_M) && mTimeUntilNextToggle <= 0)
155        {
156                        capture->setSaving();
157                        capture->playEvent();
158            mTimeUntilNextToggle = 1;
159        }
160
161        if( mInputDevice->isKeyDown( KC_ESCAPE) )
162        {           
163            return false;
164        }
165
166                // see if switching is on, and you want to toggle
167        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_M) && mTimeUntilNextToggle <= 0)
168        {
169                        switchMouseMode();
170            mTimeUntilNextToggle = 1;
171        }
172
173        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_K) && mTimeUntilNextToggle <= 0)
174        {
175                        // must be going from immediate keyboard to buffered keyboard
176                        switchKeyMode();
177            mTimeUntilNextToggle = 1;
178        }
179        if (mInputDevice->isKeyDown(KC_F) && mTimeUntilNextToggle <= 0)
180        {
181            mStatsOn = !mStatsOn;
182            showDebugOverlay(mStatsOn);
183
184            mTimeUntilNextToggle = 1;
185        }
186       
187        if (mInputDevice->isKeyDown(KC_SYSRQ) && mTimeUntilNextToggle <= 0)
188        {
189                        char tmp[20];
190                        sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
191            mWindow->writeContentsToFile(tmp);
192            mTimeUntilNextToggle = 0.5;
193                        mWindow->setDebugText(String("Wrote ") + tmp);
194        }
195               
196                static bool displayCameraDetails = false;
197        if (mInputDevice->isKeyDown(KC_P) && mTimeUntilNextToggle <= 0)
198        {
199            displayCameraDetails = !displayCameraDetails;
200            mTimeUntilNextToggle = 0.5;
201            if (!displayCameraDetails)
202                mWindow->setDebugText("");
203        }
204        if (displayCameraDetails)
205        {
206            // Print camera details
207            mWindow->setDebugText("P: " + StringConverter::toString(mCamera->getDerivedPosition()) + " " +
208                "O: " + StringConverter::toString(mCamera->getDerivedOrientation()));
209        }
210
211        // Return true to continue rendering
212        return true;
213        }
214    bool frameStarted(const FrameEvent& evt)
215    {
216                bool result = ExampleFrameListener::frameStarted(evt);
217                framecount++;
218                return result;     
219    }
220};
221
222/** Application class */
223class RaytraceDemoApplication : public ExampleApplication
224{
225
226public:
227
228
229protected:
230
231        SceneNode* objectNode;
232
233    void createCamera(void)
234    {
235        // Create the camera
236        mCamera = mSceneMgr->createCamera("PlayerCam");
237               
238                SceneNode* camNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("mainCameraNode");
239                camNode->attachObject(mCamera);
240        camNode->setPosition(Vector3(0,1,0));
241        // Position it at 500 in Z direction
242        //mCamera->setPosition(Vector3(0,0,500));
243        // Look back along -Z
244        //mCamera->lookAt(Vector3(0,0,-300));
245        mCamera->setNearClipDistance(5);
246
247    }
248
249        void createScene(void)
250    {
251
252                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
253                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
254               
255                OgreIlluminationManager::getSingleton().setMaxJoinRadius(420);         
256
257                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
258
259                //mCamera->setPosition(0,1,0);         
260                mCamera->setFOVy(Radian(Degree(80)));
261                mCamera->setFarClipDistance(200);
262                mCamera->setNearClipDistance(0.1);
263
264                SceneNode* cn = mCamera->getParentSceneNode();
265
266                OgreIlluminationManager::getSingleton().setFocusingSM(false);
267           OgreIlluminationManager::getSingleton().setShadowMapSize(512);
268           OgreIlluminationManager::getSingleton().setBlurShadowMap(true);
269           OgreIlluminationManager::getSingleton().setShadowMapMaterialName("GameTools/ShadowMapDistance");
270            mSceneMgr->setAmbientLight(ColourValue(0.505 * 0.2, 0.897 * 0.2, 0.914 * 0.2));
271               
272                capture  = new FrameCapture(mWindow);
273                if(scene == 1) createScene1();
274                if(scene == 2) createScene2();
275
276                OgreIlluminationManager::getSingleton().initTechniques();
277        }
278   
279        void createScene1(void)
280    {
281        SceneNode* rootNode = mSceneMgr->getRootSceneNode();
282               
283                Entity* object = mSceneMgr->createEntity("object", "teapot.mesh");
284                object->setMaterialName("MetalTeapotMultipleBounce");
285                objectNode = rootNode->createChildSceneNode();
286                objectNode->attachObject(object);
287                objectNode->scale(0.5,0.5,0.5);
288                //objectNode->scale(0.005,0.005,0.005);
289                objectNode->setPosition(0,1.2,0);
290                objectNode->_updateBounds();
291
292                capture->addAnimableNode(mCamera->getParentSceneNode());
293
294                Entity* room = mSceneMgr->createEntity("scene", "difflab.mesh");
295                //room->setMaterialName("GameTools/Phong");
296                SceneNode* roomNode = rootNode->createChildSceneNode();
297                roomNode->attachObject(room);
298                roomNode->_updateBounds();             
299
300                mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
301                Light* redLight1 = mSceneMgr->createLight("RedLight1");
302                redLight1->setType(Light::LT_POINT);
303                redLight1->setCastShadows(false);
304        redLight1->setDiffuseColour(ColourValue(1,0.055, 0.0));
305                redLight1->setPowerScale(1.6);
306                SceneNode* redLightNode1 = rootNode->createChildSceneNode();
307                redLightNode1->setPosition(0.05,2.361,-1.07);
308                redLightNode1->attachObject(redLight1);
309
310                Light* greenLight1 = mSceneMgr->createLight("GreenLight1");
311                greenLight1->setType(Light::LT_POINT);
312                greenLight1->setCastShadows(false);
313        greenLight1->setDiffuseColour(ColourValue(0.362,0.783, 0.685));
314                greenLight1->setPowerScale(2.0);
315                SceneNode* greenLightNode1 = rootNode->createChildSceneNode();
316                greenLightNode1->setPosition(1.312,1.313,0);
317                greenLightNode1->attachObject(greenLight1);
318
319                Light* mainBlueLight = mSceneMgr->createLight("MainBlueLight");
320                mainBlueLight->setType(Light::LT_SPOTLIGHT);
321                mainBlueLight->setCastShadows(true);
322        mainBlueLight->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
323                mainBlueLight->setPowerScale(5.0);
324                mainBlueLight->setSpotlightRange(Degree(0),Degree(160));
325                mainBlueLight->setAttenuation(2.5, 0, 1, 0);
326                SceneNode* mainBlueLightNode = rootNode->createChildSceneNode();
327                mainBlueLightNode->setPosition(-0.546,2.095,1.035);
328                //mainBlueLightNode->rotate(Vector3::UNIT_X, Degree(161.396));
329                //mainBlueLightNode->rotate(Vector3::UNIT_Y, Degree(53.955));
330                //mainBlueLightNode->rotate(Vector3::UNIT_Z, Degree(-145.065));
331                mainBlueLight->setDirection(-1.5,-2.0,1.0);
332                mainBlueLightNode->attachObject(mainBlueLight);
333   }
334
335        void createScene2(void)
336    {
337        SceneNode* rootNode = mSceneMgr->getRootSceneNode();
338               
339                Entity* object = mSceneMgr->createEntity("object", "athene.mesh");
340                object->setMaterialName("MetalTeapotMultipleBounce");
341                objectNode = rootNode->createChildSceneNode();
342                objectNode->attachObject(object);
343                //objectNode->scale(0.5,0.5,0.5);
344                objectNode->scale(0.005,0.005,0.005);
345                objectNode->setPosition(0,1.2,0);
346                objectNode->_updateBounds();
347
348                Entity* room = mSceneMgr->createEntity("scene", "difflab.mesh");
349                //room->setMaterialName("GameTools/Phong");
350                SceneNode* roomNode = rootNode->createChildSceneNode();
351                roomNode->attachObject(room);
352                roomNode->_updateBounds();             
353
354                mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
355                Light* redLight1 = mSceneMgr->createLight("RedLight1");
356                redLight1->setType(Light::LT_POINT);
357                redLight1->setCastShadows(false);
358        redLight1->setDiffuseColour(ColourValue(1,0.055, 0.0));
359                redLight1->setPowerScale(1.6);
360                SceneNode* redLightNode1 = rootNode->createChildSceneNode();
361                redLightNode1->setPosition(0.05,2.361,-1.07);
362                redLightNode1->attachObject(redLight1);
363
364                Light* greenLight1 = mSceneMgr->createLight("GreenLight1");
365                greenLight1->setType(Light::LT_POINT);
366                greenLight1->setCastShadows(false);
367        greenLight1->setDiffuseColour(ColourValue(0.362,0.783, 0.685));
368                greenLight1->setPowerScale(2.0);
369                SceneNode* greenLightNode1 = rootNode->createChildSceneNode();
370                greenLightNode1->setPosition(1.312,1.313,0);
371                greenLightNode1->attachObject(greenLight1);
372
373                Light* mainBlueLight = mSceneMgr->createLight("MainBlueLight");
374                mainBlueLight->setType(Light::LT_SPOTLIGHT);
375                mainBlueLight->setCastShadows(true);
376        mainBlueLight->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
377                mainBlueLight->setPowerScale(5.0);
378                mainBlueLight->setSpotlightRange(Degree(0),Degree(160));
379                mainBlueLight->setAttenuation(2.5, 0, 1, 0);
380                SceneNode* mainBlueLightNode = rootNode->createChildSceneNode();
381                mainBlueLightNode->setPosition(-0.546,2.095,1.035);
382                //mainBlueLightNode->rotate(Vector3::UNIT_X, Degree(161.396));
383                //mainBlueLightNode->rotate(Vector3::UNIT_Y, Degree(53.955));
384                //mainBlueLightNode->rotate(Vector3::UNIT_Z, Degree(-145.065));
385                mainBlueLight->setDirection(-1.5,-2.0,1.0);
386                mainBlueLightNode->attachObject(mainBlueLight);
387   }
388
389        void createFrameListener(void)
390    {
391                // This is where we instantiate our own frame listener
392                mFrameListener= new RaytraceDemoListener(mWindow, mCamera, objectNode);
393                mFrameListener->setPriority(1);
394                OgreIlluminationManager::getSingleton().setPriority(3);
395                capture->setPriority(2);
396        mRoot->addFrameListener(capture);
397                mRoot->addFrameListener(mFrameListener);
398                mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
399
400    }
401
402};
403
Note: See TracBrowser for help on using the repository browser.