21 #include "CaelumPrecompiled.h" 22 #include "CaelumSystem.h" 23 #include "CaelumExceptions.h" 24 #include "InternalUtilities.h" 25 #include "Astronomy.h" 26 #include "CaelumPlugin.h" 27 #include "FlatCloudLayer.h" 33 const String CaelumSystem::DEFAULT_SKY_GRADIENTS_IMAGE =
"EarthClearSky2.png";
34 const String CaelumSystem::DEFAULT_SUN_COLOURS_IMAGE =
"SunGradient.png";
36 CaelumSystem::CaelumSystem
39 Ogre::SceneManager *sceneMgr,
46 LogManager::getSingleton().logMessage (
"Caelum: Initialising Caelum system...");
50 Ogre::String uniqueId = Ogre::StringConverter::toString ((
size_t)
this);
51 if (!CaelumPlugin::getSingletonPtr ()) {
52 LogManager::getSingleton().logMessage (
"Caelum: Plugin not installed; installing now.");
54 CaelumPlugin::getSingletonPtr ()->install ();
55 CaelumPlugin::getSingletonPtr ()->initialise ();
58 mCaelumCameraNode.reset(mSceneMgr->getRootSceneNode ()->createChildSceneNode (
"Caelum/CameraNode/" + uniqueId));
59 mCaelumGroundNode.reset(mSceneMgr->getRootSceneNode ()->createChildSceneNode (
"Caelum/GroundNode/" + uniqueId));
65 Ogre::StringVector groups = ResourceGroupManager::getSingleton ().getResourceGroups ();
67 LogManager::getSingleton ().logMessage (
73 autoConfigure (componentsToCreate);
76 void CaelumSystem::destroySubcomponents (
bool destroyEverything)
81 setImageStarfield (0);
82 setPointStarfield (0);
84 setPrecipitationController (0);
88 mSkyGradientsImage.reset ();
89 mSunColoursImage.reset ();
92 if (destroyEverything) {
93 LogManager::getSingleton ().logMessage(
"Caelum: Delete UniversalClock");
94 mUniversalClock.reset ();
95 mCaelumCameraNode.reset ();
96 mCaelumGroundNode.reset ();
100 CaelumSystem::~CaelumSystem () {
101 destroySubcomponents (
true);
102 LogManager::getSingleton ().logMessage (
"Caelum: CaelumSystem destroyed.");
105 void CaelumSystem::clear()
108 destroySubcomponents (
false);
111 mAutoMoveCameraNode =
true;
112 mAutoNotifyCameraChanged =
true;
113 mAutoAttachViewportsToComponents =
true;
114 mAutoViewportBackground =
true;
117 setSkyGradientsImage(DEFAULT_SKY_GRADIENTS_IMAGE);
118 setSunColoursImage(DEFAULT_SUN_COLOURS_IMAGE);
121 setManageSceneFog (Ogre::FOG_EXP2);
122 setManageSceneFogStart(900);
123 setManageSceneFogEnd(1000);
124 mGlobalFogDensityMultiplier = 1;
125 mGlobalFogColourMultiplier = Ogre::ColourValue(1.0, 1.0, 1.0, 1.0);
126 mSceneFogDensityMultiplier = 1;
127 mSceneFogColourMultiplier = Ogre::ColourValue(0.7, 0.7, 0.7, 0.7);
128 mGroundFogDensityMultiplier = 1;
129 mGroundFogColourMultiplier = Ogre::ColourValue(1.0, 1.0, 1.0, 1.0);
132 setManageAmbientLight (
true);
133 setMinimumAmbientLight (Ogre::ColourValue (0.1, 0.1, 0.3));
134 mEnsureSingleLightSource =
false;
135 mEnsureSingleShadowSource =
false;
138 mObserverLatitude = Ogre::Degree(45);
139 mObserverLongitude = Ogre::Degree(0);
140 mUniversalClock->setJulianDay (Astronomy::J2000);
143 void CaelumSystem::autoConfigure
151 if (componentsToCreate == 0) {
155 LogManager::getSingleton ().logMessage (
"Caelum: Creating caelum sub-components.");
158 if (componentsToCreate & CAELUM_COMPONENT_SKY_DOME) {
160 this->setSkyDome (
new SkyDome (mSceneMgr, getCaelumCameraNode ()));
162 LogManager::getSingleton ().logMessage (
163 "Caelum: Failed to initialize skydome: " + ex.getFullDescription());
168 if (componentsToCreate & CAELUM_COMPONENT_SUN) {
170 this->setSun (
new SpriteSun (mSceneMgr, getCaelumCameraNode ()));
171 this->getSun ()->setAmbientMultiplier (Ogre::ColourValue (0.5, 0.5, 0.5));
172 this->getSun ()->setDiffuseMultiplier (Ogre::ColourValue (3, 3, 2.7));
173 this->getSun ()->setSpecularMultiplier (Ogre::ColourValue (5, 5, 5));
175 this->getSun ()->setAutoDisable (
true);
176 this->getSun ()->setAutoDisableThreshold (0.05);
178 LogManager::getSingleton ().logMessage (
179 "Caelum: Failed to initialize sun: " + ex.getFullDescription());
184 if (componentsToCreate & CAELUM_COMPONENT_MOON) {
186 this->setMoon (
new Moon (mSceneMgr, getCaelumCameraNode ()));
187 this->getMoon ()->setAutoDisable (
true);
188 this->getMoon ()->setAutoDisableThreshold (0.05);
190 LogManager::getSingleton ().logMessage (
191 "Caelum: Failed to initialize moon: " + ex.getFullDescription());
194 if (componentsToCreate & CAELUM_COMPONENT_IMAGE_STARFIELD) {
196 this->setImageStarfield (
new ImageStarfield (mSceneMgr, getCaelumCameraNode ()));
198 LogManager::getSingleton ().logMessage (
199 "Caelum: Failed to initialize the old image starfield: " + ex.getFullDescription());
202 if (componentsToCreate & CAELUM_COMPONENT_POINT_STARFIELD) {
204 this->setPointStarfield (
new PointStarfield (mSceneMgr, getCaelumCameraNode ()));
206 LogManager::getSingleton ().logMessage (
207 "Caelum: Failed to initialize starfield: " + ex.getFullDescription());
210 if (componentsToCreate & CAELUM_COMPONENT_GROUND_FOG) {
212 this->setGroundFog (
new GroundFog (mSceneMgr, getCaelumCameraNode ()));
214 LogManager::getSingleton ().logMessage (
215 "Caelum: Failed to initialize ground fog: " + ex.getFullDescription());
218 if (componentsToCreate & CAELUM_COMPONENT_CLOUDS) {
220 this->setCloudSystem (
new CloudSystem (mSceneMgr, getCaelumGroundNode ()));
221 getCloudSystem ()->createLayerAtHeight (3000);
222 getCloudSystem ()->getLayer (0)->setCloudCover (0.3);
224 LogManager::getSingleton ().logMessage (
225 "Caelum: Failed to initialize clouds: " + ex.getFullDescription());
228 if (componentsToCreate & CAELUM_COMPONENT_PRECIPITATION) {
232 LogManager::getSingleton ().logMessage (
233 "Caelum: Failed to initialize precipitation: " + ex.getFullDescription());
236 if (componentsToCreate & CAELUM_COMPONENT_SCREEN_SPACE_FOG) {
240 LogManager::getSingleton ().logMessage (
241 "Caelum: Failed to initialize precipitation: " + ex.getFullDescription());
245 LogManager::getSingleton ().logMessage (
"Caelum: DONE initializing");
248 void CaelumSystem::shutdown (
const bool cleanup) {
249 LogManager::getSingleton ().logMessage (
"Caelum: Shutting down Caelum system...");
251 destroySubcomponents (
true);
254 mOgreRoot->removeFrameListener (
this);
258 mOgreRoot->addFrameListener(
this);
263 void CaelumSystem::attachViewportImpl (Ogre::Viewport* vp)
265 LogManager::getSingleton().getDefaultLog ()->logMessage (
266 "CaelumSystem: Attached to" 267 " viewport " + StringConverter::toString ((
long)vp) +
268 " render target " + vp->getTarget ()->getName ());
269 if (getAutoAttachViewportsToComponents ()) {
270 if (getPrecipitationController ()) {
271 getPrecipitationController ()->createViewportInstance (vp);
273 if (getDepthComposer ()) {
274 getDepthComposer ()->createViewportInstance (vp);
279 void CaelumSystem::detachViewportImpl (Ogre::Viewport* vp)
281 LogManager::getSingleton().getDefaultLog ()->logMessage (
282 "CaelumSystem: Detached from " 283 " viewport " + StringConverter::toString ((
long)vp) +
284 " render target " + vp->getTarget ()->getName ());
285 if (getAutoAttachViewportsToComponents ()) {
286 if (getPrecipitationController ()) {
287 getPrecipitationController ()->destroyViewportInstance (vp);
289 if (getDepthComposer ()) {
290 getDepthComposer ()->destroyViewportInstance (vp);
295 void CaelumSystem::attachViewport (Ogre::Viewport* vp)
297 bool found = !mAttachedViewports.insert (vp).second;
299 attachViewportImpl (vp);
303 void CaelumSystem::detachViewport (Ogre::Viewport* vp)
305 std::set<Viewport*>::size_type erase_result = mAttachedViewports.erase(vp);
306 assert(erase_result == 0 || erase_result == 1);
307 bool found = erase_result == 1;
309 detachViewportImpl (vp);
313 void CaelumSystem::detachAllViewports ()
315 std::set<Viewport*>::const_iterator it = mAttachedViewports.begin(), end = mAttachedViewports.end();
316 for (; it != end; ++it) {
317 detachViewportImpl (*it);
319 mAttachedViewports.clear();
322 bool CaelumSystem::isViewportAttached (Ogre::Viewport* vp)
const {
323 return mAttachedViewports.find (vp) != mAttachedViewports.end();
326 void CaelumSystem::setSkyDome (
SkyDome *obj) {
327 mSkyDome.reset (obj);
334 void CaelumSystem::setMoon (
Moon* obj) {
339 mImageStarfield.reset (obj);
343 mPointStarfield.reset (obj);
347 mGroundFog.reset (obj);
351 mCloudSystem.reset (obj);
356 if (oldptr == newptr) {
360 if (getAutoAttachViewportsToComponents() && oldptr) {
361 std::for_each (mAttachedViewports.begin(), mAttachedViewports.end(),
362 std::bind1st (std::mem_fun (&PrecipitationController::destroyViewportInstance), oldptr));
365 if (getAutoAttachViewportsToComponents() && newptr) {
366 std::for_each (mAttachedViewports.begin(), mAttachedViewports.end(),
367 std::bind1st (std::mem_fun (&PrecipitationController::createViewportInstance), newptr));
369 mPrecipitationController.reset(newptr);
373 mDepthComposer.reset(ptr);
374 if (getAutoAttachViewportsToComponents() && getDepthComposer ()) {
376 mAttachedViewports.begin(), mAttachedViewports.end(),
378 std::mem_fun (&DepthComposer::createViewportInstance),
379 getDepthComposer ()));
383 void CaelumSystem::preViewportUpdate (
const Ogre::RenderTargetViewportEvent &e) {
384 Ogre::Viewport *viewport = e.source;
385 Ogre::Camera *camera = viewport->getCamera ();
387 if (getAutoViewportBackground ()) {
388 viewport->setBackgroundColour (Ogre::ColourValue::Black);
390 if (getAutoNotifyCameraChanged ()) {
391 this->notifyCameraChanged (camera);
395 void CaelumSystem::notifyCameraChanged(Ogre::Camera* cam)
398 if (getAutoMoveCameraNode ()) {
399 mCaelumCameraNode->setPosition (cam->getDerivedPosition());
400 mCaelumCameraNode->_update (
true,
true);
404 getSkyDome ()->notifyCameraChanged (cam);
408 getSun ()->notifyCameraChanged (cam);
412 getMoon ()->notifyCameraChanged (cam);
415 if (getImageStarfield ()) {
416 getImageStarfield ()->notifyCameraChanged (cam);
419 if (getPointStarfield ()) {
420 getPointStarfield ()->notifyCameraChanged (cam);
423 if (getGroundFog ()) {
424 getGroundFog ()->notifyCameraChanged (cam);
428 bool CaelumSystem::frameStarted (
const Ogre::FrameEvent &e) {
431 mOgreRoot->removeFrameListener (
this);
436 updateSubcomponents(e.timeSinceLastFrame);
441 void CaelumSystem::updateSubcomponents (Real timeSinceLastFrame)
449 mUniversalClock->update (timeSinceLastFrame);
452 LongReal julDay = mUniversalClock->getJulianDay ();
453 LongReal relDayTime = fmod(julDay, 1);
454 Real secondDiff = timeSinceLastFrame * mUniversalClock->getTimeScale ();
457 Ogre::Vector3 sunDir = getSunDirection(julDay);
458 Ogre::Vector3 moonDir = getMoonDirection(julDay);
459 Real moonPhase = getMoonPhase(julDay);
462 Real fogDensity = getFogDensity (relDayTime, sunDir);
463 Ogre::ColourValue fogColour = getFogColour (relDayTime, sunDir);
464 Ogre::ColourValue sunLightColour = getSunLightColour (relDayTime, sunDir);
465 Ogre::ColourValue sunSphereColour = getSunSphereColour (relDayTime, sunDir);
466 Ogre::ColourValue moonLightColour = getMoonLightColour (moonDir);
467 Ogre::ColourValue moonBodyColour = getMoonBodyColour (moonDir);
469 fogDensity *= mGlobalFogDensityMultiplier;
470 fogColour = fogColour * mGlobalFogColourMultiplier;
473 if (getImageStarfield ()) {
474 getImageStarfield ()->update (relDayTime);
475 getImageStarfield ()->setInclination (-getObserverLatitude ());
479 if (getPointStarfield ()) {
480 getPointStarfield ()->setObserverLatitude (getObserverLatitude ());
481 getPointStarfield ()->setObserverLongitude (getObserverLongitude ());
482 getPointStarfield ()->_update (relDayTime);
487 getSkyDome ()->setSunDirection (sunDir);
488 getSkyDome ()->setHazeColour (fogColour * mSceneFogColourMultiplier);
492 if (mManageSceneFogMode != Ogre::FOG_NONE) {
493 mSceneMgr->setFog (mManageSceneFogMode,
494 fogColour * mSceneFogColourMultiplier,
495 fogDensity * mSceneFogDensityMultiplier,
496 mManageSceneFogFromDistance,
497 mManageSceneFogToDistance);
501 if (getGroundFog ()) {
502 getGroundFog ()->setColour (fogColour * mGroundFogColourMultiplier);
503 getGroundFog ()->setDensity (fogDensity * mGroundFogDensityMultiplier);
507 if (getSun() && getMoon ()) {
508 Ogre::Real moonBrightness = moonLightColour.r + moonLightColour.g + moonLightColour.b + moonLightColour.a;
509 Ogre::Real sunBrightness = sunLightColour.r + sunLightColour.g + sunLightColour.b + sunLightColour.a;
510 bool sunBrighterThanMoon = (sunBrightness > moonBrightness);
512 if (getEnsureSingleLightSource ()) {
513 getMoon()->setForceDisable (sunBrighterThanMoon);
514 getSun()->setForceDisable (!sunBrighterThanMoon);
516 if (getEnsureSingleShadowSource ()) {
517 getMoon()->getMainLight ()->setCastShadows (!sunBrighterThanMoon);
518 getSun()->getMainLight ()->setCastShadows (sunBrighterThanMoon);
524 mSun->update (sunDir, sunLightColour, sunSphereColour);
533 mMoon->setMoonNorthPoleDirection(getEclipticNorthPoleDirection(julDay));
534 mMoon->setPhase (moonPhase);
538 if (getCloudSystem ()) {
539 getCloudSystem ()->update (
540 secondDiff, sunDir, sunLightColour, fogColour, sunSphereColour);
544 if (getPrecipitationController ()) {
545 getPrecipitationController ()->update (secondDiff, fogColour);
549 if (getDepthComposer ()) {
550 getDepthComposer ()->update ();
551 getDepthComposer ()->setSunDirection (sunDir);
552 getDepthComposer ()->setHazeColour (fogColour);
553 getDepthComposer ()->setGroundFogColour (fogColour * mGroundFogColourMultiplier);
554 getDepthComposer ()->setGroundFogDensity (fogDensity * mGroundFogDensityMultiplier);
558 if (getManageAmbientLight ()) {
559 Ogre::ColourValue ambient = Ogre::ColourValue::Black;
561 ambient += getMoon ()->getLightColour () * getMoon ()->getAmbientMultiplier ();
564 ambient += getSun ()->getLightColour () * getSun ()->getAmbientMultiplier ();
566 ambient.r = std::max(ambient.r, mMinimumAmbientLight.r);
567 ambient.g = std::max(ambient.g, mMinimumAmbientLight.g);
568 ambient.b = std::max(ambient.b, mMinimumAmbientLight.b);
569 ambient.a = std::max(ambient.a, mMinimumAmbientLight.a);
578 mSceneMgr->setAmbientLight (ambient);
582 void CaelumSystem::setManageSceneFog (Ogre::FogMode v) {
583 mManageSceneFogMode = v;
587 mSceneMgr->setFog (mManageSceneFogMode);
590 void CaelumSystem::disableFogMangement()
593 mManageSceneFogMode = Ogre::FOG_NONE;
596 Ogre::FogMode CaelumSystem::getManageSceneFog ()
const {
597 return mManageSceneFogMode;
600 void CaelumSystem::setManageSceneFogStart (Ogre::Real from) {
601 mManageSceneFogFromDistance = from;
604 Ogre::Real CaelumSystem::getManageSceneFogStart ()
const {
605 return mManageSceneFogFromDistance;
608 void CaelumSystem::setManageSceneFogEnd (Ogre::Real from) {
609 mManageSceneFogToDistance = from;
612 Ogre::Real CaelumSystem::getManageSceneFogEnd ()
const {
613 return mManageSceneFogToDistance;
616 void CaelumSystem::setSceneFogDensityMultiplier (Real value) {
617 mSceneFogDensityMultiplier = value;
620 Real CaelumSystem::getSceneFogDensityMultiplier ()
const {
621 return mSceneFogDensityMultiplier;
624 void CaelumSystem::setGroundFogDensityMultiplier (Real value) {
625 mGroundFogDensityMultiplier = value;
628 Real CaelumSystem::getGroundFogDensityMultiplier ()
const {
629 return mGroundFogDensityMultiplier;
632 void CaelumSystem::setGlobalFogDensityMultiplier (Real value) {
633 mGlobalFogDensityMultiplier = value;
636 Real CaelumSystem::getGlobalFogDensityMultiplier ()
const {
637 return mGlobalFogDensityMultiplier;
640 void CaelumSystem::setSkyGradientsImage (
const Ogre::String &filename) {
641 mSkyGradientsImage.reset(
new Ogre::Image ());
645 void CaelumSystem::setSunColoursImage (
const Ogre::String &filename) {
646 mSunColoursImage.reset(
new Ogre::Image ());
650 Ogre::ColourValue CaelumSystem::getFogColour (Real time,
const Ogre::Vector3 &sunDir) {
651 if (!mSkyGradientsImage.get()) {
652 return Ogre::ColourValue::Black;
655 Real elevation = sunDir.dotProduct (Ogre::Vector3::UNIT_Y) * 0.5 + 0.5;
656 Ogre::ColourValue col = InternalUtilities::getInterpolatedColour (elevation, 1, mSkyGradientsImage.get(),
false);
660 Real CaelumSystem::getFogDensity (Real time,
const Ogre::Vector3 &sunDir)
662 if (!mSkyGradientsImage.get()) {
666 Real elevation = sunDir.dotProduct (Ogre::Vector3::UNIT_Y) * 0.5 + 0.5;
667 Ogre::ColourValue col = InternalUtilities::getInterpolatedColour (elevation, 1, mSkyGradientsImage.get(),
false);
671 Ogre::ColourValue CaelumSystem::getSunSphereColour (Real time,
const Ogre::Vector3 &sunDir)
673 if (!mSunColoursImage.get()) {
674 return Ogre::ColourValue::White;
677 Real elevation = sunDir.dotProduct (Ogre::Vector3::UNIT_Y);
678 elevation = elevation * 2 + 0.4;
679 return InternalUtilities::getInterpolatedColour (elevation, 1, mSunColoursImage.get(),
false);
682 Ogre::ColourValue CaelumSystem::getSunLightColour (Real time,
const Ogre::Vector3 &sunDir)
684 if (!mSkyGradientsImage.get()) {
686 return Ogre::ColourValue::White;
688 Real elevation = sunDir.dotProduct (Ogre::Vector3::UNIT_Y) * 0.5 + 0.5;
692 Ogre::ColourValue col = InternalUtilities::getInterpolatedColour (elevation, elevation, mSkyGradientsImage.get(),
false);
693 Real val = (col.r + col.g + col.b) / 3;
694 col = Ogre::ColourValue(val, val, val, 1.0);
695 assert(Ogre::Math::RealEqual(col.a, 1));
699 Ogre::ColourValue CaelumSystem::getMoonBodyColour (
const Ogre::Vector3 &moonDir) {
700 return Ogre::ColourValue::White;
703 Ogre::ColourValue CaelumSystem::getMoonLightColour (
const Ogre::Vector3 &moonDir)
705 if (!mSkyGradientsImage.get()) {
706 return Ogre::ColourValue::Blue;
709 Real elevation = moonDir.dotProduct (Ogre::Vector3::UNIT_Y) * 0.5 + 0.5;
710 Ogre::ColourValue col = InternalUtilities::getInterpolatedColour (elevation, elevation, mSkyGradientsImage.get(),
false);
711 Real val = (col.r + col.g + col.b) / 3;
712 col = Ogre::ColourValue(val / 2.5f, val / 2.5f, val / 2.5f, 1.0);
713 assert(Ogre::Math::RealEqual(col.a, 1));
717 const Ogre::Vector3 CaelumSystem::makeDirection (
718 Ogre::Degree azimuth, Ogre::Degree altitude)
721 res.z = -Ogre::Math::Cos (azimuth) * Ogre::Math::Cos (altitude);
722 res.x = Ogre::Math::Sin (azimuth) * Ogre::Math::Cos (altitude);
723 res.y = -Ogre::Math::Sin (altitude);
727 const Ogre::Vector3 CaelumSystem::getSunDirection (LongReal jday)
729 Ogre::Degree azimuth, altitude;
733 Astronomy::getHorizontalSunPosition(jday,
734 getObserverLongitude(), getObserverLatitude(),
737 Ogre::Vector3 res = makeDirection(azimuth, altitude);
742 const Ogre::Vector3 CaelumSystem::getEclipticNorthPoleDirection (LongReal jday)
744 Ogre::Degree azimuth, altitude;
748 Astronomy::getHorizontalNorthEclipticPolePosition(jday,
749 getObserverLongitude (), getObserverLatitude (),
752 Ogre::Vector3 res = -makeDirection(azimuth, altitude);
757 const Ogre::Vector3 CaelumSystem::getMoonDirection (LongReal jday)
759 Ogre::Degree azimuth, altitude;
763 Astronomy::getHorizontalMoonPosition(jday,
764 getObserverLongitude (), getObserverLatitude (),
767 Ogre::Vector3 res = makeDirection(azimuth, altitude);
772 const Ogre::Real CaelumSystem::getMoonPhase (LongReal jday)
777 LongReal T = (jday - 2449143.3552943347L) / 29.53058867L;
783 void CaelumSystem::forceSubcomponentQueryFlags (uint flags)
785 if (getSkyDome ()) getSkyDome ()->setQueryFlags (flags);
786 if (getSun ()) getSun ()->setQueryFlags (flags);
787 if (getMoon ()) getMoon ()->setQueryFlags (flags);
788 if (getImageStarfield ()) getImageStarfield ()->setQueryFlags (flags);
789 if (getPointStarfield ()) getPointStarfield ()->setQueryFlags (flags);
790 if (getGroundFog ()) getGroundFog ()->setQueryFlags (flags);
791 if (getCloudSystem ()) getCloudSystem ()->forceLayerQueryFlags (flags);
794 void CaelumSystem::forceSubcomponentVisibilityFlags (uint flags)
796 if (getSkyDome ()) getSkyDome ()->setVisibilityFlags (flags);
797 if (getSun ()) getSun ()->setVisibilityFlags (flags);
798 if (getMoon ()) getMoon ()->setVisibilityFlags (flags);
799 if (getImageStarfield ()) getImageStarfield ()->setVisibilityFlags (flags);
800 if (getPointStarfield ()) getPointStarfield ()->setVisibilityFlags (flags);
801 if (getGroundFog ()) getGroundFog ()->setVisibilityFlags (flags);
802 if (getCloudSystem ()) getCloudSystem ()->forceLayerVisibilityFlags (flags);
Image-based starfield class.
Dummy class to increase floting point precission in a block This class will raise precission in the c...
Compositor-based precipitation controller.
Compositor-based precipitation controller.
Base class for sky lights (sun and moon).
Class representing the sun as billboard with texture on it.
Exponential ground fog system implementation.
The system's time model.
A cloud system is implemented by a number of cloud layers.
Implement an Ogre::Plugin for Caelum.
static const String RESOURCE_GROUP_NAME
Resource group name for caelum resources.
Exception class for unsupported features.
CaelumComponent
Flags enumeration for caelum components.
Class representing the moon.