void GodRaysManager::create(const HydraxComponent& HC) { if (mCreated) { remove(); } // Create our perlin noise module mPerlin = new Noise::Perlin(Noise::Perlin::Options(8, 0.085f, 0.49, 2, 0.672)); mPerlin->create(); // Initial values, some of them need to be updated each frame mProjectorCamera = mHydrax->getSceneManager()->createCamera(_def_GodRays_Projector_Camera_Name); mProjectorCamera->setProjectionType(Ogre::PT_PERSPECTIVE); // Not forget to set near+far distance in materials mProjectorCamera->setNearClipDistance(8); mProjectorCamera->setFarClipDistance(40); mProjectorCamera->setAspectRatio(1); mProjectorCamera->setFOVy(Ogre::Degree(45.0f)); mProjectorCamera->setVisible(false); mProjectorSN = mHydrax->getSceneManager()->getRootSceneNode()->createChildSceneNode(); mProjectorSN->setPosition(0,0,0); mProjectorSN->attachObject(mProjectorCamera); mProjectorSN->setDirection(0, -1, 0); if (mObjectsIntersections) { _createDepthRTT(); } _createMaterials(HC); std::vector<Ogre::Technique*>::iterator TechIt; for(TechIt = mDepthTechniques.begin(); TechIt != mDepthTechniques.end(); TechIt++) { if (!(*TechIt)) { mDepthTechniques.erase(TechIt); // TechIt-- ? continue; } addDepthTechnique((*TechIt), false); } _createGodRays(); mCreated = true; }
void GodRaysManager::setNumberOfRays(const int& NumberOfRays) { mNumberOfRays = NumberOfRays; if(!mCreated) { return; } mProjectorSN->detachObject(mManualGodRays); mHydrax->getSceneManager()->destroyManualObject(mManualGodRays); mManualGodRays = static_cast<Ogre::ManualObject*>(NULL); _createGodRays(); }
void UnderWaterGodRay::_init() { mPerlin = new Perlin(Perlin::Options(8, 0.085f, 0.49f, 2, 0.672f)); _createGodRays(); VideoBufferManager * vm = VideoBufferManager::Instance(); mTexture = vm->CreateTextureRT("Core_UnderWaterGodRayRT", 512, 512, FMT_R16F); mRenderTarget = vm->CreateRenderTarget(mTexture); mTech_Ray = Environment::Instance()->GetShaderLib()->GetTechnique("UnderWaterGodRay"); mTech_Blend = Environment::Instance()->GetShaderLib()->GetTechnique("UnderWaterGodRayBlend"); d_assert (mTech_Ray != NULL && mTech_Blend != NULL); }