source: GTP/trunk/App/Demos/Illum/Ogre/src/ReflectionTest/include/ReflectionTest.h @ 2140

Revision 2140, 21.4 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
27#include "ExampleApplication.h"
28#include "OgreIlluminationManager.h"
29#include "SpriteParticleRenderer.h"
30#include "FrameCapture.h"
31#include "OgreCausticCubeMapRenderingRun.h"
32
33float worldSizeVar = 0.002;
34float refIndex = 0.995;
35int scene = 1;
36FrameCapture* capture;
37
38bool multiplebounce = true;
39bool useCauInt = true;
40
41int currentMaterial = 3;
42int currentObject = 1;
43String objectNames[] = {String("sphere.mesh"),
44                        String("teapot.mesh"),
45                                                String("buddha.mesh"),
46                                                String("head.mesh")};
47
48float objectscales[] = {0.01,1,1,0.1};
49float scenescales[] = {0.3,1, 2.7};
50
51String materialNames[] = {String("GTP/MultiBounce/Reflector"),
52                                                        String("GTP/MultiBounce/Refractor"),
53                                                        String("GTP/MultiBounce/CausticRefractor"),
54                                                        String("GTP/MultiBounce/Reflector_MinMax"),
55                                                        String("GTP/MultiBounce/Refractor_MinMax"),
56                                                        String("GTP/MultiBounce/CausticRefractor_MinMax"),
57                                                        String("semmi")
58                                                        };
59                       
60String resourceGroupName[] = {  String("GTP_MultipleReflection"),
61                                                                String("GTP_MultipleRefraction"),
62                                                                String("GTP_MultipleRefraction"),
63                                                                String("GTP_MultipleReflection_MinMax"),
64                                                                String("GTP_MultipleRefraction_MinMax"),
65                                                                String("GTP_MultipleRefraction_MinMax"),
66                                                                String("GTP_Basic")};
67
68// Listener class for frame updates
69class RaytraceDemoListener : public ExampleFrameListener
70{
71protected:
72        unsigned long framecount;
73        SceneNode* objectNode;
74        Entity *object;
75       
76public:
77        void setMoveSpeed(float speed){mMoveSpeed = speed;}
78    RaytraceDemoListener(RenderWindow* window, Camera* maincam, SceneNode* objectNode, Entity* object)
79        :ExampleFrameListener(window, maincam)
80                                 
81    {
82                this->object = object;
83                this->mMoveSpeed = 1;
84                if(scene == 2)
85                this->mMoveSpeed = 1.0;
86                if(scene == 3)
87                this->mMoveSpeed = 10.0;
88                 mStatsOn = false;
89                 showDebugOverlay(mStatsOn);
90
91                framecount = 0;         
92                this->objectNode = objectNode;         
93               
94    }
95
96        void moveCamera()
97    {/*
98           mCamera->yaw(mRotX);
99       mCamera->pitch(mRotY);
100       mCamera->moveRelative(mTranslateVector);*/
101
102                mCamera->getParentSceneNode()->yaw(mRotX, Node::TransformSpace::TS_WORLD);
103                mCamera->getParentSceneNode()->pitch(mRotY, Node::TransformSpace::TS_LOCAL);
104                mCamera->getParentSceneNode()->translate(mTranslateVector, Node::TransformSpace::TS_LOCAL);
105               
106    }
107
108        bool processUnbufferedKeyInput(const FrameEvent& evt)
109    {
110                static float lastTime = 0.0;
111                float thisTime = (float) Root::getSingleton().getTimer()->getMilliseconds() / 1000.0f;
112                float elapsed = thisTime - lastTime;
113                float move = elapsed * 0.5;
114                if(scene == 3 )
115                        move *= 10;
116                float rotate = 80.0 * move;
117                if (mInputDevice->isKeyDown(KC_G))
118        {
119                        worldSizeVar -= 0.002;
120                        if(worldSizeVar < 0.002)worldSizeVar = 0.002;
121                        MaterialPtr mat = MaterialManager::getSingleton().getByName("GTP/MultiBounce/CauCube_Trianglesobject_SE_0_clone");
122                        if(!mat.isNull())
123                        {
124                                GpuProgramParameters* Vparams = mat->getTechnique(0)->getPass(0)->getVertexProgramParameters().getPointer();
125                          Vparams->setNamedConstant("WorldSize", worldSizeVar);
126                        }
127                }
128                if (mInputDevice->isKeyDown(KC_H))
129        {
130                        worldSizeVar += 0.002;
131                        MaterialPtr mat = MaterialManager::getSingleton().getByName("GTP/MultiBounce/CauCube_Trianglesobject_SE_0_clone");
132                        if(!mat.isNull())
133                        {
134                                GpuProgramParameters* Vparams = mat->getTechnique(0)->getPass(0)->getVertexProgramParameters().getPointer();
135                          Vparams->setNamedConstant("WorldSize", worldSizeVar);
136                        }
137                }
138                if (mInputDevice->isKeyDown(KC_I) && mTimeUntilNextToggle <= 0)
139        {                       
140                        useCauInt = !useCauInt;
141
142                        MaterialPtr mat = MaterialManager::getSingleton().getByName("GTP/MultiBounce/CauCube_Trianglesobject_SE_0_clone");
143                        if(!mat.isNull())
144                        {
145                          GpuProgramParameters* Vparams = mat->getTechnique(0)->getPass(0)->getVertexProgramParameters().getPointer();
146                          Vparams->setNamedConstant("notUseIntensity", !useCauInt);
147                          if(useCauInt)
148                          {
149                                  mat->getTechnique(0)->getPass(0)->setPolygonMode(PM_SOLID);
150                                  OgreTechniqueGroup* tg = (OgreTechniqueGroup*) object->getSubEntity(0)->getRenderTechniqueGroup();
151                                  OgreCausticCubeMapRenderingRun* rr = (OgreCausticCubeMapRenderingRun*)
152                                                                tg->getSharedRuns()->getRun(ILLUMRUN_CAUSTIC_CUBEMAP)
153                                                                ->asOgreRenderingRun();
154                                  rr->setBlurMap(true);
155                          }
156                          else
157                          {
158                                   mat->getTechnique(0)->getPass(0)->setPolygonMode(PM_POINTS);
159                                   OgreTechniqueGroup* tg = (OgreTechniqueGroup*) object->getSubEntity(0)->getRenderTechniqueGroup();
160                                  OgreCausticCubeMapRenderingRun* rr = (OgreCausticCubeMapRenderingRun*)
161                                                                tg->getSharedRuns()->getRun(ILLUMRUN_CAUSTIC_CUBEMAP)
162                                                                ->asOgreRenderingRun();
163                                  rr->setBlurMap(false);
164                          }
165                        }
166                        mTimeUntilNextToggle = 1;
167        }
168                if (mInputDevice->isKeyDown(KC_J))
169        {                       
170                        refIndex -= 0.001;
171
172                        MaterialPtr mat1 = MaterialManager::getSingleton().getByName(materialNames[currentMaterial]);
173                        if(!mat1.isNull())
174                        {
175                          GpuProgramParameters* Fparams1 = mat1->getTechnique(0)->getPass(0)->getFragmentProgramParameters().getPointer();
176                          Fparams1->setNamedConstant("refIndex", refIndex);
177                        }
178                        //MaterialPtr mat2 = MaterialManager::getSingleton().getByName("GTP/MultiBounce/PhotonMap");
179                        MaterialPtr mat2 = MaterialManager::getSingleton().getByName("GTP/Caustic/PhotonMap_HitEnv");
180                        if(!mat2.isNull())
181                        {
182                          GpuProgramParameters* Fparams2 = mat2->getTechnique(0)->getPass(0)->getFragmentProgramParameters().getPointer();
183                          Fparams2->setNamedConstant("refIndex", refIndex);
184                        }
185        }
186                if (mInputDevice->isKeyDown(KC_K))
187        {
188                        refIndex += 0.001;
189                       
190                        MaterialPtr mat1 = MaterialManager::getSingleton().getByName(materialNames[currentMaterial]);
191                        if(!mat1.isNull())
192                        {
193                          GpuProgramParameters* Fparams1 = mat1->getTechnique(0)->getPass(0)->getFragmentProgramParameters().getPointer();
194                          Fparams1->setNamedConstant("refIndex", refIndex);
195                        }
196                        //MaterialPtr mat2 = MaterialManager::getSingleton().getByName("GTP/MultiBounce/PhotonMap");
197                        MaterialPtr mat2 = MaterialManager::getSingleton().getByName("GTP/Caustic/PhotonMap_HitEnv");
198                        if(!mat2.isNull())
199                        {
200                          GpuProgramParameters* Fparams2 = mat2->getTechnique(0)->getPass(0)->getFragmentProgramParameters().getPointer();
201                          Fparams2->setNamedConstant("refIndex", refIndex);
202                        }
203        }
204
205                if (mInputDevice->isKeyDown(KC_UP))
206        {
207                        objectNode->translate(0,0,move);
208        }
209                if (mInputDevice->isKeyDown(KC_MULTIPLY))
210        {
211                        //objectNode->scale(1.1,1.1,1.1);
212                        objectNode->rotate(Vector3(0,0,1), Degree(rotate));
213                       
214        }
215                if (mInputDevice->isKeyDown(KC_DIVIDE))
216        {
217                        //objectNode->scale(1.0/1.1,1.0/1.1,1.0/1.1);
218                        objectNode->rotate(Vector3(1,0,0), Degree(rotate));
219                       
220        }
221                if (mInputDevice->isKeyDown(KC_ADD))
222        {
223                        objectNode->rotate(Vector3(0,1,0), Degree(rotate));
224        }
225                if (mInputDevice->isKeyDown(KC_HOME))
226        {
227                        objectNode->translate(0,move,0);
228        }
229                if (mInputDevice->isKeyDown(KC_END))
230        {
231                        objectNode->translate(0,-move,0);
232        }
233                if (mInputDevice->isKeyDown(KC_DOWN))
234        {
235                        objectNode->translate(0,0,-move);
236        }
237                if (mInputDevice->isKeyDown(KC_RIGHT))
238        {
239                        objectNode->translate(-move,0,0);
240        }
241                if (mInputDevice->isKeyDown(KC_LEFT))
242        {
243                        objectNode->translate(move,0,0);
244        }
245
246                if (mInputDevice->isKeyDown(KC_A))
247        {
248            // Move camera left
249            mTranslateVector.x = -mMoveScale;
250        }
251
252        if (mInputDevice->isKeyDown(KC_D))
253        {
254            // Move camera RIGHT
255            mTranslateVector.x = mMoveScale;
256        }
257
258        /* Move camera forward by keypress. */
259        if ( mInputDevice->isKeyDown(KC_W) )
260        {
261            mTranslateVector.z = -mMoveScale;
262        }
263               
264        /* Move camera backward by keypress. */
265        if (mInputDevice->isKeyDown(KC_S) )
266        {
267            mTranslateVector.z = mMoveScale;
268        }
269
270        if (mInputDevice->isKeyDown(KC_PGUP))
271        {
272            // Move camera up
273            mTranslateVector.y = mMoveScale;
274        }
275
276        if (mInputDevice->isKeyDown(KC_PGDOWN))
277        {
278            // Move camera down
279            mTranslateVector.y = -mMoveScale;
280        }
281                if (mInputDevice->isKeyDown(KC_N) && mTimeUntilNextToggle <= 0)
282        {
283                        capture->playEvent();
284            mTimeUntilNextToggle = 1;
285        }
286                if (mInputDevice->isKeyDown(KC_B) && mTimeUntilNextToggle <= 0)
287        {
288                        capture->recordEvent();
289            mTimeUntilNextToggle = 1;
290        }
291                if (mInputDevice->isKeyDown(KC_M) && mTimeUntilNextToggle <= 0)
292        {
293                        capture->setSaving();
294                        capture->playEvent();
295            mTimeUntilNextToggle = 1;
296        }       
297
298        if( mInputDevice->isKeyDown( KC_ESCAPE) )
299        {           
300            return false;
301        }
302
303                // see if switching is on, and you want to toggle
304        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_M) && mTimeUntilNextToggle <= 0)
305        {
306                        switchMouseMode();
307            mTimeUntilNextToggle = 1;
308        }
309
310        if (mInputTypeSwitchingOn && mInputDevice->isKeyDown(KC_K) && mTimeUntilNextToggle <= 0)
311        {
312                        // must be going from immediate keyboard to buffered keyboard
313                        switchKeyMode();
314            mTimeUntilNextToggle = 1;
315        }
316        if (mInputDevice->isKeyDown(KC_F) && mTimeUntilNextToggle <= 0)
317        {
318            mStatsOn = !mStatsOn;
319            showDebugOverlay(mStatsOn);
320
321            mTimeUntilNextToggle = 1;
322        }
323       
324        if (mInputDevice->isKeyDown(KC_SYSRQ) && mTimeUntilNextToggle <= 0)
325        {
326                        char tmp[20];
327                        sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
328            mWindow->writeContentsToFile(tmp);
329            mTimeUntilNextToggle = 0.5;
330                        mWindow->setDebugText(String("Wrote ") + tmp);
331        }
332               
333                static bool displayCameraDetails = false;
334        if (mInputDevice->isKeyDown(KC_P) && mTimeUntilNextToggle <= 0)
335        {
336            displayCameraDetails = !displayCameraDetails;
337            mTimeUntilNextToggle = 0.5;
338            if (!displayCameraDetails)
339                mWindow->setDebugText("");
340        }
341        if (displayCameraDetails)
342        {
343            // Print camera details
344            mWindow->setDebugText("P: " + StringConverter::toString(mCamera->getDerivedPosition()) + " " +
345                "O: " + StringConverter::toString(mCamera->getDerivedOrientation()));
346        }
347        lastTime = thisTime;
348        // Return true to continue rendering
349        return true;
350        }
351    bool frameStarted(const FrameEvent& evt)
352    {
353                bool result = ExampleFrameListener::frameStarted(evt);
354                framecount++;
355                return result;     
356    }
357};
358
359/** Application class */
360class RaytraceDemoApplication : public ExampleApplication
361{
362
363public:
364
365
366protected:
367
368        SceneNode* objectNode;
369
370    void createCamera(void)
371    {
372        // Create the camera
373        mCamera = mSceneMgr->createCamera("PlayerCam");
374               
375                SceneNode* camNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("mainCameraNode");
376                camNode->attachObject(mCamera);
377       //camNode->setPosition(Vector3(0,1,0));
378        // Position it at 500 in Z direction
379        //mCamera->setPosition(Vector3(0,0,500));
380        // Look back along -Z
381        //mCamera->lookAt(Vector3(0,0,-300));
382        mCamera->setNearClipDistance(5);
383
384    }
385   
386        void loadResources(void)
387        {
388                // Initialise, parse scripts etc
389                ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
390                ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
391                ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
392                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Basic");
393                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_EnvMap");
394                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Caustic");
395                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_MultiBounce_Shared");
396                ResourceGroupManager::getSingleton().initialiseResourceGroup(resourceGroupName[currentMaterial]);
397                if(currentMaterial == 2)
398                        ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_MultipleCausticRefraction");
399                if(currentMaterial == 5)
400                        ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_MultipleCausticRefraction_MinMax");
401        }
402  Entity* object;
403
404    void createPostproc()
405        {               
406                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
407                                                                                                                "GTP/PostProc/Glow");
408                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
409                                                                                                                "GTP/PostProc/Glow", true);
410/*
411                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
412                                                                                                                "GTP/PostProc/ToneMap");
413                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
414                                                                                                                "GTP/PostProc/ToneMap", true);  */     
415        }
416
417        void createScene(void)
418    {
419                createPostproc();
420
421                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
422                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
423               
424                OgreIlluminationManager::getSingleton().setMaxJoinRadius(420);         
425
426                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
427
428                mCamera->setFOVy(Radian(Degree(80 * mWindow->getHeight() / mWindow->getWidth())));
429                mCamera->setFarClipDistance(200);
430                mCamera->setNearClipDistance(0.1);
431
432                SceneNode* cn = mCamera->getParentSceneNode();
433
434                OgreIlluminationManager::getSingleton().setFocusingSM(false);
435           OgreIlluminationManager::getSingleton().setShadowMapSize(512);
436           OgreIlluminationManager::getSingleton().setBlurShadowMap(true);
437           OgreIlluminationManager::getSingleton().setShadowMapMaterialName("GameTools/ShadowMapDistance");
438            mSceneMgr->setAmbientLight(ColourValue(0.505 * 0.2, 0.897 * 0.2, 0.914 * 0.2));
439               
440                capture  = new FrameCapture(mWindow);
441                if(scene == 1) createScene1();
442                if(scene == 2) createScene2();
443                if(scene == 3) createScene3();
444
445                OgreIlluminationManager::getSingleton().initTechniques();
446        }
447   void createScene1(void)
448    {
449        SceneNode* rootNode = mSceneMgr->getRootSceneNode();
450               
451                mCamera->getParentSceneNode()->translate(1.1,0.8,1.0);
452                //mCamera->lookAt(Vector3(0,1.2,0.0));
453                       
454                object = mSceneMgr->createEntity("object", objectNames[currentObject]);
455                 
456                object->setMaterialName(materialNames[currentMaterial]);
457                objectNode = rootNode->createChildSceneNode("objectNode");
458                objectNode->attachObject(object);
459               
460                float scale = objectscales[currentObject] * scenescales[scene-1];
461                objectNode->scale(scale, scale, scale);         
462               
463                objectNode->setPosition(0,1.2,0);
464                objectNode->_updateBounds();
465
466                capture->addAnimableNode(objectNode);
467                capture->addAnimableNode(mCamera->getParentSceneNode());
468               
469                Entity* room = mSceneMgr->createEntity("scene", "difflab.mesh");
470                //room->setMaterialName("GameTools/Phong");
471                SceneNode* roomNode = rootNode->createChildSceneNode();
472                roomNode->attachObject(room);           
473                roomNode->_updateBounds();             
474
475                mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
476       
477                Light* redLight1 = mSceneMgr->createLight("RedLight1");
478                redLight1->setType(Light::LT_POINT);
479                redLight1->setCastShadows(false);
480        redLight1->setDiffuseColour(ColourValue(1,0.055, 0.0));
481                redLight1->setPowerScale(1.6);
482                SceneNode* redLightNode1 = rootNode->createChildSceneNode();
483                redLightNode1->setPosition(0.05,2.361,-1.07);
484                redLightNode1->attachObject(redLight1);
485
486                Light* greenLight1 = mSceneMgr->createLight("GreenLight1");
487                greenLight1->setType(Light::LT_POINT);
488                greenLight1->setCastShadows(false);
489        greenLight1->setDiffuseColour(ColourValue(0.362,0.783, 0.685));
490                greenLight1->setPowerScale(2.0);
491                SceneNode* greenLightNode1 = rootNode->createChildSceneNode();
492                greenLightNode1->setPosition(1.312,1.313,0);
493                greenLightNode1->attachObject(greenLight1);
494
495                Light* mainBlueLight = mSceneMgr->createLight("MainBlueLight");
496                mainBlueLight->setType(Light::LT_SPOTLIGHT);
497                mainBlueLight->setCastShadows(true);
498        mainBlueLight->setDiffuseColour(ColourValue(0.395,0.766, 1.0));
499                mainBlueLight->setPowerScale(3.0);
500                mainBlueLight->setSpotlightRange(Degree(0),Degree(160));
501                mainBlueLight->setAttenuation(2.5, 0, 1, 0);
502                SceneNode* mainBlueLightNode = rootNode->createChildSceneNode();
503                mainBlueLightNode->setPosition(-0.546,2.095,1.035);
504                //mainBlueLightNode->rotate(Vector3::UNIT_X, Degree(161.396));
505                //mainBlueLightNode->rotate(Vector3::UNIT_Y, Degree(53.955));
506                //mainBlueLightNode->rotate(Vector3::UNIT_Z, Degree(-145.065));
507                mainBlueLight->setDirection(-1.5,-2.0,1.0);
508                mainBlueLightNode->attachObject(mainBlueLight);
509/*
510                Light* mainLight = mSceneMgr->createLight("MainLight");
511                mainLight->setType(Light::LT_SPOTLIGHT);
512                mainLight->setSpotlightRange(Degree(0),Degree(160));
513                mainLight->setCastShadows(false);
514        mainLight->setDiffuseColour(ColourValue(0.995,0.996, 0.80));
515                mainLight->setPowerScale(1.0);
516                mainLight->setAttenuation(3, 0, 1, 0);
517                SceneNode* mainLightNode = rootNode->createChildSceneNode();
518                mainLightNode->setPosition(0,2.5,0);
519                mainLight->setDirection(0,-1.0,0);
520                mainLightNode->attachObject(mainLight);*/
521/*
522                BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
523                bbs->setDefaultDimensions(0.2, 0.2);
524                bbs->createBillboard(Vector3::ZERO, ColourValue::White);
525                bbs->setMaterialName("Flare");
526                mainLightNode->attachObject(bbs);*/
527   }
528
529        void createScene2(void)
530    {
531        SceneNode* rootNode = mSceneMgr->getRootSceneNode();
532               
533                mCamera->setPosition(2.3,7.0,2.3);
534                //mCamera->lookAt(Vector3(0,5.75,0.0));
535               
536                object = mSceneMgr->createEntity("object", "teapot.mesh");
537                object->setMaterialName("MetalTeapotMultipleBounce");
538                objectNode = rootNode->createChildSceneNode();
539                objectNode->attachObject(object);
540                //objectNode->scale(0.5,0.5,0.5);
541                //objectNode->scale(0.005,0.005,0.005);
542                objectNode->setPosition(0,5.75,0.0);
543                objectNode->_updateBounds();
544
545                Entity* room = mSceneMgr->createEntity("scene", "terito.mesh");
546                //room->setMaterialName("GameTools/Phong");
547                SceneNode* roomNode = rootNode->createChildSceneNode();
548                roomNode->attachObject(room);
549                roomNode->_updateBounds();             
550
551                mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
552                Light* Light1 = mSceneMgr->createLight("Light1");
553                Light1->setType(Light::LT_POINT);
554                Light1->setCastShadows(false);
555        Light1->setDiffuseColour(ColourValue(1,1, 1));
556                Light1->setPowerScale(1.0);
557                SceneNode* LightNode1 = rootNode->createChildSceneNode();
558                LightNode1->setPosition(1.5,10.3,0);
559                LightNode1->attachObject(Light1);               
560   }
561               
562        void createScene3(void)
563    {     
564        SceneNode* rootNode = mSceneMgr->getRootSceneNode();
565               
566                //mCamera->getParentSceneNode()->translate(Vector3(6.564,4.328,0.059));
567                //mCamera->setPosition(4.0,4.2,-3.5);
568                //mCamera->getParentSceneNode()->translate(7.0,2.6,-0.5);
569                mCamera->setPosition(7.0,2.6,-0.5);
570                mCamera->lookAt(Vector3(1.0, 0.0,0.6));
571               
572                object = mSceneMgr->createEntity("object", objectNames[currentObject]);
573
574                object->setMaterialName(materialNames[currentMaterial]);
575                objectNode = rootNode->createChildSceneNode();
576                objectNode->attachObject(object);
577
578                float scale = objectscales[currentObject] * scenescales[scene-1];
579                objectNode->scale(scale, scale, scale);
580               
581                objectNode->_updateBounds();
582
583                Entity* room = mSceneMgr->createEntity("scene", "colorcube.mesh");
584                //room->setMaterialName("GameTools/Phong");
585                SceneNode* roomNode = rootNode->createChildSceneNode();
586                roomNode->attachObject(room);
587                roomNode->setScale(2,2,2);
588                roomNode->_updateBounds();
589
590                mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
591                Light* Light1 = mSceneMgr->createLight("Light1");
592                Light1->setType(Light::LT_SPOTLIGHT);
593                Light1->setCastShadows(true);
594        Light1->setDiffuseColour(ColourValue(1,1, 1));
595                Light1->setPowerScale(1.0);
596                SceneNode* LightNode1 = rootNode->createChildSceneNode();
597                LightNode1->setPosition(3,3,3);
598                Light1->setDirection(-1,-1,-1);
599                Light1->setSpotlightRange(Degree(0),Degree(120));
600                LightNode1->attachObject(Light1);
601/*
602                BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
603                bbs->setDefaultDimensions(0.2, 0.2);
604                bbs->createBillboard(Vector3::ZERO, ColourValue::White);
605                bbs->setMaterialName("Flare");
606                LightNode1->attachObject(bbs);*/
607   }
608
609        void createFrameListener(void)
610    {
611                // This is where we instantiate our own frame listener
612                mFrameListener= new RaytraceDemoListener(mWindow, mCamera, objectNode, object);
613                mFrameListener->setPriority(1);
614                OgreIlluminationManager::getSingleton().setPriority(3);
615                capture->setPriority(2);
616        mRoot->addFrameListener(capture);
617                mRoot->addFrameListener(mFrameListener);
618                mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
619
620    }
621
622};
623
Note: See TracBrowser for help on using the repository browser.