void GraphicsMeteoManager::update(float dt) { if (graphicsSky->getSkyX() && graphicsWater->getHydraX()) { updateEnvironmentLighting(); updateShadowFarDistance(); } graphicsSky->update(dt); graphicsWater->update(dt); }
bool frameStarted(const FrameEvent &e) { mKeyboard->capture(); // Check camera height Ogre::RaySceneQuery *raySceneQuery = mSceneMgr-> createRayQuery(Ogre::Ray(mCamera->getPosition() + Ogre::Vector3(0,1000000,0), Vector3::NEGATIVE_UNIT_Y)); Ogre::RaySceneQueryResult& qryResult = raySceneQuery->execute(); Ogre::RaySceneQueryResult::iterator i = qryResult.begin(); if (i != qryResult.end() && i->worldFragment) { if (mCamera->getPosition().y < i->worldFragment->singleIntersection.y + 30) { mCamera-> setPosition(mCamera->getPosition().x, i->worldFragment->singleIntersection.y + 30, mCamera->getPosition().z); } } delete raySceneQuery; // Change SkyX atmosphere options if needed SkyX::AtmosphereManager::Options SkyXOptions = mSkyX->getAtmosphereManager()->getOptions(); // Time if (!mShowInformation) { mSkyX->setTimeMultiplier(mTimeMultiplier); } else { mSkyX->setTimeMultiplier(0.0f); } if (mKeyboard->isKeyDown(OIS::KC_1) && !(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) mSkyX->setTimeMultiplier(1.0f); if (mKeyboard->isKeyDown(OIS::KC_1) && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) mSkyX->setTimeMultiplier(-1.0f); // Rayleigh multiplier if (mKeyboard->isKeyDown(OIS::KC_2) && !(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.RayleighMultiplier += e.timeSinceLastFrame*0.025f; if (mKeyboard->isKeyDown(OIS::KC_2) && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.RayleighMultiplier -= e.timeSinceLastFrame*0.025f; // Mie multiplier if (mKeyboard->isKeyDown(OIS::KC_3) && !(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.MieMultiplier += e.timeSinceLastFrame*0.025f; if (mKeyboard->isKeyDown(OIS::KC_3) && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.MieMultiplier -= e.timeSinceLastFrame*0.025f; // Exposure if (mKeyboard->isKeyDown(OIS::KC_4) && !(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.Exposure += e.timeSinceLastFrame*0.5f; if (mKeyboard->isKeyDown(OIS::KC_4) && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.Exposure -= e.timeSinceLastFrame*0.5f; // Inner radius if (mKeyboard->isKeyDown(OIS::KC_5) && !(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.InnerRadius += e.timeSinceLastFrame*0.25f; if (mKeyboard->isKeyDown(OIS::KC_5) && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.InnerRadius -= e.timeSinceLastFrame*0.25f; // Outer radius if (mKeyboard->isKeyDown(OIS::KC_6) && !(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.OuterRadius += e.timeSinceLastFrame*0.25f; if (mKeyboard->isKeyDown(OIS::KC_6) && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.OuterRadius -= e.timeSinceLastFrame*0.25f; // Number of samples if (mKeyboard->isKeyDown(OIS::KC_7) && mKeyBuffer < 0 &&!(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) { SkyXOptions.NumberOfSamples ++; mKeyBuffer = 0.25f; } if (mKeyboard->isKeyDown(OIS::KC_7) && mKeyBuffer < 0 && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) { SkyXOptions.NumberOfSamples --; mKeyBuffer = 0.25f; } // Height position if (mKeyboard->isKeyDown(OIS::KC_8) && !(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.HeightPosition += e.timeSinceLastFrame*0.05f; if (mKeyboard->isKeyDown(OIS::KC_8) && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) SkyXOptions.HeightPosition -= e.timeSinceLastFrame*0.05f; // Time multiplier if (mKeyboard->isKeyDown(OIS::KC_9) && !(mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) mTimeMultiplier += e.timeSinceLastFrame*0.15f; if (mKeyboard->isKeyDown(OIS::KC_9) && (mKeyboard->isKeyDown(OIS::KC_LSHIFT) || mKeyboard->isKeyDown(OIS::KC_RSHIFT))) mTimeMultiplier -= e.timeSinceLastFrame*0.15f; mSkyX->getAtmosphereManager()->setOptions(SkyXOptions); // Show/Hide information if (mKeyboard->isKeyDown(OIS::KC_F1) && mKeyBuffer < 0) { mShowInformation = !mShowInformation; mKeyBuffer = 0.25f; } // Post-proccesing effects if (mKeyboard->isKeyDown(OIS::KC_F2) && mKeyBuffer < 0) { mBloomCompositor = !mBloomCompositor; Ogre::CompositorManager::getSingleton(). setCompositorEnabled(mWindow->getViewport(0), "Bloom", mBloomCompositor); mKeyBuffer = 0.25f; } // Shadows if (mKeyboard->isKeyDown(OIS::KC_F3) && mKeyBuffer < 0) { mShadowMode++; if (mShadowMode > 2) { mShadowMode = 0; } setShadowMode(mSceneMgr, static_cast<ShadowMode>(mShadowMode)); mKeyBuffer = 0.25f; } mTextArea->setCaption(buildConfigString(SkyXOptions)); // Update environment lighting updateEnvironmentLighting(); // Update shadow far distance updateShadowFarDistance(); // Update Hydrax mHydrax->update(e.timeSinceLastFrame); // Update SkyX mSkyX->update(e.timeSinceLastFrame); mKeyBuffer -= e.timeSinceLastFrame; return true; }