VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtSilverliningGroup.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
15 
16 #include <osg/Camera>
17 #include <osg/Group>
18 #include <osg/Geode>
19 #include <osg/LightSource>
20 #include <osg/Uniform>
21 #include <osg/observer_ptr>
22 
23 #include <OpenThreads/Mutex>
24 
25 #include <matrix/vlVector.h>
26 #include <matrix/referenceEllipsoid.h>
27 #include <matrix/geodeticCoord.h>
28 
31 
32 #include <vrvCore/DtCloudLayer.h>
34 
35 #include <boost/unordered_map.hpp>
36 #include <list>
37 #include <map>
38 
39 namespace SilverLining
40 {
41  class Atmosphere;
42  class CloudLayer;
43  class LocalTime;
44  class Location;
45 }
46 
47 namespace makVrv
48 {
49  class DtChannel;
50  class DtDe;
51  class DtOsgFogComponent;
52  class DtLightManagerGroup;
53  class DtOsgSkyObject;
54  class DtCloudLayerManager;
55  class DtWindow;
56 
57  struct DtCrepuscularRaysModifiers;
58  struct DtCrepuscularRaysParameters;
59 
63  class DT_DLL_VRVOSG DtSilverliningGroup : public osg::Group
64  {
65  public:
66 
69 
71  virtual ~DtSilverliningGroup();
72 
73  DtDe& getDe() { return myDe; }
74 
76  virtual void setGenerateCubeMaps(bool enabled);
77 
79  void setCubeMapGenerationDistanceThreshold(double threshold);
80 
83  virtual unsigned int getCubeMap(const osg::ref_ptr<const osg::Camera>& camera) const;
84 
87  virtual unsigned int getPrimaryCubeMap() const;
88 
89  virtual void installIntoChannel(DtChannel*);
90 
92  virtual void applyFog(osg::ref_ptr<const osg::Camera> camera);
93 
95  virtual void deleteGeods();
96 
98  virtual void setGeocentricMode(bool mode);
99 
101  virtual bool geocentricMode() const;
102 
104  virtual void setHiResCumulus(bool enabled);
105 
107  virtual bool hiResCumulus() const;
108 
110  virtual void setLensFlare(bool enabled);
111 
113  virtual bool lensFlare() const;
114 
116  virtual void setCrepuscularRays(bool enabled);
117 
119  virtual bool crepuscularRays() const;
120 
122  virtual void setForcedMoonPhase(float phase);
123 
125  virtual void clearForcedMoonPhase();
126 
128  virtual bool moonPhaseIsForced() const;
129 
131  virtual float forcedMoonPhase() const;
132 
136  virtual void setForcedSunAndMoon(double sunLat, double sunLon, double moonLat,
137  double moonLon, bool horizonCoords = true);
138 
139  // Clear any forced sun & moon position set with ForceSunAndMoon()
140  virtual void clearForcedSunAndMoon();
141 
143  virtual bool sunAndMoonPositionIsForced() const;
144 
146  virtual void getForcedSunAndMoonPosition(double& sunLat, double& sunLon,
147  double& moonLat, double& moonLon, bool& horizonCoords) const;
148 
151  virtual void setLightPollution(double Wm2);
152 
154  virtual double lightPollution() const;
155 
157  virtual void setDateAndTime(unsigned short year, unsigned char month,
158  unsigned char day, unsigned char hour, unsigned char minutes,
159  double seconds, bool observeDaylightSavings);
160 
162  virtual void updateTime();
163 
166  virtual void setLocation(const DtVector& location);
167 
169  virtual void update(const osg::Matrix& m);
170 
172  virtual void update2D(const osg::Matrix& m);
173 
176  virtual void updateConditions(DtOsgSkyObject* skyObject);
177 
179  virtual void removeCloudLayer(DtCloudLayerId layerId);
180 
182  virtual void removeCloudLayers();
183 
186  virtual void setFogColor(const osg::Vec4f& rgbA);
187 
189  virtual void setFogHeight(float height);
190 
193  virtual void setFogBlend(const osg::Vec4f& rgbA, float density);
194 
196  virtual void setFogOverride(osg::ref_ptr<const osg::Camera> camera, const osg::Vec4f& rgbA, float density);
197 
200  virtual void setFogThresholdDistance(float distance);
201 
203  virtual void setHorizonColor(const osg::Vec4f& rgbA);
204 
206  virtual void setCubeMapDirty();
207 
209  virtual void setUse16BitEnviroMap(bool flag);
210 
212  virtual bool getUse16BitEnviroMap();
213 
215  virtual void setUsingSensorFXShader(bool flag);
216 
218  virtual bool getUsingSensorFXShader();
219 
221  virtual void clearHorizonColor();
222 
224  virtual void clearFogOverride(osg::ref_ptr<const osg::Camera> camera);
225 
226  virtual void clearFogOverrideForAllCameras(void);
227 
231  void setUseGlobalTimeZone(bool b);
232 
234  virtual bool useGlobalTimeZone() const;
235 
237  virtual float getSunAlpha() const;
238 
240  virtual void setDrawSunAndMoonIntoEnvMap(bool draw);
241 
243  virtual bool drawSunAndMoonIntoEnvMap() const;
244 
246  virtual float getSkyCoverage() const;
247 
249  virtual void addCirroCumulus(DtCloudLayerId layerId, const DtVector& position, float orientation,
250  const DtVector& bounds, bool infinite, bool relative, bool fadeAtAltitude, bool altitudeIsHAT);
251 
252  virtual void addCirrusFibratus(DtCloudLayerId layerId, const DtVector& position, float orientation,
253  const DtVector& bounds, bool infinite, bool relative, bool fadeAtAltitude, bool altitudeIsHAT);
254 
255  virtual void addNimbostratus(DtCloudLayerId layerId, const DtVector& position, float orientation,
256  const DtVector& bounds, double density, bool infinite, bool relative, bool fadeAtAltitude, bool altitudeIsHAT);
257 
258  virtual void addCumulusMediocris(DtCloudLayerId layerId, const DtVector& position, float orientation,
259  float cornerRadius, const DtVector& bounds, double density, bool infinite, bool relative, bool fadeAtAltitude,
260  bool altitudeIsHAT);
261 
262  virtual void addCumulusCongestus(DtCloudLayerId layerId, const DtVector& position, float orientation,
263  float cornerRadius, const DtVector& bounds, double density, bool infinite, bool relative, bool fadeAtAltitude,
264  bool altitudeIsHAT);
265 
266  virtual void addCumulonimbusCappilatus(DtCloudLayerId layerId, const DtVector& position, float orientation,
267  const DtVector& bounds, double density, bool relative, bool fadeAtAltitude, bool altitudeIsHAT);
268 
269  virtual void addStratocumulus(DtCloudLayerId layerId, const DtVector& position, float orientation,
270  const DtVector& bounds, double density, bool infinite, bool relative, bool fadeAtAltitude, bool altitudeIsHAT);
271 
272  virtual void addGroundFog(DtCloudLayerId layerId, const DtVector& position, float orientation, float cornerRadius,
273  const DtVector& bounds, double density, bool infinite, bool relative, bool fadeAtAltitude, bool altitudeIsHAT);
274 
275  virtual void setCloudLayerEnabled(DtCloudLayerId layerId, bool enabled);
276  virtual void setCloudLayerPositionAndOrientation(DtCloudLayerId layerId, const DtVector& position, float orientation);
277 
278  virtual void setWind(double directionDEN, double minAltitude, double maxAltitude, double velocity);
279  virtual void setAirTurbidity(float turbidity);
280  virtual void setVisibleDistance(float distance);
281  virtual float getVisibleDistance() const;
282 
283  virtual void createAtmosphere();
284  virtual void destroyAtmosphere();
285 
286  // if create atmosphere failed this is set to true.
287  virtual bool getFailedInit() { return myFailedInit; }
288 
289  virtual void addRain(float mmPerHour, bool global);
290  virtual void addSleet(float mmPerHour, bool global);
291  virtual void addSnow(float mmPerHour, bool global, bool wet);
292  virtual void clearAllPrecipitation();
293 
294  virtual void realizeLayers();
295 
296  virtual SilverLining::Atmosphere* findAtmosphere();
297  virtual const SilverLining::Atmosphere* findAtmosphere() const;
298 
299  DtDe& getDtDe();
300 
301  //get the Julian Date and Time in the GMT time zone
302  virtual void getGMTDateTime(long &julianDate, double &GMTTod);
303 
304  //return the node that is the parent to the clouds
305  virtual osg::Node *getCloudsNode();
306 
307  //return the node that is the parent to the sky
308  virtual osg::Node *getSkyNode();
309 
310  //set the flag for drawing the silverlining sun/moon
311  virtual void setSunMoonEnabled(bool drawSunMoon);
312 
313  //get the flag for drawing the silverlining sun/moon
314  virtual bool getSunMoonEnabled();
315 
316  //set the flag for drawing the silverlining stars
317  virtual void setStarsEnabled(bool drawStars);
318 
319  //get the flag for drawing the silverlining stars
320  virtual bool getStarsEnabled();
321 
322  virtual void enableLighting(osg::ref_ptr<osg::Camera> camera, bool enable);
323 
326  void setEnableHDR(bool enable);
327 
329  virtual osg::LightSource *skyLight();
330 
331  virtual const CloudLayerMap& cloudLayerMap() const;
332 
333  virtual osg::Vec3f & getLastUpVector() { return myLastUpVector; }
334 
336  virtual void fillCrepuscularRaysParameters(DtCrepuscularRaysParameters& params) const;
337 
339  virtual void updateImGuiAndGetModifiersOffOfImgGui(DtCrepuscularRaysModifiers& modifiers
340  , float r, float g, float b
341  , float sunPosX, float sunPosY, float sunPosZ
342  , float exposure) const;
343 
346  virtual void slot_windowToBeDestroyed(DtWindow* window);
347 
352  virtual void addGraphicsContextIfNecessary(osg::GraphicsContext* key);
353 
354  protected:
355 
357  virtual void addLayer(DtCloudLayerId layerId, const DtSilverLiningCloudLayer& layer);
358 
359  virtual void destroyLayer(const DtSilverLiningCloudLayer& layer);
360 
361  virtual int CalculateZoneByLongitude(double longitude);
363  void SetTimeAndLocation();
364 
365  virtual void addPrecipitationToClouds(int type, float mmPerHour);
366 
367  virtual void updatePrecipitation();
368 
369  virtual void setCloudVisibility();
370 
372  virtual void traverse(osg::NodeVisitor& nv);
373  virtual void resetLayers();
374  virtual void forceResetLayers();
375 
376  virtual void generateCubeMap(const osg::Matrix& viewMatrix);
377 
379  virtual void slot_reloadShader();
380 
381  //Setup the light override IMGUI sliders which allow for debug overriding of light position
382  virtual void updateLightOverrideGui(float x, float y, float z);
383 
384 
385  protected:
386 
387  typedef std::vector<DtSilverLiningCloudLayer> CloudLayerList;
388 
391 
392  DtReferenceEllipsoid myRefEllip;
393  DtGeodeticCoord myGeod;
394 
396  SilverLining::Atmosphere* myAtmosphere;
397  SilverLining::LocalTime* myLocalTime;
398  SilverLining::Location* myLocation;
399 
401 
406 
407  osg::Vec4f myFogColor, myBlendedFogColor, myHorizonColor;
408  osg::Vec3f myLastUpVector;
409 
412 
414  float myTurbidity;
432 
435 
436  typedef std::map<osg::observer_ptr<const osg::Camera>, bool> FogOverrideMap;
437 
439  std::map<osg::observer_ptr<const osg::Camera>, float> myFogOverrideDensityMap;
440  std::map<osg::observer_ptr<const osg::Camera>, osg::Vec4f> myFogOverrideColorMap;
441 
444 
445  float myFogHeight, myFogThresholdDistance;
446  float mySunAlpha;
448 
452 
454 
456 
458 
459  //default opengl compiled shaders needed for silver lining to work after sensorFX is installed
460  std::vector<unsigned int> myDefaultShaderVector;
461 
464 
466 
469 
472 
477 
478  typedef std::map< osg::GraphicsContext*, void* > ContextToHandleMap;
480 
481  };
482 
486  {
487 
488  public:
490  static DtSilverliningGroupCreator& instance(DtDe& theIG);
491 
493  static void registerInstance(DtDe& theIG, DtSilverliningGroupCreator* anInstance);
494 
496  virtual DtSilverliningGroup* create(DtDe&);
497  };
498 }
499 
500 
float mySavedPrecipitationIntensity
Definition: DtSilverliningGroup.h:451
bool myDrawStars
Definition: DtSilverliningGroup.h:462
bool myFailedInit
Definition: DtSilverliningGroup.h:468
Abstract Base class.
Definition: DtWindow.h:25
osg::ref_ptr< DtLightManagerGroup > myLightManagerGroup
Definition: DtSilverliningGroup.h:405
FogOverrideMap myOverrideFogMap
Definition: DtSilverliningGroup.h:438
Virtual base class.
Definition: DtVirtualBaseClass.h:22
bool myCrepuscularRaysEnabled
Definition: DtSilverliningGroup.h:421
osg::ref_ptr< osg::Geode > myCloudGeode
Definition: DtSilverliningGroup.h:404
bool myDrawSunMoon
Definition: DtSilverliningGroup.h:463
Creator that is used to create the silver lining group.
Definition: DtSilverliningGroup.h:485
int mySavedPrecipitationType
Definition: DtSilverliningGroup.h:450
std::map< osg::observer_ptr< const osg::Camera >, float > myFogOverrideDensityMap
Definition: DtSilverliningGroup.h:439
DtCloudLayerManager * myLayerManager
Definition: DtSilverliningGroup.h:400
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
osg::Vec3f myLastUpVector
Definition: DtSilverliningGroup.h:408
Definition: featureContext.h:37
Contains makVrv::DtCloudCoverManager class.
osg::ref_ptr< DtOsgGlobalShaderComponent > myGlobalShaderComponent
Definition: DtSilverliningGroup.h:457
float myForcedMoonLat
Definition: DtSilverliningGroup.h:427
float myForcedSunLat
Definition: DtSilverliningGroup.h:425
OpenThreads::Mutex myMutex
Definition: DtSilverliningGroup.h:390
double myLastImGuiSimTime
Definition: DtSilverliningGroup.h:475
std::map< osg::GraphicsContext *, void * > ContextToHandleMap
Definition: DtSilverliningGroup.h:478
std::map< osg::observer_ptr< const osg::Camera >, osg::Vec4f > myFogOverrideColorMap
Definition: DtSilverliningGroup.h:440
struture used to exhchange/communicate various crepuscular rays parameters
Definition: DtCrepuscularRaysParameters.h:20
An OSG implementation of the sky.
Definition: DtOsgSkyObject.h:46
osg::ref_ptr< DtOsgFogComponent > myFogComponent
Definition: DtSilverliningGroup.h:455
bool myUse16BitEnviroMap
Definition: DtSilverliningGroup.h:433
virtual osg::Vec3f & getLastUpVector()
Definition: DtSilverliningGroup.h:333
bool myCubeMapFullRegenerate
Definition: DtSilverliningGroup.h:418
osg::Vec4f myHorizonColor
Definition: DtSilverliningGroup.h:407
A group node which adds a silver-lining sky and will light all Children with the proper lighting para...
Definition: DtSilverliningGroup.h:63
bool myLensFlareEnabled
Definition: DtSilverliningGroup.h:420
float myFogDensity
Definition: DtSilverliningGroup.h:411
float myForcedMoonLon
Definition: DtSilverliningGroup.h:428
bool myUseGlobalTimeZone
Definition: DtSilverliningGroup.h:467
The abstract Channel Class.
Definition: DtChannel.h:29
SilverLining::Location * myLocation
Definition: DtSilverliningGroup.h:398
bool myHasFixedHorizonColor
Definition: DtSilverliningGroup.h:410
bool myForcedSunAndMoonUsingHorizonCoords
Definition: DtSilverliningGroup.h:429
DtDe & myDe
Definition: DtSilverliningGroup.h:389
Contains makVrv::DtVirtualBaseClass class.
std::string myOriginalVoxelDimension
Definition: DtSilverliningGroup.h:471
int myCubeMapDirtyState
Definition: DtSilverliningGroup.h:417
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points.
float myForcedSunLon
Definition: DtSilverliningGroup.h:426
DtReferenceEllipsoid myRefEllip
Definition: DtSilverliningGroup.h:392
std::vector< DtSilverLiningCloudLayer > CloudLayerList
Definition: DtSilverliningGroup.h:387
float myTurbidity
Definition: DtSilverliningGroup.h:414
bool myDrawSunAndMoonIntoEnvMap
Definition: DtSilverliningGroup.h:431
float mySunAlpha
Definition: DtSilverliningGroup.h:446
bool mySunAndMoonPositionForced
Definition: DtSilverliningGroup.h:424
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:24
bool myMoonPhaseForced
Definition: DtSilverliningGroup.h:422
bool myLastAtmosphereFogEnabled
Definition: DtSilverliningGroup.h:470
Definition: DtCloudLayerManager.h:37
std::vector< unsigned int > myDefaultShaderVector
Definition: DtSilverliningGroup.h:460
OpenThreads::Mutex Mutex
Definition: DtOsgThreadingUtils.h:12
boost::unordered_map< DtCloudLayerId, DtSilverLiningCloudLayer > CloudLayerMap
Definition: DtSilverLiningCloudLayer.h:41
Contains vrvCore::DtCloudLayerRecord declaration.
bool myCubeMapEnabled
Definition: DtSilverliningGroup.h:419
osg::ref_ptr< osg::Uniform > myLightLevelUniform
Definition: DtSilverliningGroup.h:442
osg::Vec3f myOverrideLightPosition
Definition: DtSilverliningGroup.h:474
bool myNeedsResetFlag
Definition: DtSilverliningGroup.h:416
bool myGeocFlag
Definition: DtSilverliningGroup.h:415
bool myCurveCloudsTowardGround
Definition: DtSilverliningGroup.h:447
Definition: DtSilverLiningCloudLayer.h:23
Base class to provide boost signal/slot management.
SilverLining::Atmosphere * myAtmosphere
my atmosphere.
Definition: DtSilverliningGroup.h:396
bool myForceRelight
Definition: DtSilverliningGroup.h:453
bool myPrecipitationStateSaved
Definition: DtSilverliningGroup.h:449
bool myUsingSensorFXShader
Definition: DtSilverliningGroup.h:434
osg::ref_ptr< osg::Uniform > myLightAmbientUniform
Definition: DtSilverliningGroup.h:443
const char int mode
Definition: ioapi.h:38
osg::ref_ptr< osg::LightSource > mySkyLight
Definition: DtSilverliningGroup.h:403
DtGeodeticCoord myGeod
Definition: DtSilverliningGroup.h:393
long long DtCloudLayerId
Definition: DtCloudLayer.h:26
Contains DLL export macros.
osg::ref_ptr< osg::Geode > mySkyGeode
Definition: DtSilverliningGroup.h:402
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
bool myUseAzimuthElevationForOverrideGui
Definition: DtSilverliningGroup.h:476
bool myOverrideLightPositionEnabled
Definition: DtSilverliningGroup.h:473
std::map< osg::observer_ptr< const osg::Camera >, bool > FogOverrideMap
Definition: DtSilverliningGroup.h:436
Contains makVrv::DtSilverLiningCloudLayer struct.
bool myHiResCumulus
Definition: DtSilverliningGroup.h:430
float myFogThresholdDistance
Definition: DtSilverliningGroup.h:445
ContextToHandleMap myOsgGcToOsGc
Definition: DtSilverliningGroup.h:479
SilverLining::LocalTime * myLocalTime
Definition: DtSilverliningGroup.h:397
float myForcedMoonPhase
Definition: DtSilverliningGroup.h:423
float myVisibility
Definition: DtSilverliningGroup.h:413
Contains the DtOsgGlobalShaderComponent class.
DtDe & getDe()
Definition: DtSilverliningGroup.h:73
virtual bool getFailedInit()
Definition: DtSilverliningGroup.h:287
DtSignalConnectionManager myConnections
Definition: DtSilverliningGroup.h:465
Definition: vrfObjectManipulationHandlerBaseClass.h:67

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)