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

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