Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    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());
    }