source: GTP/branches/IllumWPdeliver2008dec/IlluminationWP/demos/OgreDemos/src/GameToolsRaytraceDemo/include/GameToolsRaytraceDemo.h @ 3255

Revision 3255, 10.8 KB checked in by szirmay, 15 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#include "SpriteParticleRenderer.h"
30
31float causize = 10;
32float cauintens = 1;
33
34// Listener class for frame updates
35class RaytraceDemoListener : public ExampleFrameListener
36{
37protected:
38        SceneNode* goldSphereNode;
39        SceneNode* silverSphereNode;
40        SceneNode* copperSphereNode;
41        SceneNode* aluSphereNode;
42        SceneNode* centerSphereNode;
43        SceneNode* lightNode;
44        Light* light;
45        unsigned long framecount;
46       
47public:
48    RaytraceDemoListener(RenderWindow* window, Camera* maincam,SceneNode* lightNode,
49                                                                                                                                SceneNode* goldSphereNode,
50                                                                                                                                SceneNode* silverSphereNode,
51                                                                                                                                SceneNode* copperSphereNode,
52                                                                                                                                SceneNode* aluSphereNode,
53                                                                                                                                SceneNode* centerSphereNode,
54                                                                                                                                Light* light)
55        :ExampleFrameListener(window, maincam)
56                                 
57    {
58                framecount = 0;
59                this->goldSphereNode = goldSphereNode;
60                this->silverSphereNode = silverSphereNode;
61                this->copperSphereNode = copperSphereNode;
62                this->aluSphereNode = aluSphereNode;
63                this->centerSphereNode = centerSphereNode;
64                this->lightNode = lightNode;
65                this->light = light;
66    }
67        bool processUnbufferedKeyInput(const FrameEvent& evt)
68    {
69        /*      MaterialPtr mat = MaterialManager::getSingleton().getByName("GTP/Caustic/CauCube_PointSpritecenterHead_SE_0_clone");
70                GpuProgramParameters* Vparams = mat->getTechnique(0)->getPass(0)->getVertexProgramParameters().getPointer();
71                GpuProgramParameters* Fparams = mat->getTechnique(0)->getPass(0)->getFragmentProgramParameters().getPointer();
72               
73                if (mInputDevice->isKeyDown(KC_SUBTRACT))
74        {
75                        cauintens -= 0.5;
76                        cauintens = std::max(cauintens, 1.0f);
77                        float intensity = cauintens;
78                        float causticColor[] = {1.0, 1.0, 1.0, intensity};
79                        Fparams->setNamedConstant("CausticColor", causticColor, 4);                             
80                }
81                if (mInputDevice->isKeyDown(KC_ADD))
82        {
83                        cauintens += 0.5;
84                        cauintens = std::min(cauintens, 100.0f);
85                        float intensity = pow( cauintens / 100.0f, 2 );
86                        float causticColor[] = {1.0, 1.0, 1.0, intensity};
87                        Fparams->setNamedConstant("CausticColor", causticColor, 4);                                     
88                }
89                if (mInputDevice->isKeyDown(KC_MULTIPLY))
90        {
91                        causize = std::max(causize - 0.1, 0.0);
92                        Vparams->setNamedConstant("CauSpriteSize", causize);                   
93                }
94                if (mInputDevice->isKeyDown(KC_DIVIDE))
95        {
96                        causize = causize + 0.1;
97                        Vparams->setNamedConstant("CauSpriteSize", causize);                   
98                }
99        */
100                return ExampleFrameListener::processUnbufferedKeyInput(evt);
101        }
102    bool frameStarted(const FrameEvent& evt)
103    {
104                static bool first = true;
105                if(first)
106                {
107/*                      MaterialPtr mat = MaterialManager::getSingleton().getByName("GTP/Caustic/CauCube_PointSpritecenterHead_SE_0_clone");
108                        GpuProgramParameters* Vparams = mat->getTechnique(0)->getPass(0)->getVertexProgramParameters().getPointer();
109                        GpuProgramParameters* Fparams = mat->getTechnique(0)->getPass(0)->getFragmentProgramParameters().getPointer();
110                        float intensity = cauintens;
111                        float causticColor[] = {1.0, 1.0, 1.0, intensity};
112                        Fparams->setNamedConstant("CausticColor", causticColor, 4);                     
113                        Vparams->setNamedConstant("CauSpriteSize", causize);
114                        first = false;*/
115                }
116
117                lightNode->setPosition( 100.0 * Vector3(cos(-(float)framecount/500.0),2.0,sin(-(float)framecount/500.0)));
118                light->setDirection(Vector3(0,100,0)-lightNode->getPosition());
119               
120                goldSphereNode->setPosition(   100.0 *
121                                                                Vector3(
122                                                                                cos((float)framecount/700.0),
123                                                                                1.0,
124                                                                                sin((float)framecount/700.0)));
125                silverSphereNode->setPosition( 100.0 *
126                                                                Vector3(
127                                                                                cos((float)framecount/700.0 + Math::PI / 2.0),
128                                                                                1.0,
129                                                                                sin((float)framecount/700.0 + Math::PI / 2.0)));
130                copperSphereNode->setPosition( 100.0 *
131                                                                Vector3(
132                                                                                cos((float)framecount/700.0 + Math::PI ),
133                                                                                1.0,
134                                                                                sin((float)framecount/700.0 + Math::PI)));
135                aluSphereNode->setPosition(    100.0 *
136                                                                Vector3(
137                                                                                cos((float)framecount/700.0 + 3 * Math::PI / 2.0),
138                                                                                1.0,
139                                                                                sin((float)framecount/700.0+ 3 * Math::PI / 2.0)));
140               
141                bool result = ExampleFrameListener::frameStarted(evt);
142       framecount++;
143      return result;     
144    }
145
146       
147
148};
149
150/** Application class */
151class RaytraceDemoApplication : public ExampleApplication
152{
153
154public:
155
156
157protected:
158        SceneNode* kupolaNode;
159        SceneNode* mainLightNode;
160        SceneNode* goldSphereNode;
161        SceneNode* silverSphereNode;
162        SceneNode* copperSphereNode;
163        SceneNode* aluSphereNode;
164        SceneNode* centerSphereNode;
165        Light* mainLight;
166
167
168        void loadResources(void)
169        {
170                // Initialise, parse scripts etc
171                ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
172                ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
173                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Basic");
174                ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
175                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_EnvMap");
176                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Caustic");
177        }
178
179        void createPostproc()
180        {               
181                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
182                                                                                                                "GTP/PostProc/Glow");
183                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
184                                                                                                                "GTP/PostProc/Glow", true);
185
186                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
187                                                                                                                "GTP/PostProc/ToneMap");
188                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
189                                                                                                                "GTP/PostProc/ToneMap", true);                 
190        }
191   
192        void chooseSceneManager()
193        {
194                mSceneMgr = mRoot->createSceneManager("OctreeSceneManager");
195                //mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager");
196        }
197
198        void createScene(void)
199    {
200                //createPostproc();
201               
202                std::string occlusion_cfg("OcclusionCulling.cfg");
203                //mSceneMgr->setWorldGeometry(occlusion_cfg);
204               
205                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
206                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
207               
208                OgreIlluminationManager::getSingleton().setMaxJoinRadius(1000);         
209
210                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
211
212                mCamera->setPosition(0,100,240);
213                mCamera->setFOVy(Radian(Degree(80)));
214                //mCamera->setFarClipDistance(1000);
215                // Set ambient light
216        mSceneMgr->setAmbientLight(ColourValue(1, 1, 1));
217
218                // Skybox
219        mSceneMgr->setSkyBox(true, "Examples/MorningSkyBox");
220
221                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
222
223     
224                //init objects
225                Entity* kupola = mSceneMgr->createEntity("kupola", "kupola.mesh");
226       
227                Entity* centerHead = mSceneMgr->createEntity("centerHead", "head.mesh");
228                Entity* goldHead = mSceneMgr->createEntity("goldHead", "head.mesh");
229                Entity* silverHead = mSceneMgr->createEntity("silverHead", "head.mesh");
230                Entity* copperHead = mSceneMgr->createEntity("copperHead", "head.mesh");
231                Entity* aluHead = mSceneMgr->createEntity("aluHead", "head.mesh");
232
233                kupola->setCastShadows(false);
234               
235                MeshPtr kmesh = kupola->getMesh();
236                kmesh->buildTangentVectors(0,1);
237               
238                //init nodes
239                centerSphereNode = rootNode->createChildSceneNode("centerSphere");
240                centerSphereNode->setPosition(0, 100,0);
241                centerSphereNode->attachObject(centerHead);
242                centerSphereNode->setScale(3.2, 3.2, 3.2);
243               
244                goldSphereNode = rootNode->createChildSceneNode( "goldSphere" );
245                goldSphereNode->scale(2.4, 2.4, 2.4);
246                goldSphereNode->attachObject(goldHead);
247               
248                silverSphereNode = rootNode->createChildSceneNode( "silverSphere" );
249                silverSphereNode->scale(2.4, 2.4, 2.4);
250                silverSphereNode->attachObject(silverHead);
251               
252                aluSphereNode = rootNode->createChildSceneNode( "aluSphere" );
253                aluSphereNode->scale(2.4, 2.4, 2.4);
254                aluSphereNode->attachObject(aluHead);
255               
256                copperSphereNode = rootNode->createChildSceneNode( "copperSphere" );
257                copperSphereNode->scale(2.4, 2.4, 2.4);
258                copperSphereNode->attachObject(copperHead);
259               
260                goldSphereNode->_updateBounds();
261                silverSphereNode->_updateBounds();
262                aluSphereNode->_updateBounds();
263                copperSphereNode->_updateBounds();
264
265               
266                kupolaNode = rootNode->createChildSceneNode( "kupola" );
267                kupolaNode->rotate(Vector3(0,1,0),Radian(Degree(90)));
268                kupolaNode->attachObject( kupola );
269                kupolaNode->scale(25,21,25);           
270                //kupolaNode->scale(2,2,2);             
271                //kupolaNode->setPosition(0,100,0);
272                kupolaNode->_updateBounds();
273                centerSphereNode->_updateBounds();
274               
275                //Init lights
276                mainLight = mSceneMgr->createLight("MainLight");
277                mainLight->setType(Light::LT_POINT);
278        mainLight->setDiffuseColour(ColourValue::White);
279                mainLight->setSpecularColour(ColourValue::White);
280                //mainLight->setSpotlightRange(Radian(Degree(175)),Radian(Degree(180)));
281                mainLightNode = rootNode->createChildSceneNode();
282                mainLightNode->setPosition(0,0,0);             
283                mainLight->setPosition(mainLightNode->getWorldPosition());
284                mainLightNode->attachObject(mainLight);         
285                BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
286                bbs->setDefaultDimensions(10,10);
287                bbs->createBillboard(Vector3::ZERO, ColourValue::White);
288                bbs->setMaterialName("Flare");
289                mainLightNode->attachObject(bbs);
290               
291               
292                aluHead->setMaterialName("GTP/EnvMap/Alu");
293                copperHead->setMaterialName("GTP/EnvMap/Copper");
294                goldHead->setMaterialName("GTP/EnvMap/Gold");
295                silverHead->setMaterialName("GTP/EnvMap/Silver");
296                centerHead->setMaterialName("GTP/Caustic/Glass_PointSprite");
297
298                OgreIlluminationManager::getSingleton().initTechniques();       
299   }
300
301        void createFrameListener(void)
302    {
303                // This is where we instantiate our own frame listener
304                mFrameListener= new RaytraceDemoListener(mWindow,
305                                                                                        mCamera,
306                                                                                        mainLightNode,
307                                                                                        goldSphereNode,
308                                                                                        silverSphereNode,
309                                                                                        copperSphereNode,
310                                                                                        aluSphereNode,
311                                                                                        centerSphereNode,
312                                                                                        mainLight);
313                mFrameListener->setPriority(1);
314                OgreIlluminationManager::getSingleton().setPriority(2);
315                mRoot->addFrameListener(mFrameListener);
316                mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
317
318    }
319
320};
321
Note: See TracBrowser for help on using the repository browser.