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

Revision 2443, 27.5 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                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Basic");
363                //ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Diffuse_Simple");
364                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Diffuse");
365        }
366
367        void createPostproc()
368        {               
369                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
370                                                                                                                "GTP/PostProc/Glow");
371                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
372                                                                                                                "GTP/PostProc/Glow", true);
373
374                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
375                                                                                                                "GTP/PostProc/ToneMap");
376                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
377                                                                                                                "GTP/PostProc/ToneMap", true);         
378        }
379
380        void chooseSceneManager()
381        {
382                mSceneMgr = mRoot->createSceneManager("OctreeSceneManager");
383                //mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager");
384        }
385   
386        void createCamera(void)
387    {
388        // Create the camera
389        mCamera = mSceneMgr->createCamera("PlayerCam");
390               
391                SceneNode* camNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("mainCameraNode");
392                camNode->attachObject(mCamera);
393       //camNode->setPosition(Vector3(0,1,0));
394        // Position it at 500 in Z direction
395        //mCamera->setPosition(Vector3(0,0,500));
396        // Look back along -Z
397        //mCamera->lookAt(Vector3(0,0,-300));
398        mCamera->setNearClipDistance(5);
399
400    }
401
402        void createScene(void)
403    {
404                //std::string occlusion_cfg("OcclusionCulling.cfg");
405                //mSceneMgr->setWorldGeometry(occlusion_cfg);
406                //createPostproc();
407               
408                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
409                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
410               
411                OgreIlluminationManager::getSingleton().setMaxJoinRadius(420);         
412
413                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
414
415                //mCamera->setPosition(0,1,0);         
416                mCamera->setFOVy(Radian(Degree(80)));
417                mCamera->setFarClipDistance(200);
418                mCamera->setNearClipDistance(0.1);
419               
420                capture  = new FrameCapture(mWindow);
421                switch (scene)
422                {
423                case 1:
424                        createScene1();break;
425                case 2:
426                        createScene2();break;
427                case 3:
428                        createScene3();break;
429                }
430                OgreIlluminationManager::getSingleton().initTechniques();
431               
432               
433   }
434
435   void createScene1()
436   {
437           
438        mSceneMgr->setAmbientLight(ColourValue(0.1, 0.0537, 0.0));
439                //mSceneMgr->setAmbientLight(ColourValue(0.0, 0.0, 0.0));
440                 
441
442                // Skybox
443        //mSceneMgr->setSkyBox(true, "Examples/MorningSkyBox");
444
445                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
446
447        Entity* object = mSceneMgr->createEntity("object", "chinaman.mesh");
448                object->setMaterialName("GameTools/Diffuse/use");
449                //object->setMaterialName("GameTools/Diffuse2");
450                objectNode = rootNode->createChildSceneNode();
451                objectNode->attachObject(object);
452        //      objectNode->scale(0.05,0.05,0.05);
453                objectNode->scale(3,3,3);
454        //      objectNode->setPosition(0,4,0);                 
455                objectNode->_updateBounds();
456
457                Entity* room = mSceneMgr->createEntity("atlascube", "diffscene.mesh");
458                //room->setMaterialName("GameTools/Phong");
459                SceneNode* roomNode = rootNode->createChildSceneNode();
460                //roomNode->setScale(10,10,10);
461                roomNode->attachObject(room);
462                roomNode->_updateBounds();
463               
464                Light* bluelight = mSceneMgr->createLight("BlueLight");
465                bluelight->setType(Light::LT_POINT);
466        bluelight->setDiffuseColour(ColourValue(0.152,0.824, 1.0));
467                //bluelight->setSpecularColour(ColourValue(0.152,0.824, 1.0));
468                bluelight->setPowerScale(5.726);
469                bluelight->setAttenuation(12, 0, 1, 0);
470                SceneNode* bluelightNode = rootNode->createChildSceneNode();
471                bluelightNode->setPosition(-5.948,9.619,0.980);
472                bluelightNode->attachObject(bluelight);
473
474                Light* walllight1 = mSceneMgr->createLight("WallLight1");
475                walllight1->setType(Light::LT_POINT);
476        walllight1->setDiffuseColour(ColourValue(0.988,1.0, 0.808));
477                //walllight1->setSpecularColour(ColourValue(0.988,1.0, 0.808));
478                walllight1->setPowerScale(2.5);
479                walllight1->setAttenuation(12, 0, 1, 0);
480                SceneNode* walllight1Node = rootNode->createChildSceneNode();
481                walllight1Node->setPosition(-4.822,9.353,-5.194);
482                walllight1Node->attachObject(walllight1);
483
484                Light* walllight2 = mSceneMgr->createLight("WallLight2");
485                walllight2->setType(Light::LT_POINT);
486        walllight2->setDiffuseColour(ColourValue(0.988,1.0, 0.808));
487                //walllight2->setSpecularColour(ColourValue(0.988,1.0, 0.808));
488                walllight2->setPowerScale(2.5);
489                walllight2->setAttenuation(12, 0, 1, 0);
490                SceneNode* walllight2Node = rootNode->createChildSceneNode();
491                walllight2Node->setPosition(-4.822,9.353,5.150);
492                walllight2Node->attachObject(walllight2);
493
494                Light* walllight3 = mSceneMgr->createLight("WallLight3");
495                walllight3->setType(Light::LT_POINT);
496        walllight3->setDiffuseColour(ColourValue(0.988,1.0, 0.808));
497                //walllight3->setSpecularColour(ColourValue(0.988,1.0, 0.808));
498                walllight3->setPowerScale(2.5);
499                walllight3->setAttenuation(12, 0, 1, 0);
500                SceneNode* walllight3Node = rootNode->createChildSceneNode();
501                walllight3Node->setPosition(-11.08,10.07,-24.658);
502                walllight3Node->attachObject(walllight3);
503
504                Light* walllight4 = mSceneMgr->createLight("WallLight4");
505                walllight4->setType(Light::LT_POINT);
506        walllight4->setDiffuseColour(ColourValue(0.988,1.0, 0.808));
507                //walllight4->setSpecularColour(ColourValue(0.988,1.0, 0.808));
508                walllight4->setPowerScale(2.5);
509                walllight4->setAttenuation(12, 0, 1, 0);
510                SceneNode* walllight4Node = rootNode->createChildSceneNode();
511                walllight4Node->setPosition(-11.08,10.07,-11.474);
512                walllight4Node->attachObject(walllight4);
513
514                Light* redlight1 = mSceneMgr->createLight("RedLight1");
515                redlight1->setType(Light::LT_POINT);
516        redlight1->setDiffuseColour(ColourValue(1.0,0.367, 0.016));
517                //redlight1->setSpecularColour(ColourValue(1.0,0.367, 0.016));
518                redlight1->setPowerScale(3.59);
519                redlight1->setAttenuation(2, 0, 1, 0);
520                SceneNode* redlight1Node = rootNode->createChildSceneNode();
521                redlight1Node->setPosition(24.958,7.743,-10.838);
522                redlight1Node->attachObject(redlight1);
523
524                Light* redlight2 = mSceneMgr->createLight("RedLight2");
525                redlight2->setType(Light::LT_POINT);
526        redlight2->setDiffuseColour(ColourValue(1.0,0.367, 0.016));
527                //redlight2->setSpecularColour(ColourValue(1.0,0.367, 0.016));
528                redlight2->setPowerScale(3.59);
529                redlight2->setAttenuation(2, 0, 1, 0);
530                SceneNode* redlight2Node = rootNode->createChildSceneNode();
531                redlight2Node->setPosition(18.689,7.743,-10.838);
532                redlight2Node->attachObject(redlight2);
533   }
534
535   Camera* mReflectCamFloor;
536   Camera* mReflectCamCeil;
537   ReflectionCameraFrameListener* reflListener;
538   void createScene2()
539   {
540           mCamera->setPosition(0,5,10);
541           MovablePlane *floorPlane = new MovablePlane("ReflectPlaneFloor");
542        floorPlane->d = 0;
543        floorPlane->normal = Vector3::UNIT_Y;
544
545                RenderTexture* rttTexFloor = mRoot->getRenderSystem()->createRenderTexture( "FloorReflection", 512, 512, TEX_TYPE_2D, PF_R8G8B8 );
546        {
547            mReflectCamFloor = mSceneMgr->createCamera("ReflectCamFloor");
548            mReflectCamFloor->setNearClipDistance(mCamera->getNearClipDistance());
549            mReflectCamFloor->setFarClipDistance(mCamera->getFarClipDistance());
550           /* mReflectCamFloor->setAspectRatio(
551                (Real)mWindow->getViewport(0)->getActualWidth() /
552                (Real)mWindow->getViewport(0)->getActualHeight());*/
553                        mReflectCamFloor->setFOVy(mCamera->getFOVy());
554                        mReflectCamFloor->setAspectRatio(mCamera->getAspectRatio());
555
556            Viewport *v = rttTexFloor->addViewport( mReflectCamFloor );
557            v->setClearEveryFrame( true );
558            v->setBackgroundColour( ColourValue::Black );
559                       
560         
561            // set up linked reflection
562            mReflectCamFloor->enableReflection(floorPlane);
563            // Also clip
564            mReflectCamFloor->enableCustomNearClipPlane(floorPlane);
565        }
566        /*      MovablePlane *ceilPlane = new MovablePlane("ReflectPlaneCeil");
567        ceilPlane->d = -8;
568                ceilPlane->normal = Vector3::NEGATIVE_UNIT_Y;
569                RenderTexture* rttTexCeil = mRoot->getRenderSystem()->createRenderTexture( "CeilReflection", 512, 512, TEX_TYPE_2D, PF_R8G8B8 );
570        {
571            mReflectCamCeil = mSceneMgr->createCamera("ReflectCamCeil");
572            mReflectCamCeil->setNearClipDistance(mCamera->getNearClipDistance());
573            mReflectCamCeil->setFarClipDistance(mCamera->getFarClipDistance());
574            mReflectCamCeil->setAspectRatio(
575                (Real)mWindow->getViewport(0)->getActualWidth() /
576                (Real)mWindow->getViewport(0)->getActualHeight());
577
578            Viewport *v = rttTexCeil->addViewport( mReflectCamCeil );
579            v->setClearEveryFrame( true );
580            v->setBackgroundColour( ColourValue::Black );
581                       
582           
583            // set up linked reflection
584            mReflectCamCeil->enableReflection(floorPlane);
585            // Also clip
586            mReflectCamCeil->enableCustomNearClipPlane(floorPlane);
587        }
588                */
589                reflListener = new ReflectionCameraFrameListener(mReflectCamFloor, mReflectCamCeil, mCamera);
590                reflListener->setPriority(2);
591
592           // mSceneMgr->setAmbientLight(ColourValue(0.1, 0.0537, 0.0));
593           mSceneMgr->setAmbientLight(ColourValue(0.2, 0.25, 0.3));
594               
595                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
596
597        Entity* object = mSceneMgr->createEntity("object", "buddha.mesh");
598                object->setMaterialName("GameTools/Diffuse/use");
599                //object->setMaterialName("GameTools/Diffuse2");
600                objectNode = rootNode->createChildSceneNode();
601                objectNode->attachObject(object);
602                objectNode->scale(1.8,1.8,1.8);
603                objectNode->rotate(Vector3(0,1,0),Radian(Math::PI));
604                objectNode->setPosition(0,0,0);
605                objectNode->_updateBounds();
606
607                Entity* room = mSceneMgr->createEntity("scene", "uvegfolyoso2.mesh");
608                //room->setMaterialName("GameTools/Phong");
609                SceneNode* roomNode = rootNode->createChildSceneNode();
610                roomNode->attachObject(room);
611                roomNode->_updateBounds();
612                rttTexFloor->addListener(new FloorRenderTargetListener(room));
613                //rttTexCeil->addListener(new CeilRenderTargetListener(room));
614
615                Light* light1 = mSceneMgr->createLight("Light1");
616                light1->setType(Light::LT_POINT);
617        light1->setDiffuseColour(ColourValue(0.526,0.535, 0.974));
618                light1->setPowerScale(3);
619                SceneNode* lightNode1 = rootNode->createChildSceneNode();
620                lightNode1->setPosition(-1.266,4.131,-4.438);
621                lightNode1->attachObject(light1);
622
623                Light* light2 = mSceneMgr->createLight("Light2");
624                light2->setType(Light::LT_POINT);
625        light2->setDiffuseColour(ColourValue(0.391,0.781, 0.974));
626                light2->setPowerScale(3);
627                SceneNode* lightNode2 = rootNode->createChildSceneNode();
628                lightNode2->setPosition(-33.537,4.131,-4.438);
629                lightNode2->attachObject(light2);
630
631                Light* light3 = mSceneMgr->createLight("Light3");
632                light3->setType(Light::LT_POINT);
633        light3->setDiffuseColour(ColourValue(0.391,0.781, 0.974));
634                light3->setPowerScale(3);
635                SceneNode* lightNode3 = rootNode->createChildSceneNode();
636                lightNode3->setPosition(-97.446,4.131,-4.438);
637                lightNode3->attachObject(light3);
638
639                Light* light4 = mSceneMgr->createLight("Light4");
640                light4->setType(Light::LT_POINT);
641        light4->setDiffuseColour(ColourValue(0.304,0.974, 0.770));
642                light4->setPowerScale(3);
643                SceneNode* lightNode4 = rootNode->createChildSceneNode();
644                lightNode4->setPosition(-63.277,4.131,-4.438);
645                lightNode4->attachObject(light4);
646
647               
648
649
650
651   }
652
653   void createScene3()
654   {
655           OgreIlluminationManager::getSingleton().setFocusingSM(false);
656           OgreIlluminationManager::getSingleton().setShadowMapSize(512);
657           OgreIlluminationManager::getSingleton().setBlurShadowMap(true);
658           OgreIlluminationManager::getSingleton().setShadowMapMaterialName("GTP/Basic/Distance_Normalized");//GameTools/ShadowMapDistance
659            mSceneMgr->setAmbientLight(ColourValue(0.505 * 0.2, 0.897 * 0.2, 0.914 * 0.2));
660               
661                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
662
663        Entity* object = mSceneMgr->createEntity("object", "buddha.mesh");
664                //object->setMaterialName("GTP/Diffuse/Disc2Point");
665                object->setMaterialName("GTP/Diffuse/Poly2Point");
666                //object->setMaterialName("GTP/Diffuse/Poly2PointSimple");
667
668                objectNode = rootNode->createChildSceneNode();
669                objectNode->attachObject(object);
670                objectNode->scale(0.4,0.4,0.4);
671                objectNode->rotate(Vector3(0,1,0),Radian(Math::PI));
672                objectNode->setPosition(0,1,0);
673                objectNode->_updateBounds();
674
675                Entity* room = mSceneMgr->createEntity("scene", "difflab.mesh");
676                //room->setMaterialName("GameTools/Phong");
677                SceneNode* roomNode = rootNode->createChildSceneNode();
678                roomNode->attachObject(room);
679                roomNode->_updateBounds();     
680
681
682                capture->addAnimableNode(objectNode);
683                capture->addAnimableNode(mCamera->getParentSceneNode());
684
685                mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
686                Light* redLight1 = mSceneMgr->createLight("RedLight1");
687                redLight1->setType(Light::LT_POINT);
688                redLight1->setCastShadows(false);
689        redLight1->setDiffuseColour(ColourValue(1,0.055, 0.0));
690                redLight1->setPowerScale(1.6);
691                //redLight1->setPowerScale(0.6);
692                redLight1->setAttenuation(20, 0, 0, 3);
693                SceneNode* redLightNode1 = rootNode->createChildSceneNode();
694                redLightNode1->setPosition(0.05,2.361,-1.07);
695                redLightNode1->attachObject(redLight1);
696
697                Light* greenLight1 = mSceneMgr->createLight("GreenLight1");
698                greenLight1->setType(Light::LT_POINT);
699                greenLight1->setCastShadows(false);
700        greenLight1->setDiffuseColour(ColourValue(0.362,0.783, 0.685));
701                greenLight1->setPowerScale(2.0);
702                greenLight1->setAttenuation(20, 0, 0, 3);
703                //greenLight1->setPowerScale(1.0);
704                SceneNode* greenLightNode1 = rootNode->createChildSceneNode();
705                greenLightNode1->setPosition(1.312,1.313,0);
706                greenLightNode1->attachObject(greenLight1);
707
708                Light* mainBlueLight = mSceneMgr->createLight("MainBlueLight");
709                mainBlueLight->setType(Light::LT_SPOTLIGHT);
710                mainBlueLight->setCastShadows(true);
711        mainBlueLight->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
712                mainBlueLight->setPowerScale(5.0);
713                //mainBlueLight->setPowerScale(2.0);
714                mainBlueLight->setSpotlightRange(Degree(0),Degree(160));
715                mainBlueLight->setAttenuation(2.5, 0, 0, 3);
716                //mainBlueLight->setAttenuation(20, 0, 0, 1);
717                SceneNode* mainBlueLightNode = rootNode->createChildSceneNode();
718                mainBlueLightNode->setPosition(-0.546,2.095,1.035);
719                //mainBlueLightNode->rotate(Vector3::UNIT_X, Degree(161.396));
720                //mainBlueLightNode->rotate(Vector3::UNIT_Y, Degree(53.955));
721                //mainBlueLightNode->rotate(Vector3::UNIT_Z, Degree(-145.065));
722                mainBlueLight->setDirection(-1.5,-2.0,1.0);
723                mainBlueLightNode->attachObject(mainBlueLight);
724/*
725                Light* blueLight1 = mSceneMgr->createLight("BlueLight1");
726                blueLight1->setType(Light::LT_SPOTLIGHT);
727                blueLight1->setCastShadows(false);
728        blueLight1->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
729                blueLight1->setPowerScale(0.7);
730                blueLight1->setSpotlightRange(Degree(20),Degree(90));
731                SceneNode* blueLightNode = rootNode->createChildSceneNode();
732                blueLightNode->setPosition(-0.9,2.095,0.185);
733                //blueLightNode->rotate(Vector3::UNIT_X, Degree(148.785));
734                //blueLightNode->rotate(Vector3::UNIT_Y, Degree(39.001));
735                //blueLightNode->rotate(Vector3::UNIT_Z, Degree(-154.304));
736                blueLight1->setDirection(-1.5,-2.0,1.0);
737                blueLightNode->attachObject(blueLight1);
738
739                Light* blueLight2 = mSceneMgr->createLight("BlueLight2");
740                blueLight2->setType(Light::LT_SPOTLIGHT);
741                blueLight2->setCastShadows(false);
742        blueLight2->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
743                blueLight2->setPowerScale(0.7);
744                blueLight2->setSpotlightRange(Degree(20),Degree(90));
745                SceneNode* blueLightNode2 = rootNode->createChildSceneNode();
746                blueLightNode2->setPosition(0.091,2.095,1.556);
747                //blueLightNode2->rotate(Vector3::UNIT_X, Degree(-112.941));
748                //blueLightNode2->rotate(Vector3::UNIT_Y, Degree(68.432));
749                //blueLightNode2->rotate(Vector3::UNIT_Z, Degree(-66.441));
750                blueLight2->setDirection(-1.5,-2.0,1.0);
751                blueLightNode2->attachObject(blueLight2); */
752   }
753
754   void createPlane(Ogre::String _name, Ogre::String _material, Ogre::Vector3 _pos, Ogre::Vector2 _size, Ogre::Vector2 _subdivisions = Ogre::Vector2(1,1)) {
755               
756           Plane _plane;
757        _plane.normal = Vector3::UNIT_Y;
758        _plane.d = 0;
759
760
761        MeshManager::getSingleton().createPlane(_name + ".plane",
762            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
763            _plane,_size.x,_size.y,1,1,true,1,_subdivisions.x,_subdivisions.y,Vector3::UNIT_Z);
764       
765                Entity *_entity = mSceneMgr->createEntity(_name + ".entity", _name + ".plane");
766        _entity->setMaterialName(_material);
767
768                SceneNode* _node = mSceneMgr->getRootSceneNode()->createChildSceneNode(_name + ".node");
769                _node->attachObject(_entity);
770                _node->setPosition(_pos);
771        }
772
773
774
775        void createFrameListener(void)
776    {
777                // This is where we instantiate our own frame listener
778                mFrameListener= new RaytraceDemoListener(mWindow,
779                                                                                        mCamera,
780                                                                                        objectNode
781                                                                                        );
782                mFrameListener->setPriority(1);
783                OgreIlluminationManager::getSingleton().setPriority(10);
784                capture->setPriority(6);
785        mRoot->addFrameListener(capture);
786        mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
787                mRoot->addFrameListener(mFrameListener);
788                if(scene == 2)
789                mRoot->addFrameListener(reflListener);
790       
791    }
792
793};
794
795
Note: See TracBrowser for help on using the repository browser.