00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #ifndef GROUNDFOG_H
00022 #define GROUNDFOG_H
00023 
00024 #include "CaelumPrerequisites.h"
00025 #include "CameraBoundElement.h"
00026 
00027 namespace Caelum
00028 {
00045     class CAELUM_EXPORT GroundFog: public CameraBoundElement
00046     {
00047     public:
00048         static const Ogre::String DEFAULT_PASS_NAME;
00049 
00052         GroundFog (Ogre::SceneManager *scene,
00053             Ogre::SceneNode *caelumRootNode,
00054             const Ogre::String &domeMaterialName = "CaelumGroundFogDome",
00055             const Ogre::String &domeEntityName = "CaelumGroundFogDome");
00056 
00059         virtual ~GroundFog ();
00060 
00063         typedef std::set<Ogre::Pass *> PassSet;
00064 
00069         PassSet& getPasses();
00070 
00075         const PassSet& getPasses () const;
00076 
00081         void findFogPassesByName (const Ogre::String& passName = DEFAULT_PASS_NAME);
00082 
00084         void setDensity (Ogre::Real density);
00085 
00087         Ogre::Real getDensity () const;
00088 
00090         void setColour (const Ogre::ColourValue &colour);
00091 
00093         const Ogre::ColourValue getColour () const;
00094 
00096         void setVerticalDecay (Ogre::Real verticalDecay);
00097 
00099         Ogre::Real getVerticalDecay () const;
00100 
00104         void setGroundLevel (Ogre::Real GroundLevela);
00105 
00108         Ogre::Real getGroundLevel () const;
00109 
00113         void forceUpdate ();
00114 
00115     private:
00117         Ogre::Real mDensity;
00118 
00120         Ogre::Real mVerticalDecay;
00121 
00123         Ogre::Real mGroundLevel;
00124 
00126         Ogre::ColourValue mFogColour;
00127 
00129         PassSet mPasses;
00130 
00132         Ogre::MaterialPtr mDomeMaterial;
00133 
00135         Ogre::SceneNode *mDomeNode;
00136 
00138         Ogre::Entity *mDomeEntity;
00139 
00141         Ogre::SceneManager* mScene;
00142 
00143         
00144         void updateSkyFogging();
00145 
00146     protected:
00148         virtual void setFarRadius (Ogre::Real radius);
00149 
00150     public:
00152         virtual void notifyCameraChanged (Ogre::Camera *cam);
00153 
00154         void setQueryFlags (uint flags) { mDomeEntity->setQueryFlags (flags); }
00155         uint getQueryFlags () const { return mDomeEntity->getQueryFlags (); }
00156         void setVisibilityFlags (uint flags) { mDomeEntity->setVisibilityFlags (flags); }
00157         uint getVisibilityFlags () const { return mDomeEntity->getVisibilityFlags (); }
00158     };
00159 }
00160 
00161 #endif //GROUNDFOG_H