21 #include "CaelumPrecompiled.h" 23 #include "CaelumExceptions.h" 24 #include "InternalUtilities.h" 28 const Ogre::String SkyDome::SPHERIC_DOME_NAME =
"CaelumSphericDome";
29 const Ogre::String SkyDome::SKY_DOME_MATERIAL_NAME =
"CaelumSkyDomeMaterial";
39 mShadersEnabled = mMaterial->getBestTechnique()->getPass(0)->isProgrammable();
45 sceneMgr->getRenderQueue()->getQueueGroup(CAELUM_RENDER_QUEUE_SKYDOME)->setShadowsEnabled(
false);
49 mEntity.
reset(sceneMgr->createEntity (
"Caelum/SkyDome/Entity" + uniqueSuffix, SPHERIC_DOME_NAME));
50 mEntity->setMaterialName (mMaterial->getName());
51 mEntity->setRenderQueueGroup (CAELUM_RENDER_QUEUE_SKYDOME);
52 mEntity->setCastShadows (
false);
54 mNode.
reset(caelumRootNode->createChildSceneNode (
"Caelum/SkyDome/Node" + uniqueSuffix));
55 mNode->attachObject (mEntity.get());
67 mNode->setScale (Ogre::Vector3::UNIT_SCALE * radius);
71 float elevation = sunDir.dotProduct (Ogre::Vector3::UNIT_Y);
72 elevation = elevation * 0.5 + 0.5;
73 Ogre::Pass* pass = mMaterial->getBestTechnique()->getPass(0);
74 if (mShadersEnabled) {
75 mParams.sunDirection.set(mParams.vpParams, sunDir);
76 mParams.offset.set(mParams.fpParams, elevation);
78 Ogre::TextureUnitState* gradientsTus = pass->getTextureUnitState(0);
79 gradientsTus->setTextureUScroll (elevation);
84 if (mShadersEnabled && mHazeEnabled) {
85 mParams.hazeColour.set(mParams.fpParams, hazeColour);
91 Ogre::TextureUnitState* gradientsTus =
92 mMaterial->getTechnique (0)->getPass (0)->getTextureUnitState(0);
94 gradientsTus->setTextureAddressingMode (Ogre::TextureUnitState::TAM_CLAMP);
97 #if OGRE_VERSION < ((1 << 16) | (3 << 8)) 98 gradientsTus->setTextureName (gradients, Ogre::TEX_TYPE_2D, -1,
true);
100 gradientsTus->setTextureName (gradients, Ogre::TEX_TYPE_2D);
101 gradientsTus->setIsAlpha (
true);
107 if (!mShadersEnabled) {
111 Ogre::TextureUnitState* atmosphereTus =
112 mMaterial->getTechnique (0)->getPass (0)->getTextureUnitState(1);
114 atmosphereTus->setTextureName (atmosphereDepth, Ogre::TEX_TYPE_1D);
115 atmosphereTus->setTextureAddressingMode (Ogre::TextureUnitState::TAM_CLAMP, Ogre::TextureUnitState::TAM_WRAP, Ogre::TextureUnitState::TAM_WRAP);
124 if (mHazeEnabled == value) {
127 mHazeEnabled = value;
129 if (!mShadersEnabled) {
133 Ogre::Pass *pass = mMaterial->getTechnique (0)->getPass (0);
135 pass->setFragmentProgram(
"CaelumSkyDomeFP");
137 pass->setFragmentProgram(
"CaelumSkyDomeFP_NoHaze");
140 pass->getVertexProgramParameters(),
141 pass->getFragmentProgramParameters());
144 void SkyDome::Params::setup(Ogre::GpuProgramParametersSharedPtr vpParams, Ogre::GpuProgramParametersSharedPtr fpParams)
146 this->fpParams = fpParams;
147 this->vpParams = vpParams;
148 sunDirection.bind(vpParams,
"sunDirection");
149 offset.bind(fpParams,
"offset");
150 hazeColour.bind(fpParams,
"hazeColour");
virtual void setFarRadius(Ogre::Real radius)
Handle far radius.
virtual void notifyCameraChanged(Ogre::Camera *cam)=0
Notify new camera conditions.
SkyDome(Ogre::SceneManager *sceneMgr, Ogre::SceneNode *caelumRootNode)
Constructor This will setup some nice defaults.
static const Ogre::String pointerToString(void *pointer)
Quickly format a pointer as a string; in hex.
static Ogre::MaterialPtr checkLoadMaterialClone(const Ogre::String &originalName, const Ogre::String &cloneName)
Creates a private clone of a material from a script.
bool getHazeEnabled() const
If skydome haze is enabled.
static void generateSphericDome(const Ogre::String &name, int segments, DomeType domeType)
Creates a longitude-latitude sky dome.
void setAtmosphereDepthImage(const Ogre::String &gradients)
Set the atmosphere depthh gradient image.
virtual void setFarRadius(Ogre::Real radius)
Abstract method to set the radius for this elements Derived classes should override this and resize t...
virtual ~SkyDome()
Destructor.
void setHazeColour(const Ogre::ColourValue &hazeColour)
Explicit haze colour.
void reset(const InnerPointerType &newInner=TraitsT::getNullValue())
Change the inner value.
void setSkyGradientsImage(const Ogre::String &gradients)
Set the sky color gradients image.
void setHazeEnabled(bool value)
Enable or disable skydome haze.
void setSunDirection(const Ogre::Vector3 &dir)
Sets the sun direction.
virtual void notifyCameraChanged(Ogre::Camera *cam)
Handle camera change.