source: GTP/trunk/App/Demos/Illum/Ogre/src/CausticTest/include/CausticTest.h @ 2319

Revision 2319, 9.0 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
30float causize = 10;
31float cauintens = 40;
32
33// Listener class for frame updates
34class RaytraceDemoListener : public ExampleFrameListener
35{
36protected:
37       
38        Light* light;
39        SceneNode* lightNode;
40        SceneNode* sphereNode;
41        unsigned long framecount;
42       
43public:
44    RaytraceDemoListener(RenderWindow* window, Camera* maincam,SceneNode* lightNode, SceneNode* sphereNode, Light* l)
45        :ExampleFrameListener(window, maincam)
46                                 
47    {
48                framecount = 0;
49                this->sphereNode = sphereNode;
50                this->lightNode = lightNode;
51                light = l;
52    }
53        bool processUnbufferedKeyInput(const FrameEvent& evt)
54    {
55                if (mInputDevice->isKeyDown(KC_SUBTRACT))
56        {
57                        Vector3 lPos = lightNode->getPosition();
58                        Vector3 lDir = sphereNode->getPosition() - lPos;
59                        lDir.normalise();
60                        lPos -= lDir;
61                        lightNode->setPosition(lPos);
62                        light->setDirection(lDir);
63                }
64                if (mInputDevice->isKeyDown(KC_ADD))
65        {
66                       
67                        Vector3 lPos = lightNode->getPosition();
68                        Vector3 lDir = sphereNode->getPosition() - lPos;
69                        lDir.normalise();
70                        lPos += lDir;
71                        lightNode->setPosition(lPos);
72                        light->setDirection(lDir);
73                }
74                if (mInputDevice->isKeyDown(KC_MULTIPLY))
75        {
76                        Vector3 lPos = lightNode->getPosition();
77                        Vector3 lDir = sphereNode->getPosition() - lPos;
78                        lDir.normalise();
79                        Vector3 right = lDir.crossProduct(Vector3(0,1,0));
80                        Vector3 up = lDir.crossProduct(right);
81                        lPos += up,
82                        lightNode->setPosition(lPos);
83                        light->setDirection(lDir);
84                }
85                if (mInputDevice->isKeyDown(KC_DIVIDE))
86        {
87                        Vector3 lPos = lightNode->getPosition();
88                        Vector3 lDir = sphereNode->getPosition() - lPos;
89                        lDir.normalise();
90                        Vector3 right = lDir.crossProduct(Vector3(0,1,0));
91                        Vector3 up = lDir.crossProduct(right);
92                        lPos -= up,                     
93                        lightNode->setPosition(lPos);
94                        light->setDirection(lDir);
95                               
96                }
97                if (mInputDevice->isKeyDown(KC_HOME))
98        {
99                        Vector3 lPos = lightNode->getPosition();
100                        Vector3 lDir = sphereNode->getPosition() - lPos;
101                        lDir.normalise();
102                        Vector3 right = lDir.crossProduct(Vector3(0,1,0));
103                        Vector3 up = lDir.crossProduct(right);
104                        lPos += right,
105                        lightNode->setPosition(lPos);
106                        light->setDirection(lDir);
107                }
108                if (mInputDevice->isKeyDown(KC_END))
109        {
110                        Vector3 lPos = lightNode->getPosition();
111                        Vector3 lDir = sphereNode->getPosition() - lPos;
112                        lDir.normalise();
113                        Vector3 right = lDir.crossProduct(Vector3(0,1,0));
114                        Vector3 up = lDir.crossProduct(right);
115                        lPos -= right,                 
116                        lightNode->setPosition(lPos);
117                        light->setDirection(lDir);
118                               
119                }
120                return ExampleFrameListener::processUnbufferedKeyInput(evt);
121        }
122    bool frameStarted(const FrameEvent& evt)
123    {
124                static bool first = true;
125       
126
127        //      lightNode->setPosition( 100.0 * Vector3(cos(-(float)framecount/500.0),2.0,sin(-(float)framecount/500.0)));
128               
129               
130                bool result = ExampleFrameListener::frameStarted(evt);
131       framecount++;
132
133           if (framecount == 60)
134                   OgreIlluminationManager::getSingleton().freeAllResources();
135      return result;     
136    }
137
138       
139
140};
141
142/** Application class */
143class RaytraceDemoApplication : public ExampleApplication
144{
145
146public:
147
148protected:
149        SceneNode* mainLightNode;
150        SceneNode* sphereNode;
151       
152        void chooseSceneManager()
153        {
154                //mSceneMgr = mRoot->createSceneManager("OctreeSceneManager");
155                mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager");
156        }
157
158        void loadResources(void)
159        {
160               
161                // Initialise, parse scripts etc
162                ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
163                ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
164                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Basic");
165                ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
166                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_EnvMap");
167                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Caustic");
168        }
169
170        void createPostproc()
171        {               
172                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
173                                                                                                                "GTP/PostProc/Glow");
174                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
175                                                                                                                "GTP/PostProc/Glow", true);
176
177                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
178                                                                                                                "GTP/PostProc/ToneMap");
179                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
180                                                                                                                "GTP/PostProc/ToneMap", true);         
181        }
182   
183        Light* light;
184        void createScene(void)
185    {
186                std::string occlusion_cfg("OcclusionCulling.cfg");
187                mSceneMgr->setWorldGeometry(occlusion_cfg);
188
189                //createPostproc();
190                OgreIlluminationManager::getSingleton().setBlurShadowMap(true);
191                OgreIlluminationManager::getSingleton().setUseLISPSM(false);
192
193                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
194                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
195               
196                OgreIlluminationManager::getSingleton().setMaxJoinRadius(420);         
197
198                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
199
200                mCamera->setPosition(0,100,240);
201                mCamera->setFOVy(Radian(Degree(80)));
202                //mCamera->setFarClipDistance(1000);
203                // Set ambient light
204        mSceneMgr->setAmbientLight(ColourValue(1, 1, 1));
205
206                // Skybox
207        mSceneMgr->setSkyBox(true, "Examples/EveningSkyBox");
208
209                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
210
211        Entity* sphere = mSceneMgr->createEntity("sphere", "head.mesh");
212               
213        //      Material* mat = (Material*) MaterialManager::getSingleton().getByName("GTP/Caustic/Glass").getPointer();
214        //      Material* newMat = mat->clone(mat->getName() + "_new").getPointer();
215
216                sphere->setMaterialName("GTP/Caustic/Glass");
217                sphereNode = rootNode->createChildSceneNode();
218                //sphereNode->setScale(0.1, 0.1, 0.1);//sphere
219                sphereNode->setPosition(0, 50, 0);
220                sphereNode->attachObject(sphere);
221                sphereNode->_updateBounds();
222
223                Entity* room = mSceneMgr->createEntity("room", "atlascube.mesh");
224        //      mat = (Material*) MaterialManager::getSingleton().getByName("TestPlane").getPointer();
225        //      newMat = mat->clone(mat->getName() + "_new").getPointer();
226
227                room->setMaterialName("TestPlane");
228                SceneNode *roomNode = rootNode->createChildSceneNode();
229                //roomNode->setScale(0.1, 0.1, 0.1);
230                roomNode->setPosition(0, 50, 0);
231                roomNode->attachObject(room);
232               
233
234                Light* mainLight = mSceneMgr->createLight("MainLight");
235                light = mainLight;
236                mainLight->setType(Light::LT_POINT);
237        mainLight->setDiffuseColour(ColourValue::White);
238                mainLight->setSpecularColour(ColourValue::White);
239                mainLightNode = rootNode->createChildSceneNode();
240                mainLightNode->setPosition(100,100,0);
241                //mainLight->setPosition(mainLightNode->getWorldPosition());
242                mainLightNode->attachObject(mainLight);
243                BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
244                bbs->setDefaultDimensions(10,10);
245                bbs->createBillboard(Vector3::ZERO, ColourValue::White);
246                bbs->setMaterialName("Flare");
247                mainLightNode->attachObject(bbs);
248
249                //createPlane("ground", "TestPlane", Vector3(0,0,0), Vector2(500,500));
250                OgreIlluminationManager::getSingleton().initTechniques();
251         }
252   void createPlane(Ogre::String _name, Ogre::String _material, Ogre::Vector3 _pos, Ogre::Vector2 _size, Ogre::Vector2 _subdivisions = Ogre::Vector2(1,1)) {
253               
254           Plane _plane;
255        _plane.normal = Vector3::UNIT_Y;
256        _plane.d = 0;
257
258
259        MeshManager::getSingleton().createPlane(_name + ".plane",
260            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
261            _plane,_size.x,_size.y,1,1,true,1,_subdivisions.x,_subdivisions.y,Vector3::UNIT_Z);
262       
263                Entity *_entity = mSceneMgr->createEntity(_name + ".entity", _name + ".plane");
264        _entity->setMaterialName(_material);
265
266                SceneNode* _node = mSceneMgr->getRootSceneNode()->createChildSceneNode(_name + ".node");
267                _node->attachObject(_entity);
268                _node->setPosition(_pos);
269        }
270
271
272
273        void createFrameListener(void)
274    {
275                // This is where we instantiate our own frame listener
276                mFrameListener= new RaytraceDemoListener(mWindow,
277                                                                                        mCamera,
278                                                                                        mainLightNode,
279                                                                                        sphereNode,
280                                                                                        light
281                                                                                        );
282                mFrameListener->setPriority(1);
283                OgreIlluminationManager::getSingleton().setPriority(2);
284        mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
285                mRoot->addFrameListener(mFrameListener);
286       
287    }
288
289};
290
Note: See TracBrowser for help on using the repository browser.