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

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