Moon::Moon ( Ogre::SceneManager *sceneMgr, Ogre::SceneNode *caelumRootNode, const Ogre::String& moonTextureName, Ogre::Degree angularSize ): BaseSkyLight(sceneMgr, caelumRootNode), mAngularSize(angularSize) { // Clone moon face material. mMoonMaterial = Ogre::MaterialManager::getSingletonPtr()->getByName(MOON_MATERIAL_NAME); if (mMoonMaterial.isNull()) { CAELUM_THROW_UNSUPPORTED_EXCEPTION("Can't find moon material", "Moon"); } mMoonMaterial = mMoonMaterial->clone(mMoonMaterial->getName() + Ogre::StringConverter::toString((size_t)this)); mMoonMaterial->load(); if (mMoonMaterial->getBestTechnique() == NULL) { CAELUM_THROW_UNSUPPORTED_EXCEPTION("Moon material not supported: " + mMoonMaterial->getUnsupportedTechniquesExplanation(), "Moon"); } // Clone moon back material. mBackMaterial = Ogre::MaterialManager::getSingletonPtr()->getByName(MOON_BACKROUND_MATERIAL_NAME); if (mBackMaterial.isNull()) { CAELUM_THROW_UNSUPPORTED_EXCEPTION("Can't find moon background material", "Moon"); } mBackMaterial = mBackMaterial->clone(mBackMaterial->getName() + Ogre::StringConverter::toString((size_t)this)); mBackMaterial->load(); if (mBackMaterial->getBestTechnique() == NULL) { CAELUM_THROW_UNSUPPORTED_EXCEPTION("Moon background material not supported: " + mBackMaterial->getUnsupportedTechniquesExplanation(), "Moon"); } getFpParams()->setIgnoreMissingParams(true); setMoonTexture(moonTextureName); mMoonBB = sceneMgr->createBillboardSet( "Caelum/Moon/MoonBB/" + Ogre::StringConverter::toString((size_t)this), 1); mMoonBB->setMaterialName (mMoonMaterial->getName()); mMoonBB->setCastShadows (false); mMoonBB->setRenderQueueGroup (CAELUM_RENDER_QUEUE_MOON); mMoonBB->setDefaultDimensions (1.0f, 1.0f); mMoonBB->createBillboard (Ogre::Vector3::ZERO); mBackBB = sceneMgr->createBillboardSet( "Caelum/Moon/BackBB/" + Ogre::StringConverter::toString((size_t)this), 1); mBackBB->setMaterialName (mBackMaterial->getName()); mBackBB->setCastShadows (false); mBackBB->setRenderQueueGroup (CAELUM_RENDER_QUEUE_MOON_BACKGROUND); mBackBB->setDefaultDimensions (1.0f, 1.0f); mBackBB->createBillboard (Ogre::Vector3::ZERO); mNode->attachObject (mMoonBB); mNode->attachObject (mBackBB); }
Moon::Moon ( Ogre::SceneManager *sceneMgr, Ogre::SceneNode *caelumRootNode, const Ogre::String& moonTextureName, Ogre::Degree angularSize ): BaseSkyLight(sceneMgr, caelumRootNode), mAngularSize(angularSize) { Ogre::String uniqueSuffix = "/" + InternalUtilities::pointerToString(this); // Clone materials mMoonMaterial.reset(InternalUtilities::checkLoadMaterialClone(MOON_MATERIAL_NAME, MOON_MATERIAL_NAME + uniqueSuffix)); mBackMaterial.reset(InternalUtilities::checkLoadMaterialClone(MOON_BACKGROUND_MATERIAL_NAME, MOON_BACKGROUND_MATERIAL_NAME + uniqueSuffix)); assert (!mMoonMaterial.isNull ()); assert (mMoonMaterial->getTechnique (0)); assert (mMoonMaterial->getTechnique (0)->getPass (0)); assert (mMoonMaterial->getTechnique (0)->getPass( 0)->hasFragmentProgram ()); mParams.setup(mMoonMaterial->getBestTechnique ()->getPass (0)->getFragmentProgramParameters ()); setMoonTexture(moonTextureName); mMoonBB.reset(sceneMgr->createBillboardSet("Caelum/Moon/MoonBB" + uniqueSuffix, 1)); mMoonBB->setMaterialName (mMoonMaterial->getName()); mMoonBB->setCastShadows (false); mMoonBB->setRenderQueueGroup (CAELUM_RENDER_QUEUE_MOON); mMoonBB->setDefaultDimensions (1.0f, 1.0f); mMoonBB->createBillboard (Ogre::Vector3::ZERO); mBackBB.reset(sceneMgr->createBillboardSet("Caelum/Moon/BackBB" + uniqueSuffix, 1)); mBackBB->setMaterialName (mBackMaterial->getName()); mBackBB->setCastShadows (false); mBackBB->setRenderQueueGroup (CAELUM_RENDER_QUEUE_MOON_BACKGROUND); mBackBB->setDefaultDimensions (1.0f, 1.0f); mBackBB->createBillboard (Ogre::Vector3::ZERO); mNode->attachObject (mMoonBB.get()); mNode->attachObject (mBackBB.get()); }