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

Revision 1127, 5.1 KB checked in by szirmay, 18 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
28
29// Listener class for frame updates
30class PRMDemoFrameListener : public ExampleFrameListener
31{
32protected:
33       
34        unsigned long framecount;
35       
36public:
37    PRMDemoFrameListener(RenderWindow* window, Camera* maincam)
38        :ExampleFrameListener(window, maincam)
39                                 
40    {
41                framecount = 0;         
42    }
43
44    bool frameStarted(const FrameEvent& evt)
45    {           
46                bool result = ExampleFrameListener::frameStarted(evt);
47       framecount++;
48        return result;     
49    }
50
51       
52
53};
54
55/** Application class */
56class PRMDemoApplication : public ExampleApplication
57{
58
59public:
60        virtual void go(void)
61    {
62        if (!setup())
63            return;
64
65        renderScene();
66               
67        // clean up
68        destroyScene();
69    }
70
71protected:
72        SceneNode* kupolaNode;
73        SceneNode* mainLightNode;
74               
75        void renderScene(){
76               
77                mWindow->resetStatistics();
78                while(true){           
79
80                       
81                        #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32           
82                        // Pump events on Win32
83                MSG  msg;
84                        while( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
85                        {
86                                TranslateMessage( &msg );
87                                DispatchMessage( &msg );
88                        }
89                       
90                        #endif
91                       
92                        if(!mRoot->_fireFrameStarted()){
93                                break;
94                        }
95                        unsigned long framenum = mRoot->getCurrentFrameNumber();
96                       
97                        OgreIlluminationManager::getSingleton().update(framenum, mWindow);
98                       
99                        //mRoot->renderOneFrame();
100                        mRoot->_updateAllRenderTargets();
101
102                        mRoot->_fireFrameEnded();       
103                       
104                }
105        }
106
107        void createPostproc()
108        {
109                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
110                                                                                                                "GameTools/Glow");
111                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
112                                                                                                                "GameTools/Glow", true);
113        }
114   
115
116        void createScene(void)
117    {
118                //createPostproc();
119
120                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
121                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
122                               
123                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
124                //mCamera->setPosition(0,20,40);
125                mCamera->setPosition(0,100,0);
126                //mCamera->lookAt(0,-1,0);
127                mCamera->setFOVy(Radian(Degree(80)));
128                //mCamera->setFarClipDistance(1000);
129                // Set ambient light
130        mSceneMgr->setAmbientLight(ColourValue(1, 1, 1));
131                mSceneMgr->setSkyBox(true, "Examples/MorningSkyBox");
132
133                SceneNode* rootNode = mSceneMgr->getRootSceneNode();   
134/*
135                SceneSerializer s(mSceneMgr);
136                DataStreamPtr inputStream;                             
137                inputStream = ResourceGroupManager::getSingleton().openResource("level.txt");           
138                s.parseScript(inputStream, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
139*/
140                Entity* lepcso = mSceneMgr->createEntity("lepcso","stairs.mesh");
141                SceneNode* lNode = rootNode->createChildSceneNode("l");
142                lNode->attachObject(lepcso);
143       
144                createPlane("p","lambert1",Vector3(0,0,0),Vector2(100,100));
145
146                Light* mainLight = mSceneMgr->createLight("MainLight");
147                mainLight->setType(Light::LT_DIRECTIONAL);
148        mainLight->setDiffuseColour(ColourValue::White);
149                mainLight->setSpecularColour(ColourValue::White);
150                mainLightNode = rootNode->createChildSceneNode();
151               
152                mainLightNode->setPosition(0,0,0);             
153                mainLight->setPosition(mainLightNode->getWorldPosition());
154                mainLight->setDirection(0,-1, 0);
155                mainLightNode->attachObject(mainLight);         
156               
157                OgreIlluminationManager::getSingleton().initTechniques();
158   }
159       
160        void createPlane(Ogre::String _name, Ogre::String _material, Ogre::Vector3 _pos, Ogre::Vector2 _size, Ogre::Vector2 _subdivisions = Ogre::Vector2(1,1)) {
161                Plane _plane;
162        _plane.normal = Vector3::UNIT_Y;
163        _plane.d = 0;
164
165
166        MeshManager::getSingleton().createPlane(_name + ".plane",
167            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
168            _plane,_size.x,_size.y,1,1,true,1,_subdivisions.x,_subdivisions.y,Vector3::UNIT_Z);
169       
170                Entity *_entity = mSceneMgr->createEntity(_name + ".entity", _name + ".plane");
171        _entity->setMaterialName(_material);
172
173                SceneNode* _node = mSceneMgr->getRootSceneNode()->createChildSceneNode(_name + ".node");
174                _node->attachObject(_entity);
175                _node->setPosition(_pos);
176
177        }
178
179        void createFrameListener(void)
180    {
181                // This is where we instantiate our own frame listener
182                mFrameListener= new PRMDemoFrameListener(mWindow,
183                                                                                        mCamera );
184        mRoot->addFrameListener(mFrameListener);
185
186    }
187
188};
189
Note: See TracBrowser for help on using the repository browser.