source: GTP/trunk/App/Demos/Illum/Ogre/src/DiffuseTest/include/DiffuseTest.h @ 2025

Revision 2025, 26.6 KB checked in by szirmay, 17 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#include "ExampleApplication.h"
27#include "OgreIlluminationManager.h"
28#include "FrameCapture.h"
29
30FrameCapture* capture;
31int scene = 3;
32
33// Listener class for frame updates
34class RaytraceDemoListener : public ExampleFrameListener
35{
36protected:
37       
38        SceneNode* objectNode;
39        unsigned long framecount;
40       
41public:
42    RaytraceDemoListener(RenderWindow* window, Camera* maincam, SceneNode* objectNode)
43        :ExampleFrameListener(window, maincam)
44                                 
45    {
46                this->mMoveSpeed = 2.0;
47                framecount = 0;
48                this->objectNode = objectNode;
49          }
50
51        void moveCamera()
52    {/*
53           mCamera->yaw(mRotX);
54       mCamera->pitch(mRotY);
55       mCamera->moveRelative(mTranslateVector);*/
56
57                mCamera->getParentSceneNode()->yaw(mRotX, Node::TransformSpace::TS_WORLD);
58                mCamera->getParentSceneNode()->pitch(mRotY, Node::TransformSpace::TS_LOCAL);
59                mCamera->getParentSceneNode()->translate(mTranslateVector, Node::TransformSpace::TS_LOCAL);
60               
61    }
62
63        bool processUnbufferedKeyInput(const FrameEvent& evt)
64    {
65                static float lastTime = 0.0;
66                float thisTime = (float) Root::getSingleton().getTimer()->getMilliseconds() / 1000.0f;
67                float elapsed = thisTime - lastTime;
68                float move = elapsed * 0.25;
69                float rotate = 80.0 * move;
70
71                if (mInputDevice->isKeyDown(KC_UP))
72        {
73                        objectNode->translate(0,0,move);
74        }
75                if (mInputDevice->isKeyDown(KC_MULTIPLY))
76        {
77                        //objectNode->scale(1.1,1.1,1.1);
78                        objectNode->rotate(Vector3(0,0,1), Degree(rotate));
79                        mTimeUntilNextToggle = 1;
80        }
81                if (mInputDevice->isKeyDown(KC_DIVIDE))
82        {
83                        //objectNode->scale(1.0/1.1,1.0/1.1,1.0/1.1);
84                        objectNode->rotate(Vector3(1,0,0), Degree(rotate));
85                        mTimeUntilNextToggle = 1;
86        }
87                if (mInputDevice->isKeyDown(KC_ADD))
88        {
89                        objectNode->rotate(Vector3(0,1,0), Degree(rotate));
90        }
91                if (mInputDevice->isKeyDown(KC_HOME))
92        {
93                        objectNode->translate(0,move,0);
94        }
95                if (mInputDevice->isKeyDown(KC_END))
96        {
97                        objectNode->translate(0,-move,0);
98        }
99                if (mInputDevice->isKeyDown(KC_DOWN))
100        {
101                        objectNode->translate(0,0,-move);
102        }
103                if (mInputDevice->isKeyDown(KC_RIGHT))
104        {
105                        objectNode->translate(move,0,0);
106        }
107                if (mInputDevice->isKeyDown(KC_LEFT))
108        {
109                        objectNode->translate(-move,0,0);
110        }
111
112                if (mInputDevice->isKeyDown(KC_A))
113        {
114            // Move camera left
115            mTranslateVector.x = -mMoveScale;
116        }
117
118        if (mInputDevice->isKeyDown(KC_D))
119        {
120            // Move camera RIGHT
121            mTranslateVector.x = mMoveScale;
122        }
123
124        /* Move camera forward by keypress. */
125        if ( mInputDevice->isKeyDown(KC_W) )
126        {
127            mTranslateVector.z = -mMoveScale;
128        }
129               
130        /* Move camera backward by keypress. */
131        if (mInputDevice->isKeyDown(KC_S) )
132        {
133            mTranslateVector.z = mMoveScale;
134        }
135
136        if (mInputDevice->isKeyDown(KC_PGUP))
137        {
138            // Move camera up
139            mTranslateVector.y = mMoveScale;
140        }
141
142        if (mInputDevice->isKeyDown(KC_PGDOWN))
143        {
144            // Move camera down
145            mTranslateVector.y = -mMoveScale;
146        }       
147
148        if( mInputDevice->isKeyDown( KC_ESCAPE) )
149        {           
150            return false;
151        }
152
153                // see if switching is on, and you want to toggle
154        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_M) && mTimeUntilNextToggle <= 0)
155        {
156                        switchMouseMode();
157            mTimeUntilNextToggle = 1;
158        }
159
160        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_K) && mTimeUntilNextToggle <= 0)
161        {
162                        // must be going from immediate keyboard to buffered keyboard
163                        switchKeyMode();
164            mTimeUntilNextToggle = 1;
165        }
166        if (mInputDevice->isKeyDown(KC_F) && mTimeUntilNextToggle <= 0)
167        {
168            mStatsOn = !mStatsOn;
169            showDebugOverlay(mStatsOn);
170
171            mTimeUntilNextToggle = 1;
172        }
173        if (mInputDevice->isKeyDown(KC_T) && mTimeUntilNextToggle <= 0)
174        {
175            switch(mFiltering)
176            {
177            case TFO_BILINEAR:
178                mFiltering = TFO_TRILINEAR;
179                mAniso = 1;
180                break;
181            case TFO_TRILINEAR:
182                mFiltering = TFO_ANISOTROPIC;
183                mAniso = 8;
184                break;
185            case TFO_ANISOTROPIC:
186                mFiltering = TFO_BILINEAR;
187                mAniso = 1;
188                break;
189            default:
190                break;
191            }
192            MaterialManager::getSingleton().setDefaultTextureFiltering(mFiltering);
193            MaterialManager::getSingleton().setDefaultAnisotropy(mAniso);
194
195
196            showDebugOverlay(mStatsOn);
197
198            mTimeUntilNextToggle = 1;
199        }
200
201        if (mInputDevice->isKeyDown(KC_SYSRQ) && mTimeUntilNextToggle <= 0)
202        {
203                        char tmp[20];
204                        sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
205            mWindow->writeContentsToFile(tmp);
206            mTimeUntilNextToggle = 0.5;
207                        mWindow->setDebugText(String("Wrote ") + tmp);
208        }
209               
210                if (mInputDevice->isKeyDown(KC_R) && mTimeUntilNextToggle <=0)
211                {
212                        mSceneDetailIndex = (mSceneDetailIndex+1)%3 ;
213                        switch(mSceneDetailIndex) {
214                                case 0 : mCamera->setPolygonMode(PM_SOLID) ; break ;
215                                case 1 : mCamera->setPolygonMode(PM_WIREFRAME) ; break ;
216                                case 2 : mCamera->setPolygonMode(PM_POINTS) ; break ;
217                        }
218                        mTimeUntilNextToggle = 0.5;
219                }
220
221        static bool displayCameraDetails = false;
222        if (mInputDevice->isKeyDown(KC_P) && mTimeUntilNextToggle <= 0)
223        {
224            displayCameraDetails = !displayCameraDetails;
225            mTimeUntilNextToggle = 0.5;
226            if (!displayCameraDetails)
227                mWindow->setDebugText("");
228        }
229        if (displayCameraDetails)
230        {
231            // Print camera details
232            mWindow->setDebugText("P: " + StringConverter::toString(mCamera->getDerivedPosition()) + " " +
233                "O: " + StringConverter::toString(mCamera->getDerivedOrientation()));
234        }
235        if (mInputDevice->isKeyDown(KC_N) && mTimeUntilNextToggle <= 0)
236        {
237                        capture->playEvent();
238            mTimeUntilNextToggle = 1;
239        }
240                if (mInputDevice->isKeyDown(KC_B) && mTimeUntilNextToggle <= 0)
241        {
242                        capture->recordEvent();
243            mTimeUntilNextToggle = 1;
244        }
245                if (mInputDevice->isKeyDown(KC_M) && mTimeUntilNextToggle <= 0)
246        {
247                        capture->setSaving();
248                        capture->playEvent();
249            mTimeUntilNextToggle = 1;
250        }
251
252                lastTime = thisTime;
253        // Return true to continue rendering
254        return true;
255        }
256    bool frameStarted(const FrameEvent& evt)
257    {
258                static bool first = true;
259       
260
261        //      lightNode->setPosition( 100.0 * Vector3(cos(-(float)framecount/500.0),2.0,sin(-(float)framecount/500.0)));
262               
263               
264                bool result = ExampleFrameListener::frameStarted(evt);
265       framecount++;
266      return result;     
267    }
268
269       
270
271};
272
273
274class FloorRenderTargetListener : public RenderTargetListener
275{
276public:
277        Entity* scene;
278        FloorRenderTargetListener(Entity* scene)
279        {
280                this->scene = scene;
281        }
282        void preRenderTargetUpdate(const RenderTargetEvent& evt)
283    {
284                scene->getSubEntity(0)->setVisible(false);
285                scene->getSubEntity(17)->setVisible(false);
286                scene->getSubEntity(35)->setVisible(false);
287                scene->getSubEntity(52)->setVisible(false);
288    }
289    void postRenderTargetUpdate(const RenderTargetEvent& evt)
290    {
291       scene->getSubEntity(0)->setVisible(true);
292                scene->getSubEntity(17)->setVisible(true);
293                scene->getSubEntity(35)->setVisible(true);
294                scene->getSubEntity(52)->setVisible(true);
295    }
296
297};
298
299class CeilRenderTargetListener : public RenderTargetListener
300{
301public:
302        Entity* scene;
303        CeilRenderTargetListener(Entity* scene)
304        {
305                this->scene = scene;
306        }
307        void preRenderTargetUpdate(const RenderTargetEvent& evt)
308    {
309                scene->getSubEntity(1)->setVisible(false);
310                scene->getSubEntity(18)->setVisible(false);
311                scene->getSubEntity(36)->setVisible(false);
312                scene->getSubEntity(53)->setVisible(false);
313    }
314    void postRenderTargetUpdate(const RenderTargetEvent& evt)
315    {
316       scene->getSubEntity(1)->setVisible(true);
317                scene->getSubEntity(18)->setVisible(true);
318                scene->getSubEntity(36)->setVisible(true);
319                scene->getSubEntity(53)->setVisible(true);
320    }
321
322};
323
324class ReflectionCameraFrameListener : public FrameListener
325{
326public:
327        Camera* floorReflCam;
328        Camera* ceilReflCam;
329        Camera* mainCamera;
330    ReflectionCameraFrameListener(Camera* floorcam, Camera* ceilCam, Camera* mainCam)
331        {
332                floorReflCam = floorcam;
333                ceilReflCam = ceilCam;
334                mainCamera = mainCam;
335        }
336        bool frameStarted(const FrameEvent& evt)
337    {
338                floorReflCam->setOrientation(mainCamera->getOrientation());
339        floorReflCam->setPosition(mainCamera->getPosition());
340
341        //      ceilReflCam->setOrientation(mainCamera->getOrientation());
342    //    ceilReflCam->setPosition(mainCamera->getPosition());
343
344                return true;
345        }
346};
347/** Application class */
348class RaytraceDemoApplication : public ExampleApplication
349{
350
351public:
352
353protected:
354        SceneNode* objectNode;
355
356        void loadResources(void)
357        {
358                // Initialise, parse scripts etc
359                ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
360                ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
361                ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
362        }
363
364        void createPostproc()
365        {               
366                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
367                                                                                                                "GTP/PostProc/Glow");
368                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
369                                                                                                                "GTP/PostProc/Glow", true);
370
371                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
372                                                                                                                "GTP/PostProc/ToneMap");
373                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
374                                                                                                                "GTP/PostProc/ToneMap", true);         
375        }
376   
377        void createCamera(void)
378    {
379        // Create the camera
380        mCamera = mSceneMgr->createCamera("PlayerCam");
381               
382                SceneNode* camNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("mainCameraNode");
383                camNode->attachObject(mCamera);
384       //camNode->setPosition(Vector3(0,1,0));
385        // Position it at 500 in Z direction
386        //mCamera->setPosition(Vector3(0,0,500));
387        // Look back along -Z
388        //mCamera->lookAt(Vector3(0,0,-300));
389        mCamera->setNearClipDistance(5);
390
391    }
392
393        void createScene(void)
394    {
395
396                //createPostproc();
397               
398                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
399                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
400               
401                OgreIlluminationManager::getSingleton().setMaxJoinRadius(420);         
402
403                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
404
405                //mCamera->setPosition(0,1,0);         
406                mCamera->setFOVy(Radian(Degree(80)));
407                mCamera->setFarClipDistance(200);
408                mCamera->setNearClipDistance(0.1);
409               
410                capture  = new FrameCapture(mWindow);
411                switch (scene)
412                {
413                case 1:
414                        createScene1();break;
415                case 2:
416                        createScene2();break;
417                case 3:
418                        createScene3();break;
419                }
420                OgreIlluminationManager::getSingleton().initTechniques();
421               
422               
423   }
424
425   void createScene1()
426   {
427           
428        mSceneMgr->setAmbientLight(ColourValue(0.1, 0.0537, 0.0));
429                //mSceneMgr->setAmbientLight(ColourValue(0.0, 0.0, 0.0));
430                 
431
432                // Skybox
433        //mSceneMgr->setSkyBox(true, "Examples/MorningSkyBox");
434
435                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
436
437        Entity* object = mSceneMgr->createEntity("object", "chinaman.mesh");
438                object->setMaterialName("GameTools/Diffuse/use");
439                //object->setMaterialName("GameTools/Diffuse2");
440                objectNode = rootNode->createChildSceneNode();
441                objectNode->attachObject(object);
442        //      objectNode->scale(0.05,0.05,0.05);
443                objectNode->scale(3,3,3);
444        //      objectNode->setPosition(0,4,0);                 
445                objectNode->_updateBounds();
446
447                Entity* room = mSceneMgr->createEntity("atlascube", "diffscene.mesh");
448                //room->setMaterialName("GameTools/Phong");
449                SceneNode* roomNode = rootNode->createChildSceneNode();
450                //roomNode->setScale(10,10,10);
451                roomNode->attachObject(room);
452                roomNode->_updateBounds();
453               
454                Light* bluelight = mSceneMgr->createLight("BlueLight");
455                bluelight->setType(Light::LT_POINT);
456        bluelight->setDiffuseColour(ColourValue(0.152,0.824, 1.0));
457                //bluelight->setSpecularColour(ColourValue(0.152,0.824, 1.0));
458                bluelight->setPowerScale(5.726);
459                bluelight->setAttenuation(12, 0, 1, 0);
460                SceneNode* bluelightNode = rootNode->createChildSceneNode();
461                bluelightNode->setPosition(-5.948,9.619,0.980);
462                bluelightNode->attachObject(bluelight);
463
464                Light* walllight1 = mSceneMgr->createLight("WallLight1");
465                walllight1->setType(Light::LT_POINT);
466        walllight1->setDiffuseColour(ColourValue(0.988,1.0, 0.808));
467                //walllight1->setSpecularColour(ColourValue(0.988,1.0, 0.808));
468                walllight1->setPowerScale(2.5);
469                walllight1->setAttenuation(12, 0, 1, 0);
470                SceneNode* walllight1Node = rootNode->createChildSceneNode();
471                walllight1Node->setPosition(-4.822,9.353,-5.194);
472                walllight1Node->attachObject(walllight1);
473
474                Light* walllight2 = mSceneMgr->createLight("WallLight2");
475                walllight2->setType(Light::LT_POINT);
476        walllight2->setDiffuseColour(ColourValue(0.988,1.0, 0.808));
477                //walllight2->setSpecularColour(ColourValue(0.988,1.0, 0.808));
478                walllight2->setPowerScale(2.5);
479                walllight2->setAttenuation(12, 0, 1, 0);
480                SceneNode* walllight2Node = rootNode->createChildSceneNode();
481                walllight2Node->setPosition(-4.822,9.353,5.150);
482                walllight2Node->attachObject(walllight2);
483
484                Light* walllight3 = mSceneMgr->createLight("WallLight3");
485                walllight3->setType(Light::LT_POINT);
486        walllight3->setDiffuseColour(ColourValue(0.988,1.0, 0.808));
487                //walllight3->setSpecularColour(ColourValue(0.988,1.0, 0.808));
488                walllight3->setPowerScale(2.5);
489                walllight3->setAttenuation(12, 0, 1, 0);
490                SceneNode* walllight3Node = rootNode->createChildSceneNode();
491                walllight3Node->setPosition(-11.08,10.07,-24.658);
492                walllight3Node->attachObject(walllight3);
493
494                Light* walllight4 = mSceneMgr->createLight("WallLight4");
495                walllight4->setType(Light::LT_POINT);
496        walllight4->setDiffuseColour(ColourValue(0.988,1.0, 0.808));
497                //walllight4->setSpecularColour(ColourValue(0.988,1.0, 0.808));
498                walllight4->setPowerScale(2.5);
499                walllight4->setAttenuation(12, 0, 1, 0);
500                SceneNode* walllight4Node = rootNode->createChildSceneNode();
501                walllight4Node->setPosition(-11.08,10.07,-11.474);
502                walllight4Node->attachObject(walllight4);
503
504                Light* redlight1 = mSceneMgr->createLight("RedLight1");
505                redlight1->setType(Light::LT_POINT);
506        redlight1->setDiffuseColour(ColourValue(1.0,0.367, 0.016));
507                //redlight1->setSpecularColour(ColourValue(1.0,0.367, 0.016));
508                redlight1->setPowerScale(3.59);
509                redlight1->setAttenuation(2, 0, 1, 0);
510                SceneNode* redlight1Node = rootNode->createChildSceneNode();
511                redlight1Node->setPosition(24.958,7.743,-10.838);
512                redlight1Node->attachObject(redlight1);
513
514                Light* redlight2 = mSceneMgr->createLight("RedLight2");
515                redlight2->setType(Light::LT_POINT);
516        redlight2->setDiffuseColour(ColourValue(1.0,0.367, 0.016));
517                //redlight2->setSpecularColour(ColourValue(1.0,0.367, 0.016));
518                redlight2->setPowerScale(3.59);
519                redlight2->setAttenuation(2, 0, 1, 0);
520                SceneNode* redlight2Node = rootNode->createChildSceneNode();
521                redlight2Node->setPosition(18.689,7.743,-10.838);
522                redlight2Node->attachObject(redlight2);
523   }
524
525   Camera* mReflectCamFloor;
526   Camera* mReflectCamCeil;
527   ReflectionCameraFrameListener* reflListener;
528   void createScene2()
529   {
530           mCamera->setPosition(0,5,10);
531           MovablePlane *floorPlane = new MovablePlane("ReflectPlaneFloor");
532        floorPlane->d = 0;
533        floorPlane->normal = Vector3::UNIT_Y;
534
535                RenderTexture* rttTexFloor = mRoot->getRenderSystem()->createRenderTexture( "FloorReflection", 512, 512, TEX_TYPE_2D, PF_R8G8B8 );
536        {
537            mReflectCamFloor = mSceneMgr->createCamera("ReflectCamFloor");
538            mReflectCamFloor->setNearClipDistance(mCamera->getNearClipDistance());
539            mReflectCamFloor->setFarClipDistance(mCamera->getFarClipDistance());
540           /* mReflectCamFloor->setAspectRatio(
541                (Real)mWindow->getViewport(0)->getActualWidth() /
542                (Real)mWindow->getViewport(0)->getActualHeight());*/
543                        mReflectCamFloor->setFOVy(mCamera->getFOVy());
544                        mReflectCamFloor->setAspectRatio(mCamera->getAspectRatio());
545
546            Viewport *v = rttTexFloor->addViewport( mReflectCamFloor );
547            v->setClearEveryFrame( true );
548            v->setBackgroundColour( ColourValue::Black );
549                       
550         
551            // set up linked reflection
552            mReflectCamFloor->enableReflection(floorPlane);
553            // Also clip
554            mReflectCamFloor->enableCustomNearClipPlane(floorPlane);
555        }
556        /*      MovablePlane *ceilPlane = new MovablePlane("ReflectPlaneCeil");
557        ceilPlane->d = -8;
558                ceilPlane->normal = Vector3::NEGATIVE_UNIT_Y;
559                RenderTexture* rttTexCeil = mRoot->getRenderSystem()->createRenderTexture( "CeilReflection", 512, 512, TEX_TYPE_2D, PF_R8G8B8 );
560        {
561            mReflectCamCeil = mSceneMgr->createCamera("ReflectCamCeil");
562            mReflectCamCeil->setNearClipDistance(mCamera->getNearClipDistance());
563            mReflectCamCeil->setFarClipDistance(mCamera->getFarClipDistance());
564            mReflectCamCeil->setAspectRatio(
565                (Real)mWindow->getViewport(0)->getActualWidth() /
566                (Real)mWindow->getViewport(0)->getActualHeight());
567
568            Viewport *v = rttTexCeil->addViewport( mReflectCamCeil );
569            v->setClearEveryFrame( true );
570            v->setBackgroundColour( ColourValue::Black );
571                       
572           
573            // set up linked reflection
574            mReflectCamCeil->enableReflection(floorPlane);
575            // Also clip
576            mReflectCamCeil->enableCustomNearClipPlane(floorPlane);
577        }
578                */
579                reflListener = new ReflectionCameraFrameListener(mReflectCamFloor, mReflectCamCeil, mCamera);
580                reflListener->setPriority(2);
581
582           // mSceneMgr->setAmbientLight(ColourValue(0.1, 0.0537, 0.0));
583           mSceneMgr->setAmbientLight(ColourValue(0.2, 0.25, 0.3));
584               
585                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
586
587        Entity* object = mSceneMgr->createEntity("object", "buddha.mesh");
588                object->setMaterialName("GameTools/Diffuse/use");
589                //object->setMaterialName("GameTools/Diffuse2");
590                objectNode = rootNode->createChildSceneNode();
591                objectNode->attachObject(object);
592                objectNode->scale(1.8,1.8,1.8);
593                objectNode->rotate(Vector3(0,1,0),Radian(Math::PI));
594                objectNode->setPosition(0,0,0);
595                objectNode->_updateBounds();
596
597                Entity* room = mSceneMgr->createEntity("scene", "uvegfolyoso2.mesh");
598                //room->setMaterialName("GameTools/Phong");
599                SceneNode* roomNode = rootNode->createChildSceneNode();
600                roomNode->attachObject(room);
601                roomNode->_updateBounds();
602                rttTexFloor->addListener(new FloorRenderTargetListener(room));
603                //rttTexCeil->addListener(new CeilRenderTargetListener(room));
604
605                Light* light1 = mSceneMgr->createLight("Light1");
606                light1->setType(Light::LT_POINT);
607        light1->setDiffuseColour(ColourValue(0.526,0.535, 0.974));
608                light1->setPowerScale(3);
609                SceneNode* lightNode1 = rootNode->createChildSceneNode();
610                lightNode1->setPosition(-1.266,4.131,-4.438);
611                lightNode1->attachObject(light1);
612
613                Light* light2 = mSceneMgr->createLight("Light2");
614                light2->setType(Light::LT_POINT);
615        light2->setDiffuseColour(ColourValue(0.391,0.781, 0.974));
616                light2->setPowerScale(3);
617                SceneNode* lightNode2 = rootNode->createChildSceneNode();
618                lightNode2->setPosition(-33.537,4.131,-4.438);
619                lightNode2->attachObject(light2);
620
621                Light* light3 = mSceneMgr->createLight("Light3");
622                light3->setType(Light::LT_POINT);
623        light3->setDiffuseColour(ColourValue(0.391,0.781, 0.974));
624                light3->setPowerScale(3);
625                SceneNode* lightNode3 = rootNode->createChildSceneNode();
626                lightNode3->setPosition(-97.446,4.131,-4.438);
627                lightNode3->attachObject(light3);
628
629                Light* light4 = mSceneMgr->createLight("Light4");
630                light4->setType(Light::LT_POINT);
631        light4->setDiffuseColour(ColourValue(0.304,0.974, 0.770));
632                light4->setPowerScale(3);
633                SceneNode* lightNode4 = rootNode->createChildSceneNode();
634                lightNode4->setPosition(-63.277,4.131,-4.438);
635                lightNode4->attachObject(light4);
636
637               
638
639
640
641   }
642
643   void createScene3()
644   {
645           OgreIlluminationManager::getSingleton().setFocusingSM(false);
646           OgreIlluminationManager::getSingleton().setShadowMapSize(512);
647           OgreIlluminationManager::getSingleton().setBlurShadowMap(true);
648           OgreIlluminationManager::getSingleton().setShadowMapMaterialName("GameTools/ShadowMapDistance");
649            mSceneMgr->setAmbientLight(ColourValue(0.505 * 0.2, 0.897 * 0.2, 0.914 * 0.2));
650               
651                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
652
653        Entity* object = mSceneMgr->createEntity("object", "buddha.mesh");
654                object->setMaterialName("GameTools/Diffuse/use");
655                //object->setMaterialName("GameTools/DiffuseP2P");
656                objectNode = rootNode->createChildSceneNode();
657                objectNode->attachObject(object);
658                objectNode->scale(0.4,0.4,0.4);
659                objectNode->rotate(Vector3(0,1,0),Radian(Math::PI));
660                objectNode->setPosition(0,0,0);
661                objectNode->_updateBounds();
662
663                Entity* room = mSceneMgr->createEntity("scene", "difflab.mesh");
664                //room->setMaterialName("GameTools/Phong");
665                SceneNode* roomNode = rootNode->createChildSceneNode();
666                roomNode->attachObject(room);
667                roomNode->_updateBounds();     
668
669
670                capture->addAnimableNode(objectNode);
671                capture->addAnimableNode(mCamera->getParentSceneNode());
672
673                mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
674                Light* redLight1 = mSceneMgr->createLight("RedLight1");
675                redLight1->setType(Light::LT_POINT);
676                redLight1->setCastShadows(false);
677        redLight1->setDiffuseColour(ColourValue(1,0.055, 0.0));
678                redLight1->setPowerScale(1.6);
679                SceneNode* redLightNode1 = rootNode->createChildSceneNode();
680                redLightNode1->setPosition(0.05,2.361,-1.07);
681                redLightNode1->attachObject(redLight1);
682
683                Light* greenLight1 = mSceneMgr->createLight("GreenLight1");
684                greenLight1->setType(Light::LT_POINT);
685                greenLight1->setCastShadows(false);
686        greenLight1->setDiffuseColour(ColourValue(0.362,0.783, 0.685));
687                greenLight1->setPowerScale(2.0);
688                SceneNode* greenLightNode1 = rootNode->createChildSceneNode();
689                greenLightNode1->setPosition(1.312,1.313,0);
690                greenLightNode1->attachObject(greenLight1);
691
692                Light* mainBlueLight = mSceneMgr->createLight("MainBlueLight");
693                mainBlueLight->setType(Light::LT_SPOTLIGHT);
694                mainBlueLight->setCastShadows(true);
695        mainBlueLight->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
696                mainBlueLight->setPowerScale(5.0);
697                mainBlueLight->setSpotlightRange(Degree(0),Degree(160));
698                mainBlueLight->setAttenuation(2.5, 0, 1, 0);
699                SceneNode* mainBlueLightNode = rootNode->createChildSceneNode();
700                mainBlueLightNode->setPosition(-0.546,2.095,1.035);
701                //mainBlueLightNode->rotate(Vector3::UNIT_X, Degree(161.396));
702                //mainBlueLightNode->rotate(Vector3::UNIT_Y, Degree(53.955));
703                //mainBlueLightNode->rotate(Vector3::UNIT_Z, Degree(-145.065));
704                mainBlueLight->setDirection(-1.5,-2.0,1.0);
705                mainBlueLightNode->attachObject(mainBlueLight);
706/*
707                Light* blueLight1 = mSceneMgr->createLight("BlueLight1");
708                blueLight1->setType(Light::LT_SPOTLIGHT);
709                blueLight1->setCastShadows(false);
710        blueLight1->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
711                blueLight1->setPowerScale(0.7);
712                blueLight1->setSpotlightRange(Degree(20),Degree(90));
713                SceneNode* blueLightNode = rootNode->createChildSceneNode();
714                blueLightNode->setPosition(-0.9,2.095,0.185);
715                //blueLightNode->rotate(Vector3::UNIT_X, Degree(148.785));
716                //blueLightNode->rotate(Vector3::UNIT_Y, Degree(39.001));
717                //blueLightNode->rotate(Vector3::UNIT_Z, Degree(-154.304));
718                blueLight1->setDirection(-1.5,-2.0,1.0);
719                blueLightNode->attachObject(blueLight1);
720
721                Light* blueLight2 = mSceneMgr->createLight("BlueLight2");
722                blueLight2->setType(Light::LT_SPOTLIGHT);
723                blueLight2->setCastShadows(false);
724        blueLight2->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
725                blueLight2->setPowerScale(0.7);
726                blueLight2->setSpotlightRange(Degree(20),Degree(90));
727                SceneNode* blueLightNode2 = rootNode->createChildSceneNode();
728                blueLightNode2->setPosition(0.091,2.095,1.556);
729                //blueLightNode2->rotate(Vector3::UNIT_X, Degree(-112.941));
730                //blueLightNode2->rotate(Vector3::UNIT_Y, Degree(68.432));
731                //blueLightNode2->rotate(Vector3::UNIT_Z, Degree(-66.441));
732                blueLight2->setDirection(-1.5,-2.0,1.0);
733                blueLightNode2->attachObject(blueLight2); */
734   }
735
736   void createPlane(Ogre::String _name, Ogre::String _material, Ogre::Vector3 _pos, Ogre::Vector2 _size, Ogre::Vector2 _subdivisions = Ogre::Vector2(1,1)) {
737               
738           Plane _plane;
739        _plane.normal = Vector3::UNIT_Y;
740        _plane.d = 0;
741
742
743        MeshManager::getSingleton().createPlane(_name + ".plane",
744            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
745            _plane,_size.x,_size.y,1,1,true,1,_subdivisions.x,_subdivisions.y,Vector3::UNIT_Z);
746       
747                Entity *_entity = mSceneMgr->createEntity(_name + ".entity", _name + ".plane");
748        _entity->setMaterialName(_material);
749
750                SceneNode* _node = mSceneMgr->getRootSceneNode()->createChildSceneNode(_name + ".node");
751                _node->attachObject(_entity);
752                _node->setPosition(_pos);
753        }
754
755
756
757        void createFrameListener(void)
758    {
759                // This is where we instantiate our own frame listener
760                mFrameListener= new RaytraceDemoListener(mWindow,
761                                                                                        mCamera,
762                                                                                        objectNode
763                                                                                        );
764                mFrameListener->setPriority(1);
765                OgreIlluminationManager::getSingleton().setPriority(10);
766                capture->setPriority(6);
767        mRoot->addFrameListener(capture);
768        mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
769                mRoot->addFrameListener(mFrameListener);
770                if(scene == 2)
771                mRoot->addFrameListener(reflListener);
772       
773    }
774
775};
776
777
Note: See TracBrowser for help on using the repository browser.