17 #include <osg/LightSource>
18 #include <osg/Uniform>
20 #include <OpenThreads/Mutex>
25 #include <matrix/vlVector.h>
26 #include <matrix/referenceEllipsoid.h>
27 #include <matrix/geodeticCoord.h>
32 namespace SilverLining
44 class DtOsgFogComponent;
45 class DtLightManagerGroup;
62 void setGenerateCubeMaps(
bool enabled);
65 void setCubeMapGenerationDistanceThreshold(
double threshold);
69 unsigned int getCubeMap(
const osg::ref_ptr<osg::Camera>& camera)
const;
73 unsigned int getPrimaryCubeMap()
const;
78 void applyFog(osg::ref_ptr<osg::Camera> camera);
84 void setGeocentricMode(
bool mode);
87 bool geocentricMode()
const;
90 void setHiResCumulus(
bool enabled);
93 bool hiResCumulus()
const;
96 void setLensFlare(
bool enabled);
99 bool lensFlare()
const;
102 void setCrepuscularRays(
bool enabled);
105 bool crepuscularRays()
const;
108 void setForcedMoonPhase(
float phase);
111 void clearForcedMoonPhase();
114 bool moonPhaseIsForced()
const;
117 float forcedMoonPhase()
const;
122 void setForcedSunAndMoon(
double sunLat,
double sunLon,
double moonLat,
123 double moonLon,
bool horizonCoords=
true);
126 void clearForcedSunAndMoon();
129 bool sunAndMoonPositionIsForced()
const;
132 void getForcedSunAndMoonPosition(
double& sunLat,
double& sunLon,
133 double& moonLat,
double& moonLon,
bool& horizonCoords )
const;
137 void setLightPollution(
double Wm2);
140 double lightPollution()
const;
143 virtual void setDateAndTime(
unsigned short year,
unsigned char month,
144 unsigned char day,
unsigned char hour,
unsigned char minutes,
145 double seconds,
bool observeDaylightSavings );
148 virtual void updateTime();
152 virtual void setLocation(
const DtVector& location);
155 virtual void update(
const osg::Matrix& m);
158 virtual void update2D(
const osg::Matrix& m);
165 int cloudLayerCount()
const;
168 void removeCloudLayer(
int index);
172 void setFogColor(
const osg::Vec4f& rgbA);
175 void setFogHeight(
float height);
179 void setFogBlend(
const osg::Vec4f& rgbA,
float density);
182 void setFogOverride(osg::ref_ptr<osg::Camera> camera,
const osg::Vec4f& rgbA,
float density);
186 void setFogThresholdDistance(
float distance);
189 void setHorizonColor(
const osg::Vec4f& rgbA);
192 void setCubeMapDirty();
195 void setUse16BitEnviroMap(
bool flag);
198 bool getUse16BitEnviroMap();
201 void setUsingSensorFXShader(
bool flag);
204 bool getUsingSensorFXShader();
207 void clearHorizonColor();
210 void clearFogOverride(osg::ref_ptr<osg::Camera> camera);
212 void clearFogOverrideForAllCameras(
void);
216 virtual void setUseGlobalTimeZone(
bool b);
219 virtual bool useGlobalTimeZone()
const;
222 float getSunAlpha()
const;
225 void setDrawSunAndMoonIntoEnvMap(
bool draw);
228 bool drawSunAndMoonIntoEnvMap()
const;
231 float getSkyCoverage()
const;
234 void addCirroCumulus(
const DtVector& position,
const DtVector& bounds,
bool infinite,
bool relative);
235 void addCirrusFibratus(
const DtVector& position,
const DtVector& bounds,
bool infinite,
bool relative);
236 void addNimbostratus(
const DtVector& position,
const DtVector& bounds,
double density,
bool infinite,
bool relative);
237 void addCumulusMediocris(
const DtVector& position,
const DtVector& bounds,
double density,
bool infinite,
bool relative);
238 void addCumulusCongestus(
const DtVector& position,
const DtVector& bounds,
double density,
bool infinite,
bool relative);
239 void addCumulonumbusCappilatus(
const DtVector& position,
const DtVector& bounds,
double density,
bool relative);
240 void addStratocumulus(
const DtVector& position,
const DtVector& bounds,
double density,
bool infinite,
bool relative);
241 void setCloudLayerEnabled(
int index,
bool enabled);
242 void setCloudLayerPosition(
int index,
double xCoord,
double yCoord);
244 void setWind(
double directionDEN,
double minAltitude,
double maxAltitude,
double velocity);
245 void setAirTurbidity(
float turbidity );
246 void setVisibleDistance(
float distance );
247 float getVisibleDistance()
const;
249 void createAtmosphere();
250 void destroyAtmosphere();
255 void addRain(
float mmPerHour,
bool global);
256 void addSleet(
float mmPerHour,
bool global);
257 void addSnow(
float mmPerHour,
bool global,
bool wet);
258 void clearAllPrecipitation();
260 void realizeLayers();
262 SilverLining::Atmosphere* findAtmosphere();
267 void getGMTDateTime(
long &julianDate,
double &GMTTod);
270 osg::Node *getCloudsNode();
273 osg::Node *getSkyNode();
276 std::vector<unsigned int> getDefaultShaderVector();
279 void setSunMoonEnabled(
bool drawSunMoon);
282 bool getSunMoonEnabled();
285 void setStarsEnabled(
bool drawStars);
288 bool getStarsEnabled();
290 void enableLighting(osg::ref_ptr<osg::Camera> camera,
bool enable);
293 virtual void setEnableHDR(
bool enable);
296 virtual osg::LightSource *skyLight();
320 int CalculateZoneByLongitude(
double longitude);
321 void SetTimeAndLocation();
323 void addPrecipitationToClouds(
int type,
float mmPerHour);
325 void updatePrecipitation();
327 void setCloudVisibility();
330 virtual void traverse(osg::NodeVisitor& nv);
332 void forceResetLayers();
334 void generateCubeMap(
const osg::Matrix& viewMatrix );
337 virtual void slot_reloadShader();