source: GTP/trunk/App/Demos/Illum/Ogre/src/HierarchicalSystem/include/HierarchicalSystem.h @ 2179

Revision 2179, 6.4 KB checked in by szirmay, 17 years ago (diff)
Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4    (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2005 The OGRE Team
8Also see acknowledgements in Readme.html
9
10You may use this sample code for anything you like, it is not covered by the
11LGPL like the rest of the engine.
12-----------------------------------------------------------------------------
13*/
14
15/**
16    \file
17        Lighting.h
18    \brief
19        Shows lighting support in OGRE. Also demonstrates the use of billboards
20        and controllers for automatic time-relative behaviour.
21*/
22
23
24#include "ExampleApplication.h"
25#include "OgreIlluminationManager.h"
26#include "SpriteParticleRenderer.h"
27
28
29int scene = 1;
30
31// Listener class for frame updates
32class ParticleDemoFrameListener : public ExampleFrameListener
33{
34protected:
35       
36        SceneNode* lightNode;
37
38public:
39    ParticleDemoFrameListener(RenderWindow* window, Camera* maincam, SceneNode* lightNode)
40        :ExampleFrameListener(window, maincam)
41                                 
42    {
43                this->lightNode = lightNode;           
44    }
45
46    bool frameStarted(const FrameEvent& evt)
47    {           
48                bool result = ExampleFrameListener::frameStarted(evt);
49               
50                if(scene == 1)
51                {
52                        Timer* timer = Root::getSingleton().getTimer();
53                       
54                        float t = (float) timer->getMilliseconds() / 2000.0;
55                        float r = 150;
56                        lightNode->setPosition( r * sin(t), r * sin(5 * t) + 200 , r * cos(t));
57                }     
58        return result;     
59    }
60
61       
62
63};
64
65/** Application class */
66class ParticleDemoApplication : public ExampleApplication
67{
68
69public:
70
71protected:
72        SceneNode* kupolaNode;
73        SceneNode* mainLightNode;
74
75        void loadResources(void)
76        {
77                // Initialise, parse scripts etc
78                ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
79                ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
80                //ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
81                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Particles");
82        }
83
84        void createPostproc()
85        {               
86                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
87                                                                                                                "GTP/PostProc/Glow");
88                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
89                                                                                                                "GTP/PostProc/Glow", true);
90
91                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
92                                                                                                                "GTP/PostProc/ToneMap");
93                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
94                                                                                                                "GTP/PostProc/ToneMap", true);         
95        }
96   
97        void chooseSceneManager()
98        {
99                if(scene == 1)
100                {
101                 // mSceneMgr = mRoot->createSceneManager("OctreeSceneManager");
102                  mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager");
103                }
104                else if(scene == 2)
105           mSceneMgr = mRoot->createSceneManager("TerrainSceneManager");
106        }
107
108        void createScene(void)
109    {
110                //createPostproc();
111                //std::string occlusion_cfg("OcclusionCulling.cfg");
112                //mSceneMgr->setWorldGeometry(occlusion_cfg);
113               
114                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
115                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
116               
117               
118                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
119               
120                mCamera->setFOVy(Radian(Degree(80)));
121                mCamera->setFarClipDistance(5000);
122                // Set ambient light
123        mSceneMgr->setAmbientLight(ColourValue(1, 1, 1));
124
125                // Skybox
126        mSceneMgr->setSkyBox(true, "Examples/EveningSkyBox", 10);
127               
128               
129
130               
131
132        //      OgreIlluminationManager::getSingleton().createGlobalRun(ILLUMRUN_PHASE_TEXTURE);
133        //      OgreIlluminationManager::getSingleton().updateGlobalRun(ILLUMRUN_PHASE_TEXTURE, 1);
134        //      OgreIlluminationManager::getSingleton().savePhaseTextureToFile("phase.dds");
135
136               
137                if(scene == 1)
138                        createScene1();
139                else if(scene == 2)
140                        createScene2();
141
142
143                OgreIlluminationManager::getSingleton().initTechniques();
144
145   }
146       
147   void createScene1()
148   {
149           mCamera->setPosition(0,150,100);
150           mCamera->setDirection(0,0,-1);
151
152           SceneNode* rootNode = mSceneMgr->getRootSceneNode();
153
154           Entity* head = mSceneMgr->createEntity("head", "athene.mesh");
155           SceneNode* headNode = rootNode->createChildSceneNode("head");
156           head->setMaterialName("GameTools/Standard");
157           headNode->attachObject(head);
158           //headNode->setScale(1.5,1.5,1.5);
159           AxisAlignedBox bbox = head->getBoundingBox();
160           headNode->setPosition(0,80,20);             
161           headNode->_updateBounds();
162
163
164       ParticleSystem* pSys1 = mSceneMgr->createParticleSystem("psys1", "GTP/HPS/Smoke_Large");
165           pSys1->setKeepParticlesInLocalSpace(false);
166           SceneNode *pSysNode = rootNode->createChildSceneNode("psys1");
167           pSysNode->attachObject(pSys1);
168           pSysNode->setPosition(0,0,0);
169               
170                //Init lights
171                Light* mainLight = mSceneMgr->createLight("MainLight");
172                mainLight->setType(Light::LT_POINT);
173        mainLight->setDiffuseColour(ColourValue::White);
174                mainLight->setSpecularColour(ColourValue::White);
175                mainLightNode = rootNode->createChildSceneNode();
176                mainLightNode->setPosition(0,500,0);
177                mainLight->setPosition(mainLightNode->getWorldPosition());
178                mainLightNode->attachObject(mainLight);
179                BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
180                bbs->createBillboard(Vector3::ZERO, ColourValue::White);
181                bbs->setMaterialName("Flare");
182                mainLightNode->attachObject(bbs);
183   }
184
185   void createScene2()
186   {
187        mCamera->setPosition(0,150,100);
188           mCamera->setDirection(0,0,-1);
189
190           SceneNode* rootNode = mSceneMgr->getRootSceneNode();
191           std::string terrain_cfg("terrain.cfg");
192           mSceneMgr -> setWorldGeometry( terrain_cfg );
193
194           ParticleSystem* pSys1 = mSceneMgr->createParticleSystem("psys1", "GameTools/FogBig");
195           pSys1->setKeepParticlesInLocalSpace(false);
196           SceneNode *pSysNode = rootNode->createChildSceneNode("psys1");
197           pSysNode->attachObject(pSys1);
198           pSysNode->setPosition(600,-50,600);
199               
200   }
201
202        void createFrameListener(void)
203    {
204                // This is where we instantiate our own frame listener
205                mFrameListener= new ParticleDemoFrameListener(mWindow,
206                                                                                        mCamera , mainLightNode);
207       mFrameListener->setPriority(2);
208                OgreIlluminationManager::getSingleton().setPriority(10);
209                 mRoot->addFrameListener(mFrameListener);
210                 mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
211
212                 
213               
214    }
215
216};
217
Note: See TracBrowser for help on using the repository browser.