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

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