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

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