void MoonManager::create() { if (mCreated) { return; } mMoonMaterial = static_cast<Ogre::MaterialPtr>( Ogre::MaterialManager::getSingleton().getByName("SkyX_Moon")); if (mMoonMaterial.isNull()) { SkyXLOG("Error while creating SkyX::MoonManager, material not found"); return; } mMoonSceneNode = mSkyX->getSceneManager()->getRootSceneNode()-> createChildSceneNode(); mMoonBillboard = mSkyX->getSceneManager()->createBillboardSet( "SkyXMoonBillboardSet", 1); mMoonBillboard->setMaterialName( mSkyX->getGPUManager()->getMoonMaterialName()); mMoonBillboard->setBillboardType(Ogre::BBT_ORIENTED_COMMON); mMoonBillboard->setRenderQueueGroup( mSkyX->getRenderQueueGroups().skydome+1); mMoonBillboard->setCastShadows(false); mMoonBillboard->createBillboard(Ogre::Vector3(0, 0, 0)); mMoonSceneNode->attachObject(mMoonBillboard); mCreated = true; }
void LightningManager::create() { remove(); mVolCloudsLightningMaterial = static_cast<Ogre::MaterialPtr>(Ogre::MaterialManager::getSingleton().getByName("SkyX_VolClouds_Lightning")); mLightningMaterial = static_cast<Ogre::MaterialPtr>(Ogre::MaterialManager::getSingleton().getByName("SkyX_Lightning")); if (mLightningMaterial.isNull()) { SkyXLOG("Error while creating SkyX::VClouds::LightningManager, material not found"); return; } if (mEnabled) { mVClouds->getGeometryManager()->_setMaterialName("SkyX_VolClouds_Lightning"); } else { mVClouds->getGeometryManager()->_setMaterialName("SkyX_VolClouds"); } mCreated = true; setLightningColor(mLightningColor); }
void VClouds::notifyCameraRender(Ogre::Camera* c, const Ogre::Real& timeSinceLastCameraFrame) { if (!mCreated) { return; } mCamera = c; // Check if the camera is registered bool isRegistered = false; for (Ogre::uint32 k = 0; k < mCamerasData.size(); k++) { if (mCamerasData.at(k).camera == c) { isRegistered = true; break; } } if (!isRegistered) { mCamerasData.push_back(CameraData(c)); SkyXLOG("VClouds warning: unregistered camera registered, " "manual unregistering is needed before camera destruction"); } mGeometryManager->updateGeometry(c, timeSinceLastCameraFrame); mLightningManager->updateMaterial(); }
void VClouds::create() { remove(); mVolCloudsMaterial = static_cast<Ogre::MaterialPtr>( Ogre::MaterialManager::getSingleton().getByName("SkyX_VolClouds")); mVolCloudsLightningMaterial = static_cast<Ogre::MaterialPtr>( Ogre::MaterialManager::getSingleton().getByName( "SkyX_VolClouds_Lightning")); if (mVolCloudsMaterial.isNull() || mVolCloudsLightningMaterial.isNull()) { SkyXLOG("Error while creating SkyX::VClouds::VClouds," "materials are not found"); return; } // Data manager mDataManager->create(128, 128, 20); // Geometry manager mGeometryManager->create(mGeometrySettings.Height, mGeometrySettings.Radius, mGeometrySettings.Alpha, mGeometrySettings.Beta, mGeometrySettings.NumberOfBlocks, mGeometrySettings.Na, mGeometrySettings.Nb, mGeometrySettings.Nc); mGeometryManager->getSceneNode()->setVisible(mVisible); mVolCloudsMaterial ->getTechnique(0)->getPass(0)->getVertexProgramParameters()-> setNamedConstant("uRadius", mGeometrySettings.Radius); mVolCloudsLightningMaterial-> getTechnique(0)->getPass(0)->getVertexProgramParameters()-> setNamedConstant("uRadius", mGeometrySettings.Radius); // Lightning manager mLightningManager->create(); mCreated = true; // Update material parameters setSunColor(mSunColor); setAmbientColor(mAmbientColor); setLightResponse(mLightResponse); setAmbientFactors(mAmbientFactors); // Set current wheater setWheater(mWheater.x, mWheater.y, mDelayedResponse); }
const Ogre::Vector3 ColorGradient::getColor(const Ogre::Real& p) const { if(mMalFormed) { SkyXLOG("Mal-formed ColorGradient"); return Ogre::Vector3(0, 0, 0); } if(CFrameVector.size() == 0) { return Ogre::Vector3(0, 0, 0); } else if(CFrameVector.size() == 1) { return CFrameVector.at(0).first; } std::pair<int, Ogre::Real> minBound, maxBound; // Min value minBound.first = 0; minBound.second = -1; for(unsigned int k = 0; k < CFrameVector.size(); k++) { if(CFrameVector.at(k).second < p && CFrameVector.at(k).second > minBound.second) { minBound.first = k; minBound.second = CFrameVector.at(k).second; } } // Max value maxBound.first = 0; maxBound.second = 2; for(unsigned int k = 0; k < CFrameVector.size(); k++) { if(CFrameVector.at(k).second > p && CFrameVector.at(k).second < maxBound.second) { maxBound.first = k; maxBound.second = CFrameVector.at(k).second; } } float range = maxBound.second - minBound.second, rangepoint = (p - minBound.second) / range; return CFrameVector.at(minBound.first).first * (1 - rangepoint) + CFrameVector.at(maxBound.first).first * rangepoint; }