27 #include <osg/LightSource>
28 #include <osg/Uniform>
29 #include <osg/observer_ptr>
31 #include <OpenThreads/Mutex>
33 #include <matrix/vlVector.h>
34 #include <matrix/referenceEllipsoid.h>
35 #include <matrix/geodeticCoord.h>
37 #include <tbb/concurrent_queue.h>
43 namespace SilverLining
49 class ThreadCameraStreamData;
58 class DtOsgFogComponent;
59 class DtLightManagerGroup;
61 class DtCloudLayerManager;
63 class DtCoordinateSystem;
64 class DtCloudDrawable;
66 class DtSilverLiningFogParameters;
67 class DtSilverLiningCubeMapData;
68 class DtSilverLiningGroupTcsUserData;
69 class DtGlDeleteObjectManager;
70 class DtOsgLightManager;
83 struct DtCrepuscularRaysModifiers;
84 struct DtCrepuscularRaysParameters;
112 virtual void setGenerateCubeMaps(
bool enabled);
121 virtual void applyFog(
osg::ref_ptr<const osg::Camera> osgCamera, SilverLining::ThreadCameraStreamData* slTcsData, SilverLining::Location* slLocation,
bool adjustForCoverage);
124 virtual void deleteGeods();
127 virtual void setForcedMoonPhase(
float phase);
130 virtual void clearForcedMoonPhase();
133 virtual bool moonPhaseIsForced()
const;
136 virtual float forcedMoonPhase()
const;
141 virtual void setForcedSunAndMoon(
double sunLat,
double sunLon,
double moonLat,
142 double moonLon,
bool horizonCoords =
true);
145 virtual void clearForcedSunAndMoon();
148 virtual bool sunAndMoonPositionIsForced()
const;
151 virtual void getForcedSunAndMoonPosition(
double& sunLat,
double& sunLon,
152 double& moonLat,
double& moonLon,
bool& horizonCoords)
const;
158 virtual void setLightPollution(
double Wm2);
161 virtual double lightPollution()
const;
165 virtual void setLocation(
const DtVector& location,
osg::ref_ptr<const osg::Camera> osgCamera, SilverLining::ThreadCameraStreamData* tcsData,
bool useGlobalTimeZoneOverride,
bool updateTimeInAtmosphere);
171 virtual void update2D(
const osg::Matrixd& m,
const osg::Camera* osgCamera);
177 virtual void removeCloudLayers();
181 virtual void setFogColor(
const Vector4_32& rgbA);
184 virtual void setFogHeight(
float height);
188 virtual void setFogBlend(
const Vector4_32& rgbA,
float density);
197 virtual void setFogThresholdDistance(
float distance);
200 virtual void setHorizonColor(
const Vector4_32& rgbA);
203 virtual void setCubeMapDirty();
206 virtual void setUse16BitEnviroMap(
bool flag);
209 virtual bool getUse16BitEnviroMap();
212 virtual void setUsingSensorFXShader(
bool flag);
215 virtual bool getUsingSensorFXShader();
218 virtual void clearHorizonColor();
224 virtual void clearFogOverrideForAllCameras(
void);
228 virtual bool useGlobalTimeZone()
const;
231 virtual float sunAlpha(
const osg::Camera* osgCamera)
const;
234 virtual void setDrawSunAndMoonIntoEnvMap(
const osg::Camera* osgCamera,
bool draw);
241 const DtVector& bounds,
bool infinite,
bool relative,
bool fadeAtAltitude,
bool altitudeIsHAT);
245 const DtVector& bounds,
bool infinite,
bool relative,
bool fadeAtAltitude,
bool altitudeIsHAT);
249 const DtVector& bounds,
bool infinite,
bool relative,
bool fadeAtAltitude,
bool altitudeIsHAT);
253 const DtVector& bounds,
double density,
bool infinite,
bool relative,
bool fadeAtAltitude,
bool altitudeIsHAT);
257 float cornerRadius,
const DtVector& bounds,
double density,
bool infinite,
bool relative,
bool fadeAtAltitude,
262 float cornerRadius,
const DtVector& bounds,
double density,
bool infinite,
bool relative,
bool fadeAtAltitude,
266 virtual void addCumulonimbusCappilatus(
DtCloudLayerId layerId,
const DtVector& position,
float orientation,
267 const DtVector& bounds,
double density,
bool relative,
bool fadeAtAltitude,
bool altitudeIsHAT);
271 float cornerRadius,
const DtVector& bounds,
double density,
bool infinite,
bool relative,
bool fadeAtAltitude,
bool altitudeIsHAT);
274 virtual void addGroundFog(
DtCloudLayerId layerId,
const DtVector& position,
float orientation,
float cornerRadius,
275 const DtVector& bounds,
double density,
bool infinite,
bool relative,
bool fadeAtAltitude,
bool altitudeIsHAT);
277 virtual void setCloudLayerEnabled(
DtCloudLayerId layerId,
bool enabled, SilverLining::ThreadCameraStreamData* tcsData);
278 virtual void setCloudLayerPositionAndOrientation(
DtCloudLayerId layerId,
const DtVector& position,
float orientation);
280 virtual void setWind(
const double directionDEN,
const double minAltitude,
281 const double maxAltitude,
const double velocity);
286 virtual void setAirTurbidity(
float turbidity);
287 virtual void setVisibleDistance(
const osg::Camera* osgCamera,
float distance);
288 virtual float getVisibleDistance()
const;
290 virtual void createAtmosphere();
295 virtual void addRain(
float mmPerHour,
bool global);
296 virtual void addSleet(
float mmPerHour,
bool global);
297 virtual void addSnow(
float mmPerHour,
bool global,
bool wet);
298 virtual void clearAllPrecipitation(SilverLining::ThreadCameraStreamData* tcsData);
302 virtual bool realizeLayers(SilverLining::ThreadCameraStreamData* tcsData
305 virtual SilverLining::Atmosphere* findAtmosphere();
306 virtual const SilverLining::Atmosphere* findAtmosphere()
const;
309 virtual void getGMTDateTime(
long &julianDate,
double &GMTTod)
const;
312 virtual osg::Node *getCloudsNode();
315 virtual osg::Node *getSkyNode();
318 virtual void setSunMoonEnabled(
bool drawSunMoon);
321 virtual bool sunMoonEnabled();
324 virtual void setStarsEnabled(
bool drawStars);
327 virtual bool starsEnabled();
333 void setEnableHDR(
bool enable);
336 virtual osg::LightSource *skyLight(
const osg::Camera* osgCamera);
339 virtual const osg::LightSource* skyLight(
const osg::Camera* osgCamera)
const;
358 virtual std::string userDefinedVertString(
void)
const;
359 virtual std::string userDefinedFragString(
void)
const;
373 virtual SilverLining::ThreadCameraStreamData* findSilverLiningTcsData(
const osg::Camera* osgCamera);
377 virtual SilverLining::ThreadCameraStreamData* findSilverLiningTcsData(
const osg::Camera* osgCamera)
const;
380 virtual void reloadShaders(
const std::vector<unsigned int>& shaderVector
381 ,
const std::string& userDefinedVertString,
const std::string& userDefinedFragString);
384 virtual float fogDensity(
const osg::Camera* osgCamera)
const;
387 virtual Vector4_32 fogColor(
const osg::Camera* osgCamera)
const;
390 virtual Vector4_32 ambientColor(
const osg::Camera* osgCamera)
const;
393 virtual Vector4_32 diffuseColor(
const osg::Camera* osgCamera)
const;
396 virtual Vector3_32 lightPosition(
const osg::Camera* osgCamera)
const;
398 virtual float smoothingDistance(
void)
const;
407 virtual void setCubeMapDirtyState(
int val);
426 static void enableBillboardRotation(
bool val);
427 static bool billboardRotationEnabled();
429 static double maxPrecipitationAltitude(
void);
436 virtual int calculateZoneByLongitude(
double longitude)
const;
439 virtual void setDateAndTime(
unsigned short year,
unsigned char month,
unsigned char day
440 ,
unsigned char hour,
unsigned char minutes,
double seconds
442 ,
bool observeDaylightSavings,
bool useGlobalTimeZoneOverride
443 ,
bool updateTimeInAtmosphere);
447 virtual void fillConditionsFromSkyObjectAtCreation(
DtOsgSkyObject* skyObject);
449 virtual void addPrecipitationToClouds(
int type,
float mmPerHour);
451 virtual void updatePrecipitation(
const DtVector& location, SilverLining::ThreadCameraStreamData* tcsData)
const;
453 virtual void setCloudVisibility(
const osg::Camera* osgCamera, SilverLining::ThreadCameraStreamData* slTcsData, SilverLining::Location* slLocation);
456 virtual void traverse(osg::NodeVisitor& nv);
463 virtual void slot_reloadShader();
466 virtual void updateImGui(
float& x,
float& y,
float& z, SilverLining::ThreadCameraStreamData* slTcsData
467 , SilverLining::Location* slLocation);
471 virtual void calculateAndFillFogParameters(
osg::ref_ptr<const osg::Camera> osgCamera, SilverLining::ThreadCameraStreamData* slTcsData, SilverLining::Location* slLocation
475 virtual bool isTimeAndZoneTheSameExcludingMinutesAndSeconds(
const SilverLining::LocalTime* lhs,
const SilverLining::LocalTime* rhs)
const;
479 virtual void updateImGuiAndGetModifiersOffOfImgGui(DtCrepuscularRaysModifiers& modifiers
480 ,
float r,
float g,
float b
481 ,
float sunPosX,
float sunPosY,
float sunPosZ
482 ,
float exposure)
const;
485 virtual void fillRaysParameters(SilverLining::Vector3& sunClipPos, SilverLining::Vector4& slparams,
const SilverLining::ThreadCameraStreamData* tcsData,
const SilverLining::Atmosphere* atmosphere)
const;
488 virtual void computeSunPositionClipSpace(SilverLining::Vector3& sunClip,
bool& clipped,
bool& behind,
const SilverLining::Vector3& sunWorld,
const SilverLining::ThreadCameraStreamData* tcsData)
const;
494 virtual const osg::Camera* actualCameraIfMultiView(
const osg::Camera* _osgCamera)
const;
497 virtual void destroyAtmosphere(SilverLining::Atmosphere* atmosphere);
503 virtual void releaseAtmosphere();
506 virtual void objectDeleted(
void*
object);
509 virtual void deleteSlTcsData(SilverLining::ThreadCameraStreamData* slTcsData
510 , SilverLining::Atmosphere* atmosphere);
516 virtual void copySlTcsDatasTo(tbb::concurrent_queue<SilverLining::ThreadCameraStreamData*>& slTcsDatas)
const;
620 friend class DtSlTcsDataDeleter;
static std::atomic< int > theCameraId
my atmosphere.
Definition: DtSilverliningGroup.h:595
DtSilverliningGroup * myParent
Definition: DtSilverliningGroup.h:91
Vector3_32 myOverrideLightPosition
my atmosphere.
Definition: DtSilverliningGroup.h:582
static DtDtSilverLiningGroupCameraObserver theCameraObserver
static so that the observer is never deleted before the camera
Definition: DtSilverliningGroup.h:615
bool myDrawStars
my atmosphere.
Definition: DtSilverliningGroup.h:571
bool myFailedInit
my atmosphere.
Definition: DtSilverliningGroup.h:576
Manager for DtThreadCameraStreamData Holds them as cameras come in. Deletes them as cameras go out (v...
Definition: DtThreadCameraStreamDataManager.h:86
osg::ref_ptr< DtLightManagerGroup > myLightManagerGroup
my atmosphere.
Definition: DtSilverliningGroup.h:532
This represents per camera, context (tcs) specific data for DtSilverLiningGroup Unlike DtSilverLining...
Definition: DtSilverLiningGroupTcsUserData.h:134
DtSilverLiningGroupTcsUserDataCreator & myUserDataCreator
my atmosphere.
Definition: DtSilverliningGroup.h:588
static const double theSkyFogginess
my atmosphere.
Definition: DtSilverliningGroup.h:610
static const double theGeocTrueLightingAltitude
my atmosphere.
Definition: DtSilverliningGroup.h:607
Definition: DtSilverLiningCloudLayer.h:28
osg::ref_ptr< osg::Geode > myCloudGeode
my atmosphere.
Definition: DtSilverliningGroup.h:531
std::unordered_map< DtCloudLayerId, DtSilverLiningCloudLayer > CloudLayerMap
Definition: DtSilverLiningCloudLayer.h:71
bool myDrawSunMoon
my atmosphere.
Definition: DtSilverliningGroup.h:572
Vector2_32 myWind
my atmosphere.
Definition: DtSilverliningGroup.h:535
A drawable for drawing the cloud layer.
Definition: DtCloudDrawable.h:52
DtGlDeleteObjectManager & myGlDeleteObjectManager
my atmosphere.
Definition: DtSilverliningGroup.h:590
DtCloudLayerManager * myLayerManager
my atmosphere.
Definition: DtSilverliningGroup.h:528
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
Definition: featureContext.h:37
Contains makVrv::DtCloudCoverManager class.
osg::ref_ptr< DtOsgGlobalShaderComponent > myGlobalShaderComponent
my atmosphere.
Definition: DtSilverliningGroup.h:566
float myForcedMoonLat
my atmosphere.
Definition: DtSilverliningGroup.h:549
float myForcedSunLat
my atmosphere.
Definition: DtSilverliningGroup.h:547
OpenThreads::Mutex myMutex
my atmosphere.
Definition: DtSilverliningGroup.h:523
double myLastImGuiSimTime
my atmosphere.
Definition: DtSilverliningGroup.h:579
Contains the DtThreadCameraStreamDataManager class declaration.
friend DtSilverliningGroupCreator
only creator can created
Definition: DtSilverliningGroup.h:101
struture used to exhchange/communicate various crepuscular rays parameters
Definition: DtCrepuscularRaysParameters.h:20
static const double theSkyHazeHeightFactor
my atmosphere.
Definition: DtSilverliningGroup.h:611
static const float theAtmosphereTresholdTrigger
in seconds
Definition: DtSilverliningGroup.h:603
intermediate structure for computing and returning fog parameters
Definition: DtSilverLiningFogParameters.h:19
An OSG implementation of the sky.
Definition: DtOsgSkyObject.h:28
This represents per camera, context (tcs) specific data for DtSilverLiningGroup.
Definition: DtSilverLiningGroupTcsUserData.h:46
Contains makVrv::DtSilverLiningGroupTcsUserData class.
osg::ref_ptr< DtOsgFogComponent > myFogComponent
my atmosphere.
Definition: DtSilverliningGroup.h:564
bool myUse16BitEnviroMap
my atmosphere.
Definition: DtSilverliningGroup.h:555
A group node which adds a silver-lining sky and will light all Children with the proper lighting para...
Definition: DtSilverliningGroup.h:97
int myGlobalPrecipitationType
my atmosphere.
Definition: DtSilverliningGroup.h:561
float myFogDensity
my atmosphere.
Definition: DtSilverliningGroup.h:538
float myForcedMoonLon
my atmosphere.
Definition: DtSilverliningGroup.h:550
const char * creatorTypeName< DtSilverliningGroup >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtSilverliningGroup.h:81
static const float theDefaultCubeMapUpdateAndRelightTime
beyond this the cube map gets triggered to be updated. Its also the time used to fudge the current ti...
Definition: DtSilverliningGroup.h:599
DtSilverLiningGroupSkyLightTcsUserDataCreator & mySkyLightUserDataCreator
my atmosphere.
Definition: DtSilverliningGroup.h:623
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:22
virtual void objectDeleted(void *) override
bool myHasFixedHorizonColor
my atmosphere.
Definition: DtSilverliningGroup.h:537
bool myForcedSunAndMoonUsingHorizonCoords
my atmosphere.
Definition: DtSilverliningGroup.h:551
DtDe & myDe
my atmosphere.
Definition: DtSilverliningGroup.h:522
DtOsgLightManager & myOsgLightManager
my atmosphere.
Definition: DtSilverliningGroup.h:625
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points. Coordinates are in local database coordinates The coordinat...
float myForcedSunLon
my atmosphere.
Definition: DtSilverliningGroup.h:548
float myTurbidity
my atmosphere.
Definition: DtSilverliningGroup.h:541
Definition: DtSilverliningGroup.h:86
bool mySunAndMoonPositionForced
my atmosphere.
Definition: DtSilverliningGroup.h:546
DtOsgLightManager receives LightSource nodes from the DtOsgCullVisitor, and collects them all here wh...
Definition: DtOsgLightManager.h:55
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
State component that injects Fog rendering capabilities into a state set.
Definition: DtOsgFogComponent.h:34
Vector4_32 myHorizonColor
my atmosphere.
Definition: DtSilverliningGroup.h:534
float myStratocumulusVoxelDimension
my atmosphere.
Definition: DtSilverliningGroup.h:553
bool myMoonPhaseForced
my atmosphere.
Definition: DtSilverliningGroup.h:544
Definition: DtCloudLayerManager.h:53
std::vector< unsigned int > myDefaultShaderVector
my atmosphere.
Definition: DtSilverliningGroup.h:569
OpenThreads::Mutex Mutex
Definition: DtOsgThreadingUtils.h:12
static const double theMaximumCloudVisibility
my atmosphere.
Definition: DtSilverliningGroup.h:609
float mySmoothCloudsDist
my atmosphere.
Definition: DtSilverliningGroup.h:586
Contains vrvCore::DtCloudLayerRecord declaration.
Manager for DtKeyedData Used to create/manage DtKeyedData Each entry of DtKeyedData is associated wit...
Definition: DtKeyedDataManagerTemplate.h:48
bool myCubeMapEnabled
my atmosphere.
Definition: DtSilverliningGroup.h:542
static bool theBillboardRotationEnabled
my atmosphere.
Definition: DtSilverliningGroup.h:605
static std::atomic< int > theSlTcsDatasCount
my atmosphere.
Definition: DtSilverliningGroup.h:591
DtVirtualBaseClassCreator< DtSilverliningGroup > DtSilverliningGroupCreator
creator
Definition: DtSilverliningGroup.h:74
bool myEnableSmoothClouds
my atmosphere.
Definition: DtSilverliningGroup.h:585
Base class to provide boost signal/slot management.
SilverLining::Atmosphere * myAtmosphere
my atmosphere.
Definition: DtSilverliningGroup.h:526
Vaos are OpenGL context specific. They need to be deleted in the context they are created in...
Definition: DtGlDeleteObjectManager.h:58
bool myUsingSensorFXShader
my atmosphere.
Definition: DtSilverliningGroup.h:556
float myGlobalPrecipitationIntensity
my atmosphere.
Definition: DtSilverliningGroup.h:562
DtThreadCameraStreamDataManager & myGlobalTcsDataManager
my atmosphere.
Definition: DtSilverliningGroup.h:622
static const double theMaxPrecipitationAltitude
my atmosphere.
Definition: DtSilverliningGroup.h:608
long long DtCloudLayerId
Definition: DtCloudLayer.h:26
static const double theSunAlphaFactor
my atmosphere.
Definition: DtSilverliningGroup.h:612
Contains DLL export macros.
osg::ref_ptr< osg::Geode > mySkyGeode
my atmosphere.
Definition: DtSilverliningGroup.h:530
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
bool myUseAzimuthElevationForOverrideGui
my atmosphere.
Definition: DtSilverliningGroup.h:583
bool myOverrideLightPositionEnabled
my atmosphere.
Definition: DtSilverliningGroup.h:581
Contains makVrv::DtSilverLiningCloudLayer struct.
static const bool theSlTcsDatasCountLog
my atmosphere.
Definition: DtSilverliningGroup.h:592
float myFogThresholdDistance
my atmosphere.
Definition: DtSilverliningGroup.h:558
float myForcedMoonPhase
my atmosphere.
Definition: DtSilverliningGroup.h:545
float myVisibility
my atmosphere.
Definition: DtSilverliningGroup.h:540
Contains the DtOsgGlobalShaderComponent class.
virtual bool getFailedInit()
Definition: DtSilverliningGroup.h:293
DtSignalConnectionManager myConnections
my atmosphere.
Definition: DtSilverliningGroup.h:574
Definition: vrfObjectManipulationHandlerBaseClass.h:66