source: GTP/trunk/App/Demos/Illum/Ogre/src/PRMDemo/include/PRMDemo.h @ 2423

Revision 2423, 12.0 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 "SceneSerializer.h"
27
28Light* blueLight;
29
30// Listener class for frame updates
31class PRMDemoFrameListener : public ExampleFrameListener
32{
33protected:
34       
35        unsigned long framecount;
36        SceneNode* mainLightNode;
37        Light* light;
38       
39public:
40    PRMDemoFrameListener(RenderWindow* window, Camera* maincam, SceneNode* lightNode, Light* l)
41        :ExampleFrameListener(window, maincam)
42                                 
43    {
44                mainLightNode = lightNode;
45                light = l;
46                framecount = 0;
47                mMoveSpeed /= 50.0;
48    }
49
50    bool frameStarted(const FrameEvent& evt)
51    {   
52        /*      light->setDirection(mCamera->getDirection());
53                light->setPosition(mCamera->getPosition());
54                mainLightNode->setPosition(mCamera->getPosition());*/
55                bool result = ExampleFrameListener::frameStarted(evt);
56       framecount++;
57
58           static float t = 0;
59           float dt = evt.timeSinceLastFrame / 4.0;
60           t += dt;
61/*
62           Vector3 pos(30 * sin(t), 1, 30 * cos(t));
63           light->getParentSceneNode()->setPosition(pos);
64           Vector3 dir = -pos;
65           dir.normalise();
66           light->setDirection(dir);*/
67         
68         
69        return result;     
70    }
71
72       
73
74};
75
76/** Application class */
77class PRMDemoApplication : public ExampleApplication
78{
79
80
81
82
83protected:
84        SceneNode* kupolaNode;
85        SceneNode* mainLightNode;
86        Light* mainLight;
87       
88        void loadResources(void)
89        {
90                // Initialise, parse scripts etc
91                ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
92                ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
93                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Basic");
94                ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
95                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_PathMap");
96                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_PathMapDemo");
97        }
98
99        void createPostproc()
100        {               
101                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
102                                                                                                                "GTP/PostProc/Glow");
103                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
104                                                                                                                "GTP/PostProc/Glow", true);
105/*
106                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
107                                                                                                                "GTP/PostProc/ToneMap");
108                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
109                                                                                                                "GTP/PostProc/ToneMap", true);  */
110        }
111   
112        void chooseSceneManager()
113        {
114                mSceneMgr = mRoot->createSceneManager("OctreeSceneManager");
115                //mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager");
116        }
117
118        /*
119        void createScene(void) /// SHADOWACCUM
120    {
121                //std::string occlusion_cfg("OcclusionCulling.cfg");
122                //mSceneMgr->setWorldGeometry(occlusion_cfg);           
123                //createPostproc();
124
125                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
126                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
127                OgreIlluminationManager::getSingleton().setShadowMapMaterialName("GTP/Basic/CameraDepth");
128                OgreIlluminationManager::getSingleton().setFocusingSM(false);
129           OgreIlluminationManager::getSingleton().setShadowMapSize(1024);
130           OgreIlluminationManager::getSingleton().setBlurShadowMap(false);
131           OgreIlluminationManager::getSingleton().setUseLISPSM(false);
132           OgreIlluminationManager::getSingleton().setAreaLigtRadius(2);
133                               
134                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
135                mCamera->setPosition(0,0,0);
136                //mCamera->setPosition(0,100,0);
137                //mCamera->lookAt(0,-1,0);
138                mCamera->setFOVy(Radian(Degree(80)));
139                mCamera->setNearClipDistance(0.01);
140                mCamera->setFarClipDistance(1000);
141                // Set ambient light
142        mSceneMgr->setAmbientLight(ColourValue(0,0, 0));
143                //mSceneMgr->setSkyBox(true, "Examples/EveningSkyBox", 500);
144               
145                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
146
147                Entity* pillar = mSceneMgr->createEntity("pillar", "pillarShape.mesh");
148                SceneNode* pillarNode = rootNode->createChildSceneNode("pillarnode");
149                pillarNode->attachObject(pillar);
150
151                       
152                createPlane("p","GTP/Basic/ShadowReceiver/ShadowAccum",Vector3(0,-1.3,0),Vector2(20,20),Vector2(1,1));
153
154                Light* mainLight = mSceneMgr->createLight("MainLight");
155                mainLight->setType(Light::LT_SPOTLIGHT);
156                mainLight->setCastShadows(true);
157        mainLight->setDiffuseColour(ColourValue::White);
158                mainLight->setSpecularColour(ColourValue::White);
159                mainLightNode = rootNode->createChildSceneNode();
160               
161                mainLightNode->setPosition(10,10,10);           
162                mainLight->setPosition(10,10,10);
163                mainLight->setPowerScale(10);
164                mainLight->setDirection(-1,-1, -1);
165                mainLight->setSpotlightOuterAngle(Radian(Degree(90)));
166                mainLight->setAttenuation(20, 0, 0, 0);
167                mainLightNode->attachObject(mainLight);         
168
169                BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
170                bbs->setDefaultDimensions(6,6);
171                bbs->createBillboard(Vector3::ZERO, ColourValue::White);
172                bbs->setMaterialName("Flare");
173                mainLightNode->attachObject(bbs);
174               
175                OgreIlluminationManager::getSingleton().initTechniques();
176   }*/
177/*
178        void createScene(void) ///TOWERS
179    {
180                //std::string occlusion_cfg("OcclusionCulling.cfg");
181                //mSceneMgr->setWorldGeometry(occlusion_cfg);
182               
183                createPostproc();
184
185                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
186                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
187                OgreIlluminationManager::getSingleton().setShadowMapSize(700);
188                OgreIlluminationManager::getSingleton().setShadowMapMaterialName("GTP/Basic/Depth");
189                OgreIlluminationManager::getSingleton().setFocusingSM(true);
190           OgreIlluminationManager::getSingleton().setBlurShadowMap(false);
191           OgreIlluminationManager::getSingleton().setUseLISPSM(true);
192                               
193                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
194                mCamera->setPosition(0,0,0);
195                //mCamera->setPosition(0,100,0);
196                //mCamera->lookAt(0,-1,0);
197                mCamera->setFOVy(Radian(Degree(80)));
198                mCamera->setNearClipDistance(0.01);
199                mCamera->setFarClipDistance(1000);
200                // Set ambient light
201        mSceneMgr->setAmbientLight(ColourValue(0.1, 0.1, 0.1));
202                mSceneMgr->setSkyBox(true, "Examples/EveningSkyBox", 500);
203               
204                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
205
206               
207                SceneSerializer s(mSceneMgr);
208                DataStreamPtr inputStream;                             
209                inputStream = ResourceGroupManager::getSingleton().openResource("towers.level");        //towers2.level
210                s.parseScript(inputStream, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
211                       
212                //createPlane("p","groundmaterial",Vector3(0,-0.3,0),Vector2(150,150));
213
214                Light* mainLight = mSceneMgr->createLight("MainLight");
215                mainLight->setType(Light::LT_DIRECTIONAL);
216                mainLight->setCastShadows(true);
217        mainLight->setDiffuseColour(ColourValue::White);
218                mainLight->setSpecularColour(ColourValue::White);
219                mainLightNode = rootNode->createChildSceneNode();
220               
221                mainLightNode->setPosition(1000,1000,1000);             
222                mainLight->setPosition(1000,1000,1000);
223                mainLight->setPowerScale(5);
224                mainLight->setDirection(-1,-1, -1);
225                mainLightNode->attachObject(mainLight);         
226               
227                OgreIlluminationManager::getSingleton().initTechniques();
228   }*/
229
230        void createScene(void) ///PATHMAP Hangar
231    {
232                std::string occlusion_cfg("OcclusionCulling.cfg");
233                //mSceneMgr->setWorldGeometry(occlusion_cfg);
234               
235                //createPostproc();
236
237                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
238                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
239                OgreIlluminationManager::getSingleton().setShadowMapMaterialName(Light::LT_SPOTLIGHT, "GTP/Basic/Distance_Normalized");
240                OgreIlluminationManager::getSingleton().setShadowMapMaterialName(Light::LT_POINT, "GTP/Basic/Distance_Normalized");
241                OgreIlluminationManager::getSingleton().setFocusingSM(false);
242           OgreIlluminationManager::getSingleton().setShadowMapSize(512);
243           OgreIlluminationManager::getSingleton().setBlurShadowMap(false);
244           OgreIlluminationManager::getSingleton().setUseLISPSM(false);
245                               
246                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
247                mCamera->setPosition(32,0.68,11);
248                //mCamera->setPosition(50,35,-2);
249                //mCamera->lookAt(0,0,0);
250                //mCamera->setPosition(0,100,0);
251                //mCamera->lookAt(0,-1,0);
252                mCamera->setFOVy(Radian(Degree(80)));
253                mCamera->setNearClipDistance(0.01);
254                mCamera->setFarClipDistance(1000);
255                // Set ambient light
256        mSceneMgr->setAmbientLight(ColourValue(0.1, 0.1, 0.1));
257                mSceneMgr->setSkyBox(true, "Examples/EveningSkyBox", 500);
258               
259                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
260
261               
262                SceneSerializer s(mSceneMgr);
263                DataStreamPtr inputStream;                             
264                inputStream = ResourceGroupManager::getSingleton().openResource("processed.level");     //towers2.level
265                s.parseScript(inputStream, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
266                s.parseEntryPoints("SpacePrmEntryPoints.text");
267                       
268                //createPlane("p","GTP/Basic/ShadowReceiver/Depth",Vector3(0,-0.3,0),Vector2(150,150));
269
270                mainLight = mSceneMgr->createLight("MainLight");
271                mainLight->setType(Light::LT_SPOTLIGHT);
272                mainLight->setCastShadows(true);
273        mainLight->setDiffuseColour(ColourValue(1.0,0.5,0.3,1));
274                mainLight->setSpecularColour(ColourValue::White);
275                mainLightNode = rootNode->createChildSceneNode();
276               
277                mainLightNode->setPosition(30,1,0.0);           
278                //mainLight->setPosition(30,1,0);
279                mainLight->setPowerScale(200);
280                mainLight->setDirection(-1, 0, 0);
281                mainLight->setSpotlightOuterAngle(Radian(Degree(90)));
282                mainLight->setSpotlightFalloff(1);
283                mainLight->setAttenuation(200, 0, 0, 1);
284                mainLightNode->attachObject(mainLight);         
285/*
286                blueLight = mSceneMgr->createLight("BlueLight");
287                blueLight->setType(Light::LT_SPOTLIGHT);
288                blueLight->setCastShadows(true);
289        blueLight->setDiffuseColour(ColourValue(0.3,0.5,1.0,1));
290                blueLight->setSpecularColour(ColourValue::White);
291                SceneNode* blueLightNode = rootNode->createChildSceneNode();
292               
293                blueLightNode->setPosition(-30,1,0.0);         
294                //blueLight->setPosition(-30,1,0);
295                blueLight->setPowerScale(200);
296                blueLight->setDirection(1, 0, 0);
297                blueLight->setSpotlightOuterAngle(Radian(Degree(160)));
298                blueLight->setSpotlightFalloff(1);
299                blueLight->setAttenuation(2000, 0, 0, 1);
300                blueLightNode->attachObject(blueLight);         */
301
302               
303                OgreIlluminationManager::getSingleton().initTechniques();
304   }
305       
306        void createPlane(Ogre::String _name, Ogre::String _material, Ogre::Vector3 _pos, Ogre::Vector2 _size, Ogre::Vector2 _subdivisions = Ogre::Vector2(1,1))
307        {
308                Plane _plane;
309        _plane.normal = Vector3::UNIT_Y;
310        _plane.d = 0;
311
312
313        MeshManager::getSingleton().createPlane(_name + ".plane",
314            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
315            _plane,_size.x,_size.y,1,1,true,1,_subdivisions.x,_subdivisions.y,Vector3::UNIT_Z);
316       
317                Entity *_entity = mSceneMgr->createEntity(_name + ".entity", _name + ".plane");
318        _entity->setMaterialName(_material);
319
320                SceneNode* _node = mSceneMgr->getRootSceneNode()->createChildSceneNode(_name + ".node");
321                _node->attachObject(_entity);
322                _node->setPosition(_pos);
323
324        }
325
326        void createFrameListener(void)
327    {
328                // This is where we instantiate our own frame listener
329                mFrameListener= new PRMDemoFrameListener(mWindow,
330                                                                                        mCamera, mainLightNode, mainLight       );
331       mFrameListener->setPriority(1); 
332                mRoot->addFrameListener(mFrameListener);
333                OgreIlluminationManager::getSingleton().setPriority(2);
334                mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
335    }
336
337};
338
Note: See TracBrowser for help on using the repository browser.