[2315] | 1 | /*
|
---|
| 2 | -----------------------------------------------------------------------------
|
---|
| 3 | This source file is part of OGRE
|
---|
| 4 | (Object-oriented Graphics Rendering Engine)
|
---|
| 5 | For the latest info, see http://www.ogre3d.org/
|
---|
| 6 |
|
---|
| 7 | Copyright (c) 2000-2005 The OGRE Team
|
---|
| 8 | Also see acknowledgements in Readme.html
|
---|
| 9 |
|
---|
| 10 | You may use this sample code for anything you like, it is not covered by the
|
---|
| 11 | LGPL 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"
|
---|
[2388] | 26 | #include "NXOgre.h"
|
---|
[2315] | 27 | #include "SceneSerializer.h"
|
---|
[2391] | 28 | #include "FPSPlayer.h"
|
---|
[2315] | 29 |
|
---|
[2405] | 30 | AnimationState* mAnimState = 0;
|
---|
[2377] | 31 | bool cullCamera = true;
|
---|
[2388] | 32 | Body *throwSphere = 0;
|
---|
| 33 | Scene* NXScene = 0;
|
---|
[2391] | 34 | FPSPlayer* gFPSPlayer;
|
---|
[2315] | 35 |
|
---|
[2413] | 36 | bool PP_glowON = true;
|
---|
| 37 | bool PP_tonemapON = true;
|
---|
| 38 | bool PP_dofON = true;
|
---|
| 39 |
|
---|
[2415] | 40 | Real lightpower = 32.0;
|
---|
| 41 | Real glowCut = 50.6;
|
---|
| 42 | Real glowTimeBlur = 0.6;
|
---|
| 43 | Real glowStrech = 1.8;
|
---|
| 44 | Real glowCombine = 0.5;
|
---|
[2315] | 45 | // Listener class for frame updates
|
---|
| 46 | class MoriaDemoFrameListener : public ExampleFrameListener
|
---|
| 47 | {
|
---|
| 48 | protected:
|
---|
| 49 |
|
---|
| 50 | unsigned long framecount;
|
---|
| 51 | SceneNode* mainLightNode;
|
---|
| 52 | Light* light;
|
---|
[2377] | 53 | SceneNode* sysNode;
|
---|
[2315] | 54 |
|
---|
| 55 | public:
|
---|
[2377] | 56 | MoriaDemoFrameListener(RenderWindow* window, Camera* maincam, SceneNode* lightNode, Light* l, SceneNode* sysNode)
|
---|
[2315] | 57 | :ExampleFrameListener(window, maincam)
|
---|
| 58 |
|
---|
| 59 | {
|
---|
| 60 | mainLightNode = lightNode;
|
---|
| 61 | light = l;
|
---|
| 62 | framecount = 0;
|
---|
| 63 | mMoveSpeed /= 50.0;
|
---|
[2377] | 64 | this->sysNode = sysNode;
|
---|
[2391] | 65 |
|
---|
[2459] | 66 | mStatsOn = false;
|
---|
| 67 | showDebugOverlay(mStatsOn);
|
---|
| 68 |
|
---|
[2315] | 69 | }
|
---|
| 70 |
|
---|
| 71 | bool frameStarted(const FrameEvent& evt)
|
---|
| 72 | {
|
---|
[2334] | 73 | float thisTime = (float) Root::getSingleton().getTimer()->getMilliseconds() / 2000.0f;
|
---|
[2415] | 74 | thisTime= 0;
|
---|
[2418] | 75 | //mainLightNode->setPosition(Vector3(2*cos(thisTime), 2, 2 * sin(thisTime)) + Vector3(5, 0, 5));
|
---|
[2334] | 76 | Vector3 pos = light->getDerivedPosition();
|
---|
| 77 | pos.normalise();
|
---|
| 78 | pos *= -1;
|
---|
| 79 | //light->setDirection( pos);
|
---|
| 80 |
|
---|
| 81 | framecount++;
|
---|
[2315] | 82 |
|
---|
[2405] | 83 | // mAnimState->addTime(evt.timeSinceLastFrame * 1.0);
|
---|
[2391] | 84 |
|
---|
[2334] | 85 |
|
---|
[2415] | 86 | //sysNode->setPosition(mCamera->getPosition() - Vector3(0,1.5,0));
|
---|
[2459] | 87 | //sysNode->setPosition(FPSPlayer::thePlayer->getPosition() - Vector3(0,1.5,0));
|
---|
[2377] | 88 |
|
---|
[2334] | 89 | return ExampleFrameListener::frameStarted(evt);
|
---|
[2315] | 90 | }
|
---|
| 91 |
|
---|
[2377] | 92 | bool processUnbufferedKeyInput(const FrameEvent& evt)
|
---|
| 93 | {
|
---|
[2391] | 94 | gFPSPlayer->processKeyInputs(mInputDevice);
|
---|
[2388] | 95 |
|
---|
[2413] | 96 | if (mInputDevice->isKeyDown(KC_ADD) && mTimeUntilNextToggle <= 0)
|
---|
| 97 | {
|
---|
[2415] | 98 | if (mInputDevice->isKeyDown(KC_RSHIFT))
|
---|
| 99 | lightpower /= 1.2;
|
---|
| 100 | else
|
---|
| 101 | lightpower *= 1.2;
|
---|
[2413] | 102 | light->setPowerScale(lightpower);
|
---|
[2415] | 103 | mTimeUntilNextToggle = 0.2;
|
---|
| 104 | mWindow->setDebugText(String("LightPower ") + StringConverter::toString(lightpower));
|
---|
[2413] | 105 | }
|
---|
| 106 | if (mInputDevice->isKeyDown(KC_SUBTRACT) && mTimeUntilNextToggle <= 0)
|
---|
| 107 | {
|
---|
[2415] | 108 | if (mInputDevice->isKeyDown(KC_RSHIFT))
|
---|
| 109 | glowCut /= 1.2;
|
---|
| 110 | else
|
---|
| 111 | glowCut *= 1.2;
|
---|
| 112 | Ogre::Material* m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Moria/PostProc/GlowCut").getPointer();
|
---|
| 113 | m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("cutValue",glowCut);
|
---|
| 114 | mTimeUntilNextToggle = 0.2;
|
---|
| 115 | mWindow->setDebugText(String("GlowCut ") + StringConverter::toString(glowCut));
|
---|
[2413] | 116 | }
|
---|
[2415] | 117 | if (mInputDevice->isKeyDown(KC_MULTIPLY) && mTimeUntilNextToggle <= 0)
|
---|
| 118 | {
|
---|
| 119 | if (mInputDevice->isKeyDown(KC_RSHIFT))
|
---|
| 120 | glowTimeBlur /= 1.2;
|
---|
| 121 | else
|
---|
| 122 | glowTimeBlur *= 1.2;
|
---|
| 123 | Ogre::Material* m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Moria/PostProc/GlowCut").getPointer();
|
---|
| 124 | m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("timeBlur", glowTimeBlur);
|
---|
| 125 | mTimeUntilNextToggle = 0.2;
|
---|
| 126 | mWindow->setDebugText(String("GlowTimeBlur ") + StringConverter::toString(glowTimeBlur));
|
---|
| 127 | }
|
---|
| 128 | if (mInputDevice->isKeyDown(KC_M))
|
---|
| 129 | {
|
---|
| 130 | if (mInputDevice->isKeyDown(KC_RSHIFT))
|
---|
| 131 | glowStrech -= 0.01;
|
---|
| 132 | else
|
---|
| 133 | glowStrech += 0.01;
|
---|
| 134 | Ogre::Material* m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Moria/PostProc/GlowBlurH").getPointer();
|
---|
| 135 | m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("Stretch", glowStrech);
|
---|
| 136 | m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Moria/PostProc/GlowBlurV").getPointer();
|
---|
| 137 | m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("Stretch", glowStrech);
|
---|
| 138 | mWindow->setDebugText(String("GlowStretch ") + StringConverter::toString(glowStrech));
|
---|
| 139 | }
|
---|
| 140 | if (mInputDevice->isKeyDown(KC_N))
|
---|
| 141 | {
|
---|
| 142 | if (mInputDevice->isKeyDown(KC_RSHIFT))
|
---|
| 143 | glowCombine -= 0.01;
|
---|
| 144 | else
|
---|
| 145 | glowCombine += 0.01;
|
---|
| 146 | Ogre::Material* m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Moria/GlowFinalCombine").getPointer();
|
---|
| 147 | m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("weight2", glowCombine);
|
---|
| 148 | mTimeUntilNextToggle = 0.2;
|
---|
| 149 | mWindow->setDebugText(String("GlowCombine ") + StringConverter::toString(glowCombine));
|
---|
| 150 | }
|
---|
| 151 |
|
---|
[2413] | 152 | if (mInputDevice->isKeyDown(KC_3) && mTimeUntilNextToggle <= 0)
|
---|
| 153 | {
|
---|
| 154 | PP_glowON = !PP_glowON;
|
---|
| 155 | CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
|
---|
[2415] | 156 | "GTP/Moria/PostProc/Glow", PP_glowON);
|
---|
| 157 | mTimeUntilNextToggle = 0.2;
|
---|
[2413] | 158 | }
|
---|
| 159 | if (mInputDevice->isKeyDown(KC_4) && mTimeUntilNextToggle <= 0)
|
---|
| 160 | {
|
---|
| 161 | PP_tonemapON = !PP_tonemapON;
|
---|
| 162 |
|
---|
| 163 | CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
|
---|
| 164 | "GTP/PostProc/ToneMap", PP_tonemapON);
|
---|
| 165 |
|
---|
[2415] | 166 | mTimeUntilNextToggle = 0.2;
|
---|
[2413] | 167 | }
|
---|
| 168 | if (mInputDevice->isKeyDown(KC_5) && mTimeUntilNextToggle <= 0)
|
---|
| 169 | {
|
---|
| 170 | PP_dofON = !PP_dofON;
|
---|
| 171 | CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
|
---|
| 172 | "GTP/Moria/PostProc/DoF", PP_dofON);
|
---|
[2415] | 173 | mTimeUntilNextToggle = 0.2;
|
---|
[2413] | 174 | }
|
---|
[2418] | 175 |
|
---|
| 176 | if (mInputDevice->isKeyDown(KC_I))
|
---|
| 177 | {
|
---|
| 178 | light->getParentSceneNode()->setPosition(
|
---|
| 179 | light->getParentSceneNode()->getPosition()
|
---|
| 180 | + Vector3(0.2,0,0));
|
---|
| 181 | }
|
---|
| 182 | if (mInputDevice->isKeyDown(KC_K))
|
---|
| 183 | {
|
---|
| 184 | light->getParentSceneNode()->setPosition(
|
---|
| 185 | light->getParentSceneNode()->getPosition()
|
---|
| 186 | + Vector3(-0.2,0,0));
|
---|
| 187 | }
|
---|
| 188 | if (mInputDevice->isKeyDown(KC_J))
|
---|
| 189 | {
|
---|
| 190 | light->getParentSceneNode()->setPosition(
|
---|
| 191 | light->getParentSceneNode()->getPosition()
|
---|
| 192 | + Vector3(0,0,0.2));
|
---|
| 193 | }
|
---|
| 194 | if (mInputDevice->isKeyDown(KC_L))
|
---|
| 195 | {
|
---|
| 196 | light->getParentSceneNode()->setPosition(
|
---|
| 197 | light->getParentSceneNode()->getPosition()
|
---|
| 198 | + Vector3(0,0,-0.2));
|
---|
| 199 | }
|
---|
| 200 |
|
---|
[2388] | 201 |
|
---|
[2391] | 202 |
|
---|
[2411] | 203 | // return ExampleFrameListener::processUnbufferedKeyInput(evt);
|
---|
[2391] | 204 |
|
---|
| 205 | if( mInputDevice->isKeyDown( KC_ESCAPE) )
|
---|
| 206 | {
|
---|
| 207 | return false;
|
---|
| 208 | }
|
---|
| 209 | if (mInputDevice->isKeyDown(KC_F) && mTimeUntilNextToggle <= 0)
|
---|
| 210 | {
|
---|
| 211 | mStatsOn = !mStatsOn;
|
---|
| 212 | showDebugOverlay(mStatsOn);
|
---|
| 213 |
|
---|
| 214 | mTimeUntilNextToggle = 1;
|
---|
| 215 | }
|
---|
[2405] | 216 | if (mInputDevice->isKeyDown(KC_SYSRQ) && mTimeUntilNextToggle <= 0)
|
---|
| 217 | {
|
---|
| 218 | char tmp[20];
|
---|
| 219 | sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
|
---|
| 220 | mWindow->writeContentsToFile(tmp);
|
---|
| 221 | mTimeUntilNextToggle = 0.5;
|
---|
| 222 | mWindow->setDebugText(String("Wrote ") + tmp);
|
---|
| 223 | }
|
---|
[2391] | 224 | return true;
|
---|
[2377] | 225 | }
|
---|
| 226 |
|
---|
[2391] | 227 | bool processUnbufferedMouseInput(const FrameEvent& evt)
|
---|
| 228 | {
|
---|
| 229 | gFPSPlayer->processMouseInputs(mInputDevice);
|
---|
[2411] | 230 | // return ExampleFrameListener::processUnbufferedMouseInput(evt);
|
---|
[2391] | 231 | return true;
|
---|
| 232 | }
|
---|
[2315] | 233 | };
|
---|
| 234 |
|
---|
| 235 | /** Application class */
|
---|
| 236 | class MoriaDemoApplication : public ExampleApplication
|
---|
| 237 | {
|
---|
| 238 |
|
---|
| 239 |
|
---|
| 240 |
|
---|
| 241 |
|
---|
| 242 | protected:
|
---|
| 243 | SceneNode* kupolaNode;
|
---|
| 244 | SceneNode* mainLightNode;
|
---|
| 245 | Light* mainLight;
|
---|
[2377] | 246 | SceneNode *pSysNode;
|
---|
[2315] | 247 |
|
---|
| 248 | void loadResources(void)
|
---|
| 249 | {
|
---|
| 250 | // Initialise, parse scripts etc
|
---|
| 251 | ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
|
---|
| 252 | ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Basic");
|
---|
| 253 | ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
|
---|
[2405] | 254 | ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_EnvMap");
|
---|
[2315] | 255 | ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
|
---|
| 256 | ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Particles");
|
---|
[2334] | 257 | ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_PathMap");
|
---|
| 258 | ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Moria");
|
---|
| 259 | //ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Caustic");
|
---|
[2315] | 260 | }
|
---|
| 261 |
|
---|
| 262 | void createPostproc()
|
---|
| 263 | {
|
---|
[2459] | 264 | CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
|
---|
| 265 | "FireHeatCompositor");
|
---|
| 266 | CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
|
---|
| 267 | "FireHeatCompositor", false);
|
---|
[2415] | 268 |
|
---|
[2391] | 269 | CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
|
---|
[2395] | 270 | "GTP/Moria/PostProc/DoF");
|
---|
| 271 | CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
|
---|
| 272 | "GTP/Moria/PostProc/DoF", true);
|
---|
| 273 |
|
---|
[2415] | 274 | CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
|
---|
| 275 | "GTP/Moria/PostProc/Glow");
|
---|
[2315] | 276 | CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
|
---|
[2415] | 277 | "GTP/Moria/PostProc/Glow", true);
|
---|
[2315] | 278 |
|
---|
[2395] | 279 |
|
---|
[2415] | 280 | CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
|
---|
[2315] | 281 | "GTP/PostProc/ToneMap");
|
---|
| 282 | CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
|
---|
[2391] | 283 | "GTP/PostProc/ToneMap", true);
|
---|
[2459] | 284 |
|
---|
[2395] | 285 | CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
|
---|
| 286 | "GTP/PostProc/MotionBlur");
|
---|
[2329] | 287 | CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
|
---|
[2459] | 288 | "GTP/PostProc/MotionBlur", false);
|
---|
[2329] | 289 |
|
---|
[2315] | 290 | }
|
---|
| 291 |
|
---|
| 292 | void chooseSceneManager()
|
---|
| 293 | {
|
---|
[2459] | 294 | //mSceneMgr = mRoot->createSceneManager("OctreeSceneManager");
|
---|
| 295 | mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager");
|
---|
[2315] | 296 | }
|
---|
| 297 |
|
---|
| 298 | void createScene(void) ///TOWERS
|
---|
| 299 | {
|
---|
[2329] | 300 | std::string occlusion_cfg("OcclusionCulling.cfg");
|
---|
[2459] | 301 | mSceneMgr->setWorldGeometry(occlusion_cfg);
|
---|
[2315] | 302 |
|
---|
[2459] | 303 | Overlay* mainOverlay = OverlayManager::getSingleton().getByName("MORIA/MainOverlay");
|
---|
| 304 | mainOverlay->show();
|
---|
| 305 |
|
---|
[2391] | 306 | createPostproc();
|
---|
[2315] | 307 |
|
---|
| 308 | OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
|
---|
| 309 | OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
|
---|
| 310 | OgreIlluminationManager::getSingleton().setFocusingSM(false);
|
---|
[2334] | 311 | OgreIlluminationManager::getSingleton().setShadowMapSize(128);
|
---|
[2315] | 312 | OgreIlluminationManager::getSingleton().setBlurShadowMap(true);
|
---|
[2334] | 313 | OgreIlluminationManager::getSingleton().setShadowMapMaterialName(Light::LT_SPOTLIGHT, "GTP/Basic/Distance_Normalized");//GameTools/ShadowMapDistance
|
---|
| 314 | OgreIlluminationManager::getSingleton().setShadowMapMaterialName(Light::LT_POINT, "GTP/Basic/Distance_Normalized");
|
---|
| 315 | OgreIlluminationManager::getSingleton().setUseLISPSM(false);
|
---|
| 316 | OgreIlluminationManager::getSingleton().joinSharedRuns(false);
|
---|
[2315] | 317 |
|
---|
| 318 | Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
|
---|
[2411] | 319 | //mCamera->setPosition(-20,3,0);
|
---|
[2315] | 320 | //mCamera->setPosition(0,100,0);
|
---|
| 321 | //mCamera->lookAt(0,-1,0);
|
---|
[2459] | 322 | mCamera->setFOVy(Radian(Degree(80)));
|
---|
[2411] | 323 | mCamera->setNearClipDistance(0.001);
|
---|
[2334] | 324 | mCamera->setFarClipDistance(150);
|
---|
[2315] | 325 | // Set ambient light
|
---|
| 326 | mSceneMgr->setAmbientLight(ColourValue(0.1, 0.1, 0.1));
|
---|
| 327 | mSceneMgr->setSkyBox(true, "Examples/EveningSkyBox", 500);
|
---|
| 328 |
|
---|
| 329 | SceneNode* rootNode = mSceneMgr->getRootSceneNode();
|
---|
[2377] | 330 |
|
---|
[2315] | 331 | SceneSerializer s(mSceneMgr);
|
---|
| 332 | DataStreamPtr inputStream;
|
---|
| 333 | inputStream = ResourceGroupManager::getSingleton().openResource("moria.level"); //towers2.level
|
---|
[2395] | 334 | World* NXWorld = new World("FrameListener: no, log: html");
|
---|
[2459] | 335 | NXWorld->getPhysXDriver()->createFrameListener(90);
|
---|
[2391] | 336 | NXScene = NXWorld->createScene("Main", mSceneMgr, "gravity: yes, floor: no");
|
---|
[2388] | 337 | s.setScene(NXScene);
|
---|
| 338 | s.setWorld(NXWorld);
|
---|
[2315] | 339 | s.parseScript(inputStream, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
|
---|
[2334] | 340 | s.parseEntryPoints("prmEntryPoints.text");
|
---|
[2391] | 341 |
|
---|
[2459] | 342 | NXScene->createActor("FakeFloor", new CubeShape(140,2,60), Vector3(0,-1,0), "static: yes");
|
---|
| 343 | NXScene->createActor("FakeCeiling", new CubeShape(140,2,60), Vector3(0,17,0), "static: yes");
|
---|
| 344 | NXScene->createActor("Wall1", new CubeShape(140,16,2), Vector3(0,8,30), "static: yes");
|
---|
| 345 | NXScene->createActor("Wall2", new CubeShape(140,16,2), Vector3(0,8,-30), "static: yes");
|
---|
| 346 | NXScene->createActor("Wall3", new CubeShape(2,16,60), Vector3(70,8,0), "static: yes");
|
---|
| 347 | NXScene->createActor("Wall4", new CubeShape(2,16,60), Vector3(-70,8,0), "static: yes");
|
---|
[2334] | 348 | /*
|
---|
[2315] | 349 | ParticleSystem* pSys1 = mSceneMgr->createParticleSystem("psys1", "GTP/Moria/Smoke_Large");
|
---|
| 350 | pSys1->setKeepParticlesInLocalSpace(false);
|
---|
| 351 | SceneNode *pSysNode = rootNode->createChildSceneNode("psys1");
|
---|
| 352 | pSysNode->attachObject(pSys1);
|
---|
[2334] | 353 | pSysNode->setPosition(-40,-1,-15);*/
|
---|
[2459] | 354 |
|
---|
[2334] | 355 | mainLight = mSceneMgr->createLight("MainLight");
|
---|
| 356 | mainLight->setType(Light::LT_POINT);
|
---|
[2315] | 357 | mainLight->setCastShadows(true);
|
---|
| 358 | mainLight->setDiffuseColour(ColourValue::White);
|
---|
| 359 | mainLight->setSpecularColour(ColourValue::White);
|
---|
| 360 | mainLightNode = rootNode->createChildSceneNode();
|
---|
| 361 |
|
---|
[2373] | 362 | mainLightNode->setPosition(15,5,15);
|
---|
[2415] | 363 | mainLight->setPowerScale(165);
|
---|
[2334] | 364 | //mainLight->setDirection(1,0, 0);
|
---|
[2315] | 365 | mainLightNode->attachObject(mainLight);
|
---|
[2334] | 366 | //mainLight->setSpotlightRange(Degree(0),Degree(120));
|
---|
[2443] | 367 | mainLight->setAttenuation(200.0, 0, 0, 3);
|
---|
[2459] | 368 |
|
---|
[2334] | 369 | Vector4 v = mainLight->getAs4DVector();
|
---|
| 370 |
|
---|
| 371 | BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
|
---|
| 372 | bbs->setDefaultDimensions(0.3, 0.3);
|
---|
| 373 | bbs->createBillboard(Vector3::ZERO, ColourValue::White);
|
---|
| 374 | bbs->setMaterialName("Flare");
|
---|
| 375 | mainLightNode->attachObject(bbs);
|
---|
[2415] | 376 |
|
---|
| 377 | /* Entity* ent = mSceneMgr->createEntity("troll", "troll.mesh");
|
---|
[2367] | 378 | ent->setCastShadows(true);
|
---|
[2334] | 379 | // Add entity to the scene node
|
---|
| 380 | SceneNode *trollNode = mSceneMgr->getRootSceneNode()->createChildSceneNode( Vector3(5,0,5));
|
---|
| 381 | trollNode->attachObject(ent);
|
---|
[2377] | 382 | trollNode->setScale(0.05,0.05,0.05);
|
---|
[2415] | 383 | mAnimState = ent->getAnimationState("stand");
|
---|
[2405] | 384 | mAnimState->setEnabled(true);*/
|
---|
[2334] | 385 |
|
---|
[2411] | 386 | PlayerCharacter::frameListenerPriority = 20;
|
---|
[2459] | 387 |
|
---|
[2405] | 388 | gFPSPlayer = new FPSPlayer(NXScene, mSceneMgr, Vector3(0.5, 1.8, 0.3), Vector3(5, 10, 15), 1.6, mCamera, false);
|
---|
[2459] | 389 | gFPSPlayer->addPlayerMesh("FPSarm.mesh", 0.02, false);
|
---|
[2413] | 390 | gFPSPlayer->addWeaponModel("sword.mesh", "joint28");
|
---|
[2459] | 391 |
|
---|
| 392 | TrollCharacter* troll = new TrollCharacter("troll1", NXScene, mSceneMgr, Vector3(1.5, 3.0, 1.2), Vector3(15, 10, 15), false);
|
---|
[2473] | 393 | troll->addPlayerMesh("trollLOD.mesh", 0.05, false);
|
---|
[2459] | 394 | troll->addWeaponModel("trollMace.mesh", "RightHand");
|
---|
| 395 |
|
---|
| 396 | CharacterManager::getSingleton().mScene = NXScene;
|
---|
| 397 | CharacterManager::getSingleton().mSceneManager = mSceneMgr;
|
---|
| 398 |
|
---|
[2415] | 399 | /*
|
---|
[2459] | 400 | TrollCharacter* troll2 = new TrollCharacter("troll2", NXScene, mSceneMgr, Vector3(1.5, 3.0, 1.2), Vector3(25, 10, 15), false);
|
---|
| 401 | troll2->addPlayerMesh("troll.mesh", 0.05, false);
|
---|
| 402 | troll2->addWeaponModel("trollMace.mesh", "RightHand");
|
---|
| 403 |
|
---|
| 404 | TrollCharacter* troll3 = new TrollCharacter("troll3", NXScene, mSceneMgr, Vector3(1.5, 3.0, 1.2), Vector3(35, 10, 15), false);
|
---|
| 405 | troll3->addPlayerMesh("troll.mesh", 0.05, false);
|
---|
| 406 | troll3->addWeaponModel("trollMace.mesh", "RightHand");
|
---|
| 407 | */
|
---|
| 408 |
|
---|
| 409 | /*for(float i = 0; i< 7; i++)
|
---|
[2391] | 410 | {
|
---|
[2395] | 411 | float size = 0.5;
|
---|
[2391] | 412 | ActorParams ac;
|
---|
| 413 | ac.setToDefault();
|
---|
[2395] | 414 | ac.mass = 1.0;
|
---|
| 415 | ac.nodescale = size;
|
---|
| 416 | Body* b = NXScene->createBody("cube.mesh",
|
---|
| 417 | new CubeShape(size, size, size),
|
---|
[2405] | 418 | Vector3(3,size/2.0 + i * 5.0,3),
|
---|
[2391] | 419 | ac);
|
---|
[2395] | 420 | b->setCharacterCollisionGroup(NX_CHARACTER_COL_GROUP_PUSHABLE);
|
---|
[2459] | 421 |
|
---|
| 422 | }*/
|
---|
| 423 |
|
---|
| 424 |
|
---|
| 425 | /* ParticleSystem* pSys1 = mSceneMgr->createParticleSystem("psys1", "MoriaDust");
|
---|
[2377] | 426 | pSys1->setKeepParticlesInLocalSpace(true);
|
---|
| 427 | pSysNode = rootNode->createChildSceneNode("psys1");
|
---|
| 428 | pSysNode->attachObject(pSys1);
|
---|
[2459] | 429 | pSysNode->setPosition(0,0,0);*/
|
---|
[2367] | 430 |
|
---|
[2459] | 431 | // LightList LL;
|
---|
| 432 | // mSceneMgr->_populateLightList(Vector3(0,0,0), 200, LL);
|
---|
| 433 | // int numlights = LL.size();
|
---|
[2395] | 434 |
|
---|
[2315] | 435 | OgreIlluminationManager::getSingleton().initTechniques();
|
---|
| 436 | }
|
---|
| 437 |
|
---|
| 438 | void createPlane(Ogre::String _name, Ogre::String _material, Ogre::Vector3 _pos, Ogre::Vector2 _size, Ogre::Vector2 _subdivisions = Ogre::Vector2(1,1))
|
---|
| 439 | {
|
---|
| 440 | Plane _plane;
|
---|
| 441 | _plane.normal = Vector3::UNIT_Y;
|
---|
| 442 | _plane.d = 0;
|
---|
| 443 |
|
---|
| 444 |
|
---|
| 445 | MeshManager::getSingleton().createPlane(_name + ".plane",
|
---|
| 446 | ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
---|
| 447 | _plane,_size.x,_size.y,1,1,true,1,_subdivisions.x,_subdivisions.y,Vector3::UNIT_Z);
|
---|
| 448 |
|
---|
| 449 | Entity *_entity = mSceneMgr->createEntity(_name + ".entity", _name + ".plane");
|
---|
| 450 | _entity->setMaterialName(_material);
|
---|
| 451 |
|
---|
| 452 | SceneNode* _node = mSceneMgr->getRootSceneNode()->createChildSceneNode(_name + ".node");
|
---|
| 453 | _node->attachObject(_entity);
|
---|
| 454 | _node->setPosition(_pos);
|
---|
| 455 |
|
---|
| 456 | }
|
---|
| 457 |
|
---|
| 458 | void createFrameListener(void)
|
---|
| 459 | {
|
---|
| 460 | // This is where we instantiate our own frame listener
|
---|
| 461 | mFrameListener= new MoriaDemoFrameListener(mWindow,
|
---|
[2377] | 462 | mCamera, mainLightNode, mainLight, pSysNode );
|
---|
[2395] | 463 | mFrameListener->setPriority(10);
|
---|
[2315] | 464 | mRoot->addFrameListener(mFrameListener);
|
---|
[2405] | 465 | // gFPSPlayer->setPriority(20);
|
---|
| 466 | // mRoot->addFrameListener(gFPSPlayer);
|
---|
[2459] | 467 | OgreIlluminationManager::getSingleton().setPriority(100);
|
---|
[2391] | 468 | mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
|
---|
| 469 |
|
---|
[2315] | 470 | }
|
---|
| 471 |
|
---|
| 472 | };
|
---|
| 473 |
|
---|