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

Revision 2301, 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("GTP_Basic");
81                //ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
82                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Particles");
83        }
84
85        void createPostproc()
86        {               
87                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
88                                                                                                                "GTP/PostProc/Glow");
89                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
90                                                                                                                "GTP/PostProc/Glow", true);
91
92                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
93                                                                                                                "GTP/PostProc/ToneMap");
94                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
95                                                                                                                "GTP/PostProc/ToneMap", true);         
96        }
97   
98        void chooseSceneManager()
99        {
100                if(scene == 1)
101                {
102                  mSceneMgr = mRoot->createSceneManager("OctreeSceneManager");
103                  //mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager");
104                }
105                else if(scene == 2)
106           mSceneMgr = mRoot->createSceneManager("TerrainSceneManager");
107        }
108
109        void createScene(void)
110    {
111                //createPostproc();
112                std::string occlusion_cfg("OcclusionCulling.cfg");
113                //mSceneMgr->setWorldGeometry(occlusion_cfg);
114               
115                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
116                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
117               
118               
119                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
120               
121                mCamera->setFOVy(Radian(Degree(80)));
122                mCamera->setFarClipDistance(5000);
123                // Set ambient light
124        mSceneMgr->setAmbientLight(ColourValue(1, 1, 1));
125
126                // Skybox
127        mSceneMgr->setSkyBox(true, "Examples/EveningSkyBox", 10);
128               
129               
130
131               
132
133        //      OgreIlluminationManager::getSingleton().createGlobalRun(ILLUMRUN_PHASE_TEXTURE);
134        //      OgreIlluminationManager::getSingleton().updateGlobalRun(ILLUMRUN_PHASE_TEXTURE, 1);
135        //      OgreIlluminationManager::getSingleton().savePhaseTextureToFile("phase.dds");
136
137               
138                if(scene == 1)
139                        createScene1();
140                else if(scene == 2)
141                        createScene2();
142
143
144                OgreIlluminationManager::getSingleton().initTechniques();
145
146   }
147       
148   void createScene1()
149   {
150           mCamera->setPosition(0,150,100);
151           mCamera->setDirection(0,0,-1);
152
153           SceneNode* rootNode = mSceneMgr->getRootSceneNode();
154
155           Entity* head = mSceneMgr->createEntity("head", "athene.mesh");
156           SceneNode* headNode = rootNode->createChildSceneNode("head");
157           head->setMaterialName("GameTools/Standard");
158           headNode->attachObject(head);
159           //headNode->setScale(1.5,1.5,1.5);
160           AxisAlignedBox bbox = head->getBoundingBox();
161           headNode->setPosition(0,80,20);             
162           headNode->_updateBounds();
163
164
165       ParticleSystem* pSys1 = mSceneMgr->createParticleSystem("psys1", "GTP/HPS/Smoke_Large");
166           pSys1->setKeepParticlesInLocalSpace(false);
167           SceneNode *pSysNode = rootNode->createChildSceneNode("psys1");
168           pSysNode->attachObject(pSys1);
169           pSysNode->setPosition(0,0,0);
170               
171                //Init lights
172                Light* mainLight = mSceneMgr->createLight("MainLight");
173                mainLight->setType(Light::LT_POINT);
174        mainLight->setDiffuseColour(ColourValue::White);
175                mainLight->setSpecularColour(ColourValue::White);
176                mainLightNode = rootNode->createChildSceneNode();
177                mainLightNode->setPosition(0,500,0);
178                mainLight->setPosition(mainLightNode->getWorldPosition());
179                mainLightNode->attachObject(mainLight);
180                BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
181                bbs->createBillboard(Vector3::ZERO, ColourValue::White);
182                bbs->setMaterialName("Flare");
183                mainLightNode->attachObject(bbs);
184   }
185
186   void createScene2()
187   {
188        mCamera->setPosition(0,150,100);
189           mCamera->setDirection(0,0,-1);
190
191           SceneNode* rootNode = mSceneMgr->getRootSceneNode();
192           std::string terrain_cfg("terrain.cfg");
193           mSceneMgr -> setWorldGeometry( terrain_cfg );
194
195           ParticleSystem* pSys1 = mSceneMgr->createParticleSystem("psys1", "GameTools/FogBig");
196           pSys1->setKeepParticlesInLocalSpace(false);
197           SceneNode *pSysNode = rootNode->createChildSceneNode("psys1");
198           pSysNode->attachObject(pSys1);
199           pSysNode->setPosition(600,-50,600);
200               
201   }
202
203        void createFrameListener(void)
204    {
205                // This is where we instantiate our own frame listener
206                mFrameListener= new ParticleDemoFrameListener(mWindow,
207                                                                                        mCamera , mainLightNode);
208       mFrameListener->setPriority(2);
209                OgreIlluminationManager::getSingleton().setPriority(10);
210                 mRoot->addFrameListener(mFrameListener);
211                 mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
212
213                 
214               
215    }
216
217};
218
Note: See TracBrowser for help on using the repository browser.