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();
  }
Exemple #3
0
    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);
    }