[1493] | 1 | #include "ExampleApplication.h"
|
---|
| 2 | #include "ExtendedCamera.h"
|
---|
| 3 | #include "Grass.h"
|
---|
| 4 | #include <vector>
|
---|
| 5 | #include <OgreVector3.h>
|
---|
| 6 | #include "LightComposite.h"
|
---|
| 7 | #include <OgreOSMScene.h>
|
---|
| 8 | #include <OgreConfigFile.h>
|
---|
| 9 |
|
---|
| 10 | /** |
---|
| 11 | Callback handler to post-process created objects. |
---|
| 12 | */ |
---|
| 13 | class OSceneCallback : public OSMSceneCallbacks |
---|
| 14 | {
|
---|
| 15 | public:
|
---|
| 16 | // We override the OnCreate method for cameras (See IXMLSceneCallbacks class)
|
---|
| 17 | void OnCameraCreate(Ogre::Camera* pCamera, TiXmlElement* pCameraDesc)
|
---|
| 18 | {
|
---|
| 19 | // If a camera of name "FirstCamera" is loaded, it will be set as the default current
|
---|
| 20 | if(pCamera->getName() == "FirstCamera")
|
---|
| 21 | Ogre::Root::getSingleton().getAutoCreatedWindow()->getViewport(0)->setCamera(pCamera);
|
---|
| 22 | } |
---|
| 23 |
|
---|
| 24 |
|
---|
| 25 | }; |
---|
| 26 |
|
---|
| 27 | class SampleListener : public ExampleFrameListener
|
---|
| 28 | {
|
---|
| 29 | protected:
|
---|
| 30 | // References to the main character and the camera
|
---|
| 31 | Character *mChar;
|
---|
| 32 | ExtendedCamera *mExCamera;
|
---|
| 33 |
|
---|
| 34 | // Camera mode - Now supports 1st person, 3rd person (chasing) and 3rd person (fixed)
|
---|
| 35 | unsigned int mMode;
|
---|
| 36 | AnimationState* mCharacterAnimState;
|
---|
| 37 |
|
---|
| 38 | public:
|
---|
| 39 |
|
---|
| 40 | SampleListener(RenderWindow* win, Camera* cam)
|
---|
| 41 | : ExampleFrameListener(win, cam)
|
---|
| 42 | {
|
---|
| 43 | mChar = 0;
|
---|
| 44 | mExCamera = 0;
|
---|
| 45 | mMode = 0;
|
---|
| 46 | mMoveSpeed = 1000;
|
---|
| 47 | }
|
---|
| 48 |
|
---|
| 49 | void setCharacter (Character *character) {
|
---|
| 50 | mChar = character;
|
---|
| 51 | mCharacterAnimState = mChar->getEntity()->getAnimationState("Fly");
|
---|
| 52 | mCharacterAnimState->setEnabled(true);
|
---|
| 53 | mCharacterAnimState->setLoop(true);
|
---|
| 54 | }
|
---|
| 55 |
|
---|
| 56 | void setExtendedCamera (ExtendedCamera *cam) {
|
---|
| 57 | mExCamera = cam;
|
---|
| 58 | }
|
---|
| 59 |
|
---|
| 60 | bool frameStarted(const FrameEvent& evt)
|
---|
| 61 | {
|
---|
| 62 | mInputDevice->capture ();
|
---|
| 63 |
|
---|
| 64 | if (mChar) {
|
---|
| 65 | mChar->update (evt.timeSinceLastFrame, mInputDevice);
|
---|
| 66 |
|
---|
| 67 | if (mExCamera) {
|
---|
| 68 | mExCamera->update (evt.timeSinceLastFrame,
|
---|
| 69 | mChar->getCameraNode ()->getWorldPosition (),
|
---|
| 70 | mChar->getSightNode ()->getWorldPosition ());
|
---|
| 71 |
|
---|
| 72 | }
|
---|
| 73 | }
|
---|
| 74 |
|
---|
| 75 | mCharacterAnimState->addTime(evt.timeSinceLastFrame);
|
---|
| 76 |
|
---|
| 77 | // Exit if we press Esc
|
---|
| 78 | if (mInputDevice->isKeyDown (KC_ESCAPE))
|
---|
| 79 | return false;
|
---|
| 80 |
|
---|
| 81 | return true;
|
---|
| 82 | }
|
---|
| 83 | };
|
---|
| 84 |
|
---|
| 85 | class SkyPlaneListener : public ExampleFrameListener
|
---|
| 86 | {
|
---|
| 87 | protected:
|
---|
| 88 | // References to the main character and the camera
|
---|
| 89 | SceneManager *mSceneMgr;
|
---|
| 90 | Grass *mGrass;
|
---|
| 91 | LightComposite *mLightComposite;
|
---|
| 92 |
|
---|
| 93 | // Create the scene loader
|
---|
| 94 | OSMScene* mOScene;
|
---|
| 95 |
|
---|
| 96 | // Camera mode - Now supports 1st person, 3rd person (chasing) and 3rd person (fixed)
|
---|
| 97 | unsigned int mMode;
|
---|
| 98 | AnimationState *mAnimState;
|
---|
| 99 |
|
---|
| 100 | // Gametools 8/11/2005 - Isma
|
---|
| 101 | Real mAnimationSpeed;
|
---|
| 102 | AnimationState* mCharacterAnimState;
|
---|
| 103 | Real mFactorAnimationSpeed;
|
---|
| 104 | Real mAngle;
|
---|
| 105 | Real mStepAngle;
|
---|
| 106 |
|
---|
| 107 | unsigned int mFrame;
|
---|
| 108 | public:
|
---|
| 109 |
|
---|
| 110 |
|
---|
| 111 | void loadScene(Ogre::String filename) |
---|
| 112 | { |
---|
| 113 | // Create an oE_Loader Callback object to post-process created objects
|
---|
| 114 | OSceneCallback oeCallback;
|
---|
| 115 |
|
---|
| 116 | mOScene = new OSMScene(mSceneMgr, mWindow);
|
---|
| 117 |
|
---|
| 118 | // Initialises with the scene to be loaded and the callback if requiered
|
---|
| 119 | mOScene->initialise(filename.c_str(), &oeCallback);
|
---|
| 120 |
|
---|
| 121 | // create and setup the scene in the root node
|
---|
| 122 | mOScene->createScene(); |
---|
| 123 | }
|
---|
| 124 |
|
---|
| 125 | SkyPlaneListener(RenderWindow* win, Camera* cam, SceneManager *sceneMgr)
|
---|
| 126 | : ExampleFrameListener(win, cam)
|
---|
| 127 | {
|
---|
| 128 | //showDebugOverlay(false);
|
---|
| 129 | mSceneMgr = sceneMgr;
|
---|
| 130 | mMoveScale = 1;
|
---|
| 131 | mRotScale = 0.025;
|
---|
| 132 | mAngle = 0.0;
|
---|
| 133 | mStepAngle = 10.0;
|
---|
| 134 |
|
---|
| 135 | Ogre::ConfigFile config;
|
---|
| 136 | config.load("configScene.cfg");
|
---|
| 137 | Ogre::String moveSpeed = config.getSetting("MoveSpeed");
|
---|
| 138 | mMoveSpeed = Ogre::StringConverter::parseReal(moveSpeed);
|
---|
| 139 |
|
---|
| 140 | showDebugOverlay(false);
|
---|
| 141 | //createCameraAutoTracking();
|
---|
| 142 |
|
---|
| 143 | SceneNode *snButterfly = mSceneMgr->getSceneNode("butterflyNode");
|
---|
| 144 | Entity *entityButterfly = (Entity*) snButterfly->getAttachedObject(0);
|
---|
| 145 | mCharacterAnimState = entityButterfly->getAnimationState("Fly");
|
---|
| 146 | mCharacterAnimState->setEnabled(true);
|
---|
| 147 | mCharacterAnimState->setLoop(true);
|
---|
| 148 |
|
---|
| 149 | mFrame = 0;
|
---|
| 150 | mFactorAnimationSpeed = 2.0;
|
---|
| 151 | //mFactorAnimationSpeed = 0.1;
|
---|
| 152 | }
|
---|
| 153 |
|
---|
| 154 | void createCameraAutoTracking()
|
---|
| 155 | {
|
---|
| 156 | SceneNode *cameraSceneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("CamNode");
|
---|
| 157 | cameraSceneNode->attachObject(mCamera);
|
---|
| 158 | SceneNode *entitySceneNode = mSceneMgr->getSceneNode("butterflyNode");
|
---|
| 159 | SceneNode *targetNode = mSceneMgr->getSceneNode("targetNode");
|
---|
| 160 | //SceneNode *snLight = mSceneMgr->getSceneNode("lightNode");
|
---|
| 161 | cameraSceneNode->setAutoTracking(true,targetNode);
|
---|
| 162 | //cameraSceneNode->setAutoTracking(true,snLight);
|
---|
| 163 | cameraSceneNode->translate(Vector3(300.0,0.0,0.0));
|
---|
| 164 | // set up spline animation of node
|
---|
| 165 | Animation* anim = mSceneMgr->createAnimation("CameraTrack",10);
|
---|
| 166 | // Spline it for nice curves
|
---|
| 167 | anim->setInterpolationMode(Animation::IM_SPLINE);
|
---|
| 168 | // Create a track to animate the camera's node
|
---|
| 169 | NodeAnimationTrack* track = anim->createNodeTrack(0, cameraSceneNode);
|
---|
| 170 | //AnimationTrack* track = anim->createTrack(0, snLight);
|
---|
| 171 | // Setup keyframes
|
---|
| 172 | TransformKeyFrame* key = track->createNodeKeyFrame(0); // startposition
|
---|
| 173 | key->setTranslate(Vector3(0.0,0.0,300.0));
|
---|
| 174 | key = track->createNodeKeyFrame(2.5);
|
---|
| 175 | key->setTranslate(Vector3(-600.0,0.0,0.0));
|
---|
| 176 | key = track->createNodeKeyFrame(5);
|
---|
| 177 | key->setTranslate(Vector3(0.0,0.0,-600.0));
|
---|
| 178 | key = track->createNodeKeyFrame(7.5);
|
---|
| 179 | key->setTranslate(Vector3(600.0,0.0,0.0));
|
---|
| 180 | key = track->createNodeKeyFrame(10);
|
---|
| 181 | key->setTranslate(Vector3(0.0,0.0,300.0));
|
---|
| 182 |
|
---|
| 183 | // Create a new animation state to track this
|
---|
| 184 | mAnimState = mSceneMgr->createAnimationState("CameraTrack");
|
---|
| 185 | mAnimState->setEnabled(true);
|
---|
| 186 | mAnimState->setLoop(true);
|
---|
| 187 | }
|
---|
| 188 |
|
---|
| 189 | void setGrass(Grass *grass)
|
---|
| 190 | {
|
---|
| 191 | mGrass = grass;
|
---|
| 192 | }
|
---|
| 193 |
|
---|
| 194 | void setLightComposite(LightComposite *lightComposite)
|
---|
| 195 | {
|
---|
| 196 | loadScene("../../media/scene/scene.OSM");
|
---|
| 197 | mLightComposite = lightComposite;
|
---|
| 198 | }
|
---|
| 199 |
|
---|
| 200 | bool frameStarted(const FrameEvent& evt)
|
---|
| 201 | {
|
---|
| 202 | mLightComposite->update(mInputDevice);
|
---|
| 203 |
|
---|
| 204 | /*
|
---|
| 205 | mAnimState->addTime(evt.timeSinceLastFrame * 0.5 * mFactorAnimationSpeed);
|
---|
| 206 | //mGrass->waveGrass(evt.timeSinceLastFrame);
|
---|
| 207 | //SceneNode *snLight = mSceneMgr->getSceneNode("bulletaLanternNode");
|
---|
| 208 | SceneNode *snLight = mSceneMgr->getSceneNode("lightNode");
|
---|
| 209 |
|
---|
| 210 | if (mInputDevice->isKeyDown(KC_I))
|
---|
| 211 | {
|
---|
| 212 | snLight->setPosition(snLight->getPosition() + Vector3(0.0,0.0,10.0));
|
---|
| 213 | }
|
---|
| 214 | if (mInputDevice->isKeyDown(KC_K))
|
---|
| 215 | {
|
---|
| 216 | snLight->setPosition(snLight->getPosition() + Vector3(0.0,0.0,-10.0));
|
---|
| 217 | }
|
---|
| 218 | if (mInputDevice->isKeyDown(KC_J))
|
---|
| 219 | {
|
---|
| 220 | snLight->translate(-10.0,0.0,0.0);
|
---|
| 221 | }
|
---|
| 222 | if (mInputDevice->isKeyDown(KC_L))
|
---|
| 223 | {
|
---|
| 224 | snLight->translate(10.0,0.0,0.0);
|
---|
| 225 | }
|
---|
| 226 | if (mInputDevice->isKeyDown(KC_U))
|
---|
| 227 | {
|
---|
| 228 | snLight->translate(0.0,10.0,0.0);
|
---|
| 229 | }
|
---|
| 230 | if (mInputDevice->isKeyDown(KC_O))
|
---|
| 231 | {
|
---|
| 232 | snLight->translate(0.0,-10.0,0.0);
|
---|
| 233 | }
|
---|
| 234 |
|
---|
| 235 | if ((mAngle < -45) && (mStepAngle < 0))
|
---|
| 236 | {
|
---|
| 237 | mStepAngle = -mStepAngle;
|
---|
| 238 | }
|
---|
| 239 | if ((mAngle > 45) && (mStepAngle > 0))
|
---|
| 240 | {
|
---|
| 241 | mStepAngle = -mStepAngle;
|
---|
| 242 | }
|
---|
| 243 | mAngle = mAngle + mStepAngle;
|
---|
| 244 | snLight->rotate(Vector3::UNIT_X,Radian(Degree(mStepAngle)));
|
---|
| 245 | Real sunHeight;
|
---|
| 246 | Real sunShift;
|
---|
| 247 | SceneNode *snSun = mSceneMgr->getSceneNode("sunNode");
|
---|
| 248 | sunHeight = -mAngle * 20.0;
|
---|
| 249 | sunShift = -mAngle * 400.0;
|
---|
| 250 | snSun->setPosition(0.0,2000.0,0.0);
|
---|
| 251 | snSun->translate(0.0,sunHeight,sunShift);
|
---|
| 252 | //LogManager::getSingleton().logMessage("sunHeight:" + StringConverter::toString(sunHeight));
|
---|
| 253 |
|
---|
| 254 | //ColourValue newColour;
|
---|
| 255 | //Real intensity;
|
---|
| 256 | //intensity = 1.0 - (Math::Abs(mAngle) + 45.0) / 90.0;
|
---|
| 257 | //newColour.r = mLightComposite->getNightLight().r + (mLightComposite->getRangeLight().r * intensity);
|
---|
| 258 | //newColour.g = mLightComposite->getNightLight().g + (mLightComposite->getRangeLight().g * intensity);
|
---|
| 259 | //newColour.b = mLightComposite->getNightLight().b + (mLightComposite->getRangeLight().b * intensity);
|
---|
| 260 | //mLightComposite->setAmbientColour(newColour);
|
---|
| 261 |
|
---|
| 262 | Light *light = mLightComposite->getLight(0);
|
---|
| 263 |
|
---|
| 264 | //ColourValue newDiffuseColour;
|
---|
| 265 | //ColourValue diffuseDarkColour(0.0,0.0,0.0);
|
---|
| 266 | //ColourValue diffuseBrightColour(0.7,0.8,1.0);
|
---|
| 267 | //ColourValue diffuseRange = diffuseBrightColour - diffuseDarkColour;
|
---|
| 268 | //newDiffuseColour.r = diffuseDarkColour.r + (diffuseRange.r * intensity);
|
---|
| 269 | //newDiffuseColour.g = diffuseDarkColour.g + (diffuseRange.g * intensity);
|
---|
| 270 | //newDiffuseColour.b = diffuseDarkColour.b + (diffuseRange.b * intensity);
|
---|
| 271 | light->setDiffuseColour(ColourValue(1.0,1.0,1.0));
|
---|
| 272 | light->setSpecularColour(ColourValue(1.0,1.0,1.0));
|
---|
| 273 |
|
---|
| 274 | Vector3 dir=Vector3(snSun->getPosition());
|
---|
| 275 | dir.normalise();
|
---|
| 276 | light->setDirection(dir);
|
---|
| 277 | LogManager::getSingleton().logMessage("LightDirection:" + StringConverter::toString(light->getDirection()));
|
---|
| 278 |
|
---|
| 279 | GpuProgramParametersSharedPtr vertParams,fragParams;
|
---|
| 280 | MaterialPtr mat = MaterialManager::getSingleton().getByName("chestnutLeavesBillboardCloudGroupMaterial0");
|
---|
| 281 | vertParams = mat->getBestTechnique()->getPass(0)->getVertexProgramParameters();
|
---|
| 282 | //vertParams->setNamedConstant("lightDirection",dir);
|
---|
| 283 | fragParams = mat->getBestTechnique()->getPass(0)->getFragmentProgramParameters();
|
---|
| 284 | //fragParams->setNamedConstant("Kd",intensity);
|
---|
| 285 |
|
---|
| 286 | //ColourValue newShadowColour;
|
---|
| 287 | //ColourValue darkShadow(0.4,0.4,0.4);
|
---|
| 288 | //ColourValue lightShadow(0.8,0.8,0.8);
|
---|
| 289 | //ColourValue shadowRange = lightShadow - darkShadow;
|
---|
| 290 | //newShadowColour.r = darkShadow.r + (shadowRange.r * intensity);
|
---|
| 291 | //newShadowColour.g = darkShadow.g + (shadowRange.g * intensity);
|
---|
| 292 | //newShadowColour.b = darkShadow.b + (shadowRange.b * intensity);
|
---|
| 293 | //mLightComposite->setShadowColour(newShadowColour);
|
---|
| 294 |
|
---|
| 295 | //BillboardSet *bbs = mSceneMgr->getBillboardSet("lightbbs");
|
---|
| 296 | //bbs->getBillboard(0)->setColour(newColour);
|
---|
| 297 |
|
---|
| 298 | // Gametools 8/11/2005 - Isma
|
---|
| 299 | // When recording....
|
---|
| 300 | //mAnimationSpeed = Math::RangeRandom(0.25*evt.timeSinceLastFrame,0.5*evt.timeSinceLastFrame);
|
---|
| 301 | mAnimationSpeed = Math::RangeRandom(evt.timeSinceLastFrame*1000.0,evt.timeSinceLastFrame*1200.0);
|
---|
| 302 |
|
---|
| 303 | //mLightComposite->showDebugShadowMap(0);
|
---|
| 304 | */
|
---|
| 305 | SceneNode *butterflyNode = mSceneMgr->getSceneNode("butterflyNode");
|
---|
| 306 | Entity* butterfly = (Entity*)butterflyNode->getAttachedObject(0);
|
---|
| 307 | Ogre::AnimationState* characterAnimState = butterfly ->getAnimationState("Fly");
|
---|
| 308 | characterAnimState->setEnabled(true);
|
---|
| 309 | characterAnimState->setLoop(true);
|
---|
| 310 | characterAnimState->addTime(evt.timeSinceLastFrame);
|
---|
| 311 |
|
---|
| 312 |
|
---|
| 313 | static Ogre::Real currentTime = 0;
|
---|
| 314 |
|
---|
| 315 | // We update all loaded animations each frame
|
---|
| 316 | Ogre::SceneManager::AnimationIterator animationIt = mSceneMgr->getAnimationIterator();
|
---|
| 317 |
|
---|
| 318 | while(animationIt.hasMoreElements())
|
---|
| 319 | {
|
---|
| 320 | Ogre::Animation* animation = animationIt.getNext();
|
---|
| 321 |
|
---|
| 322 | const Ogre::Animation::NodeTrackList& trackList = animation->_getNodeTrackList();
|
---|
| 323 |
|
---|
| 324 | Ogre::Animation::NodeTrackList::const_iterator it = trackList.begin();
|
---|
| 325 | Ogre::Animation::NodeTrackList::const_iterator iend = trackList.end();
|
---|
| 326 |
|
---|
| 327 | for(; it != iend; ++it) {
|
---|
| 328 | const Ogre::NodeAnimationTrack* track = it->second;
|
---|
| 329 | track->getAssociatedNode()->resetToInitialState();
|
---|
| 330 | }
|
---|
| 331 |
|
---|
| 332 | currentTime += evt.timeSinceLastFrame;
|
---|
| 333 | animation->apply(currentTime);
|
---|
| 334 | }
|
---|
| 335 |
|
---|
| 336 | return ExampleFrameListener::frameStarted(evt);
|
---|
| 337 | }
|
---|
| 338 |
|
---|
| 339 | bool frameEnded(const FrameEvent& evt)
|
---|
| 340 | {
|
---|
| 341 | return ExampleFrameListener::frameEnded(evt);
|
---|
| 342 | }
|
---|
| 343 | };
|
---|
| 344 |
|
---|
| 345 | class SkyPlaneApplication : public ExampleApplication
|
---|
| 346 | {
|
---|
| 347 | public:
|
---|
| 348 | std::vector<Vector3> vVertexs;
|
---|
| 349 |
|
---|
| 350 | SkyPlaneApplication()
|
---|
| 351 | {
|
---|
| 352 | }
|
---|
| 353 |
|
---|
| 354 |
|
---|
| 355 |
|
---|
| 356 |
|
---|
| 357 | protected:
|
---|
| 358 |
|
---|
| 359 | // Gametools 8/11/2005
|
---|
| 360 | // Main character
|
---|
| 361 | OgreCharacter *ogre;
|
---|
| 362 | ExtendedCamera *exCamera;
|
---|
| 363 | Grass *mGrass;
|
---|
| 364 | LightComposite *mLightComposite;
|
---|
| 365 | Ogre::ConfigFile config;
|
---|
| 366 | Ogre::String mNumTrees;
|
---|
| 367 |
|
---|
| 368 | // Just override the mandatory create scene method
|
---|
| 369 | void createScene(void)
|
---|
| 370 | {
|
---|
| 371 |
|
---|
| 372 | config.load("configScene.cfg");
|
---|
| 373 | mNumTrees = config.getSetting("NumTrees");
|
---|
| 374 |
|
---|
| 375 | SceneManager *mSceneMgr = Root::getSingleton().getSceneManager("ExampleSMInstance");
|
---|
| 376 |
|
---|
| 377 | ColourValue nightLight(0.09,0.07,0.27);
|
---|
| 378 | ColourValue dayLight(1.0,1.0,1.0);
|
---|
| 379 | //ColourValue dayLight(0.85,0.88,0.96);
|
---|
| 380 | ColourValue shadow(0.6,0.6,0.6,1.0);
|
---|
| 381 | mLightComposite = new LightComposite();
|
---|
| 382 | //mLightComposite->setDayLight(nightLight);
|
---|
| 383 | mLightComposite->setDayLight(dayLight);
|
---|
| 384 | mLightComposite->setNightLight(nightLight);
|
---|
| 385 | mLightComposite->init(mSceneMgr,mCamera);
|
---|
| 386 | mLightComposite->setShadowTexturePixelFormat(PF_A8R8G8B8);
|
---|
| 387 | // ATI
|
---|
| 388 | // Seems that NVIDIA don't support at all 16 bits FLOAT RGBA textures...!
|
---|
| 389 | //mLightComposite->setShadowTexturePixelFormat(PF_FLOAT16_RGBA);
|
---|
| 390 | // NVIDIA
|
---|
| 391 | //mLightComposite->setShadowTexturePixelFormat(PF_FLOAT32_RGBA);
|
---|
| 392 | mLightComposite->setShadowTextureSize(1024);
|
---|
| 393 | //mLightComposite->setShadowTextureSize(2048);
|
---|
| 394 | mLightComposite->setShadowColour(shadow);
|
---|
| 395 | //mLightComposite->setAmbientColour(nightLight);
|
---|
| 396 | mLightComposite->setAmbientColour(dayLight);
|
---|
| 397 | mLightComposite->showShadowMapOverlay(false);
|
---|
| 398 | mLightComposite->createShadowMapOverlay(0);
|
---|
| 399 |
|
---|
| 400 | //mLightComposite->setDayLight(Vector3(1.0,1.0,1.0));
|
---|
| 401 | //mLightComposite->setNightLight(Vector3(0.0,0.0,0.0));
|
---|
| 402 |
|
---|
| 403 | //// Define the required skyplane
|
---|
| 404 | //Plane skyPlane;
|
---|
| 405 | //// 5000 world units from the camera
|
---|
| 406 | //skyPlane.d = 5000;
|
---|
| 407 | //// Above the camera, facing down
|
---|
| 408 | //skyPlane.normal = -Vector3::UNIT_Y;
|
---|
| 409 | //// Create the plane 10000 units wide, tile the texture 3 times
|
---|
| 410 | //mSceneMgr->setSkyPlane(true, skyPlane,"Examples/SpaceSkyPlaneNight",150000,500);
|
---|
| 411 |
|
---|
| 412 | mSceneMgr->setSkyBox(true, "CloudsSkyBox");
|
---|
| 413 |
|
---|
| 414 | // Floor plane
|
---|
| 415 | Plane plane;
|
---|
| 416 | plane.normal = Vector3::UNIT_Y;
|
---|
| 417 | plane.d = 100;
|
---|
| 418 | MeshManager::getSingleton().createPlane("Ground", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
|
---|
| 419 | 15000, 15000, 200, 200, true, 1, 60, 60, Vector3::UNIT_Z);
|
---|
| 420 | Entity* pPlaneEnt = mSceneMgr->createEntity("Ground", "Ground");
|
---|
| 421 | pPlaneEnt->setMaterialName("Examples/GrassFloor");
|
---|
| 422 | pPlaneEnt->setCastShadows(false);
|
---|
| 423 |
|
---|
| 424 | SceneNode *terrain = mSceneMgr->getRootSceneNode()->createChildSceneNode();
|
---|
| 425 | terrain->attachObject(pPlaneEnt);
|
---|
| 426 | terrain->setPosition(Vector3(0.0,0.0,0.0));
|
---|
| 427 |
|
---|
| 428 | SceneNode *forestNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("forestNode");
|
---|
| 429 |
|
---|
| 430 | for (unsigned int i = 0; i < Ogre::StringConverter::parseInt(mNumTrees); i++)
|
---|
| 431 | {
|
---|
| 432 | Real xPos = Math::RangeRandom(-5000.0, 5000.0);
|
---|
| 433 | Real zPos = Math::RangeRandom(-5000.0, 5000.0);
|
---|
| 434 |
|
---|
| 435 | if (i == 0)
|
---|
| 436 | {
|
---|
| 437 | xPos = 200;
|
---|
| 438 | zPos = 0;
|
---|
| 439 | }
|
---|
| 440 | else if (i == 1)
|
---|
| 441 | {
|
---|
| 442 | xPos = -200;
|
---|
| 443 | zPos = 0;
|
---|
| 444 | }
|
---|
| 445 |
|
---|
| 446 | if ((i == 0) || (i == 1) || !(((xPos < 1000) && (xPos > -2000)) && ((zPos < 1000) && (zPos > -2000))))
|
---|
| 447 | {
|
---|
| 448 | Entity *leaves = mSceneMgr->createEntity("leavesNode_" + StringConverter::toString(i),"chestnutLeavesVisibilityBillboardCloudGroupedIndirectTexturingLOD02.mesh");
|
---|
| 449 | leaves->setCastShadows(true);
|
---|
| 450 | SceneNode *leavesNode = forestNode->createChildSceneNode();
|
---|
| 451 | leavesNode->setPosition(xPos,120.0,zPos);
|
---|
| 452 | leavesNode->attachObject(leaves);
|
---|
| 453 | leavesNode->scale(4.0,4.0,4.0);
|
---|
| 454 | leaves->setNormaliseNormals(true);
|
---|
| 455 |
|
---|
| 456 | SceneNode *trunkNode;
|
---|
| 457 | Entity* trunk;
|
---|
| 458 | trunk = mSceneMgr->createEntity("head1_" + StringConverter::toString(i), "chestnutTrunkLevel2.mesh");
|
---|
| 459 | trunkNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("trunkNode_" + StringConverter::toString(i));
|
---|
| 460 | trunkNode->attachObject(trunk);
|
---|
| 461 | trunkNode->setPosition(xPos,120.0,zPos);
|
---|
| 462 | trunkNode->scale(4.0,4.0,4.0);
|
---|
| 463 | trunk->setNormaliseNormals(true);
|
---|
| 464 | }
|
---|
| 465 | }
|
---|
| 466 |
|
---|
| 467 | StaticGeometry* s = mSceneMgr->createStaticGeometry("forestStatic");
|
---|
| 468 | s->setRegionDimensions(Vector3(1000, 1000, 1000));
|
---|
| 469 | s->setOrigin(Vector3(-500, 500, 500));
|
---|
| 470 | s->addSceneNode(forestNode);
|
---|
| 471 | s->build();
|
---|
| 472 | forestNode->setVisible(false, true);
|
---|
| 473 | s->setCastShadows(true);
|
---|
| 474 | s->setVisible(true);
|
---|
| 475 |
|
---|
| 476 | // Point light, movable, reddish
|
---|
| 477 | //ColourValue mMinLightColour(0.7, 0.9, 0.4);
|
---|
| 478 | //ColourValue mMaxLightColour(0.8, 0.9, 0.4);
|
---|
| 479 | //Real mMinFlareSize = 400;
|
---|
| 480 | //Real mMaxFlareSize = 500;
|
---|
| 481 | //Light *mLight = mSceneMgr->createLight("Light2");
|
---|
| 482 | //mLight->setType(Light::LT_DIRECTIONAL);
|
---|
| 483 | //mLight->setDirection(Vector3(-0.5, -1.0, 0.5));
|
---|
| 484 | //mLight->setCastShadows(true);
|
---|
| 485 | //mLight->setDiffuseColour(1.0, 1.0, 1.0);
|
---|
| 486 | //mLight->setSpecularColour(1.0, 1.0, 1.0);
|
---|
| 487 |
|
---|
| 488 | //SceneNode *lightNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("lightNode");
|
---|
| 489 | //lightNode->attachObject(mLight);
|
---|
| 490 | //mLightComposite->addLight(mLight);
|
---|
| 491 | //mLightComposite->setCurrentLight(0);
|
---|
| 492 |
|
---|
| 493 | //SceneNode *sunNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("sunNode");
|
---|
| 494 | //BillboardSet* bbsSun = mSceneMgr->createBillboardSet("lightbbs", 1);
|
---|
| 495 | //bbsSun->setMaterialName("Examples/Flare");
|
---|
| 496 | //Billboard* bb = bbsSun->createBillboard(0,0,0,dayLight);
|
---|
| 497 | //bb->setDimensions(1500.0,1500.0);
|
---|
| 498 | //sunNode->attachObject(bbsSun);
|
---|
| 499 |
|
---|
| 500 | //lightNode->setDirection(Vector3::UNIT_Z);
|
---|
| 501 | //lightNode->setPosition(Vector3(186.65,561.971,216.371));
|
---|
| 502 |
|
---|
| 503 | Entity *entityRuinMesh = mSceneMgr->createEntity("ruin","ruin.mesh");
|
---|
| 504 | entityRuinMesh->setCastShadows(true);
|
---|
| 505 | SceneNode *snRuinMesh = mSceneMgr->getRootSceneNode()->createChildSceneNode();
|
---|
| 506 | snRuinMesh->attachObject(entityRuinMesh);
|
---|
| 507 | snRuinMesh->translate(0,-110.0,105.0+150.0);
|
---|
| 508 | snRuinMesh->scale(2.0,2.0,2.0);
|
---|
| 509 |
|
---|
| 510 | Entity *barrel = mSceneMgr->createEntity("barrel","barrel.mesh");
|
---|
| 511 | SceneNode *barrelNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("barrelNode");
|
---|
| 512 | barrelNode->attachObject(barrel);
|
---|
| 513 | barrelNode->translate(225.0,-20.0,185.0);
|
---|
| 514 | barrelNode->scale(0.75,0.75,0.75);
|
---|
| 515 | barrelNode->rotate(Vector3::UNIT_X,Radian(Degree(90.0)));
|
---|
| 516 | barrel->setCastShadows(true);
|
---|
| 517 | barrel->setNormaliseNormals(true);
|
---|
| 518 |
|
---|
| 519 | Entity *butterfly = mSceneMgr->createEntity("butterfly", "butterfly_bones_animated.mesh");
|
---|
| 520 | SceneNode *butterflyNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("butterflyNode");
|
---|
| 521 | butterflyNode->setPosition(Vector3(0.0,200.0,3000.0));
|
---|
| 522 | butterflyNode->attachObject(butterfly);
|
---|
| 523 | butterflyNode->setPosition(Vector3(-82.5,-45.1,35.0+150.0));
|
---|
| 524 | butterflyNode->scale(1.0/2.0,1.0/2.0,1.0/2.0);
|
---|
| 525 | butterfly->setCastShadows(true);
|
---|
| 526 | butterfly->setNormaliseNormals(true);
|
---|
| 527 |
|
---|
| 528 | SceneNode *farmNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("farmNode");
|
---|
| 529 | Entity *farm = mSceneMgr->createEntity("farm","farm.mesh");
|
---|
| 530 | farm->setCastShadows(true);
|
---|
| 531 | farm->setNormaliseNormals(true);
|
---|
| 532 |
|
---|
| 533 | Entity *cow = mSceneMgr->createEntity("cow","cow.mesh");
|
---|
| 534 | cow->setCastShadows(true);
|
---|
| 535 | farmNode->attachObject(farm);
|
---|
| 536 | SceneNode *cowNode = farmNode->createChildSceneNode("cowNode");
|
---|
| 537 | cowNode->attachObject(cow);
|
---|
| 538 | cowNode->translate(Vector3(-9.1,7,3.5));
|
---|
| 539 | farmNode->scale(Vector3(150,150,150));
|
---|
| 540 | Vector3 positionFarm = Vector3(0.0,200.0,-2200);
|
---|
| 541 | farmNode->setPosition(positionFarm);
|
---|
| 542 |
|
---|
| 543 | mCamera->setFOVy(Radian(Degree(60.0)));
|
---|
| 544 | mCamera->setPosition(Vector3(44.8621, -2.74644, 282.558));
|
---|
| 545 | mCamera->setOrientation(Quaternion(0.9296, 0.09672, 0.345428, -0.05414));
|
---|
| 546 |
|
---|
| 547 | mGrass = new Grass();
|
---|
| 548 | mGrass->setGrassShadowReceiver(false);
|
---|
| 549 | mGrass->setGrassScaleRandomRangeMax(Vector3(1.0,1.0,1.0));
|
---|
| 550 | mGrass->setGrassScaleRandomRangeMin(Vector3(1.0,0.75,1.0));
|
---|
| 551 | mGrass->setGrassHeight(50.0);
|
---|
| 552 | mGrass->setGrassWidth(40.0);
|
---|
| 553 | mGrass->setGrassFrequency(30);
|
---|
| 554 | mGrass->setGrassInterFrequency(20);
|
---|
| 555 | mGrass->setGrassMaterial("Examples/GrassBlades");
|
---|
| 556 | mGrass->setGrassMeshName("grassblades");
|
---|
| 557 | mGrass->setSceneManager(mSceneMgr);
|
---|
| 558 | mGrass->setGrassHeightPosition(-100);
|
---|
| 559 | mGrass->setGrassLandscapeSizeX(4000);
|
---|
| 560 | mGrass->setGrassLandscapeSizeZ(4000);
|
---|
| 561 | mGrass->initGrass();
|
---|
| 562 |
|
---|
| 563 | SceneNode *targetNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("targetNode");
|
---|
| 564 | targetNode->setPosition(Vector3(0.0,0.0,0.0));
|
---|
| 565 | SceneNode *targetNodeFrontTrees = mSceneMgr->getRootSceneNode()->createChildSceneNode("targetNodeFrontTrees");
|
---|
| 566 | targetNodeFrontTrees->setPosition(Vector3(0.0,0.0,200.0));
|
---|
| 567 |
|
---|
| 568 | ////// Main character
|
---|
| 569 | //OgreCharacter *ogre = new OgreCharacter ("Character", mSceneMgr);
|
---|
| 570 | //ExtendedCamera *exCamera = new ExtendedCamera ("ExtendedCamera", mSceneMgr, mCamera);
|
---|
| 571 |
|
---|
| 572 | //mFrameListener = new SampleListener (mWindow, mCamera);
|
---|
| 573 | //static_cast<SampleListener *>(mFrameListener)->setCharacter (ogre);
|
---|
| 574 | //static_cast<SampleListener *>(mFrameListener)->setExtendedCamera (exCamera);
|
---|
| 575 | }
|
---|
| 576 |
|
---|
| 577 | // // Create new frame listener
|
---|
| 578 | void createFrameListener(void)
|
---|
| 579 | {
|
---|
| 580 | mFrameListener= new SkyPlaneListener(mWindow, mCamera, mSceneMgr);
|
---|
| 581 | static_cast<SkyPlaneListener *>(mFrameListener)->setGrass(mGrass);
|
---|
| 582 |
|
---|
| 583 | static_cast<SkyPlaneListener *>(mFrameListener)->setLightComposite(mLightComposite);
|
---|
| 584 | mRoot->addFrameListener(mFrameListener);
|
---|
| 585 | }
|
---|
| 586 |
|
---|
| 587 | //void createFrameListener(void)
|
---|
| 588 | //{
|
---|
| 589 | // mRoot->addFrameListener(mFrameListener);
|
---|
| 590 | //}
|
---|
| 591 |
|
---|
| 592 | };
|
---|