VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtTritonDrawable.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2023 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvTriton/vrvTriton.h>
15 
17 
18 #include <vrvMath/DtVector4.h>
19 #include <vrvMath/DtMatrix4.h>
20 
21 #include <matrix/vlVector.h>
22 
23 #include <osg/Camera>
24 #include <osg/Drawable>
25 #include <osg/TextureCubeMap>
26 #include <map>
27 
28 #include <osgEarth/GDAL>
29 
30 namespace osg
31 {
32  class Texture2D;
33 }
34 
35 namespace Triton
36 {
37  class Camera;
38  class Environment;
39  class Ocean;
40  class ResourceLoader;
41 }
42 
43 namespace makVrv
44 {
45  class DtHeightMapManager;
46  class DtObserverObject;
47  class DtOsgCullVisitorParameters;
48  class DtOsgSkyObject;
49  class DtPlanarReflectionCamera;
50  class DtTritonBreakingWavesMapManager;
51  class DtTritonPlanarReflectionManager;
52  class DtTritonShaderUniformManager;
53  class DtWindow;
54  class DtGlDebugGroup;
55  class DtTritonImGuiHelper;
56  class DtSkyObjectManager;
57  class DtTritonGroupTcsUserData;
58  class DtHeightMapSuperManager;
59 
62  class DT_DLL_VRVTRITON DtTritonDrawable : public osg::Drawable
63  {
64  protected:
65  typedef std::map< osg::GraphicsContext*, void* > ContextToHandleMap;
66 
67  public:
69  DtTritonDrawable(makVrv::DtDe& de, DtTritonManager& tritonManager);
70 
71  protected:
73  virtual ~DtTritonDrawable();
74 
75  private:
76 
78  DtTritonDrawable() = delete;
79 
81  DtTritonDrawable(const DtTritonDrawable& drawable) = delete;
82 
84  DtTritonDrawable& operator=(const DtTritonDrawable&) = delete;
85 
86  public:
88  virtual void setUpEnvironment();
89 
91  virtual void setUpOceanMask();
92 
94  virtual Triton::Ocean* ocean();
95 
97  virtual Triton::Environment* environment();
98 
100  virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
101 
103  virtual void setUnderwaterFogColor(const Vector4_32& color);
105  virtual const Vector4_32& underwaterFogColor() const;
107 
109  virtual void setUnderwaterVisibility(double visibility);
111  virtual double underwaterVisibility() const;
113 
115  virtual bool isInitialized() const;
116 
119  virtual void setAllowUnderwaterEffects(bool allow);
120 
122  virtual bool allowUnderwaterEffects() const;
123 
125  virtual void releaseGLObjects(osg::State* state = 0) const;
126 
128  virtual void planarReflectionCameras(std::vector<osg::ref_ptr<const DtPlanarReflectionCamera>>& planarReflectionCameras) const;
129 
132  virtual osg::ref_ptr<DtPlanarReflectionCamera> planarReflectionCamera(osg::Camera* osgCamera) const;
133 
135  virtual osg::Group* getTritonGeode();
137  virtual const osg::Group* getTritonGeode() const;
139 
141  virtual const DtTritonRenderingParameters& renderingParameters(void) const;
142 
144  virtual DtTritonRenderingParameters& renderingParameters(void);
145 
147  boost::signalslib::signal<void()> signal_postInitialize;
148 
150  boost::signalslib::signal<void()> signal_environmentToBeDestroyed;
151 
152  protected:
153 
155  virtual void shaderUpdateLightUniforms(osg::RenderInfo& info
156  , const osg::Camera* osgCamera
157  , DtTritonGroupTcsUserData* userData, double windSpeed) const;
158 
160  virtual void slot_preObserverUpdate();
161 
164  virtual bool setUpOcean();
165 
167  virtual void cleanup(void);
168 
170  virtual void slot_reloadShader();
171 
172 
174  virtual void applyLighting(osg::RenderInfo& info, const osg::Camera* osgCamera
175  , DtTritonGroupTcsUserData* userData, double windSpeed) const;
176 
178  virtual bool applyQuality() const;
179 
181  virtual void applySpectralModel(void) const;
182 
184  virtual void updateShader(osg::Node* node, osg::State& state) const;
185 
187  virtual void onPostTick(void);
188 
190  virtual void prepEnvironmentMap(const DtOsgSkyObject* skyObject, const osg::Camera* camera, osg::State& state, DtTritonGroupTcsUserData* userData) const;
191 
193  virtual void prepHeightMapAndBreakingWavesMaps(const DtHeightMapManager* heightMapMgr, osg::State& state, osg::RenderInfo& renderInfo
194  , DtTritonGroupTcsUserData* userData, bool forceUpdate) const;
195 
197  virtual void prepReflectionMap(osg::ref_ptr<DtPlanarReflectionCamera> planarReflectionCamera, const osg::State& state
198  , double windSpeed, DtTritonGroupTcsUserData* userData) const;
199 
201  virtual void setupTritonLightFogVisibility(const osg::Camera* camera, DtOsgSkyObject* skyObject, std::pair<bool, float> isAboveWater, bool skyEnabled, DtTritonGroupTcsUserData* userData) const;
202 
204  virtual Vector4_32 calculateUnderWaterFogColor( Vector4_32 ambientLight, float cameraDepth ) const;
205 
210  virtual std::pair<bool, float> isCameraAboveWater( Triton::Ocean* ocean,
211  const Triton::Environment* environment, const Triton::Camera* camera ) const;
212 
214  virtual void setUpTritonParticlesAdditiveBlend(void) const;
215 
217  virtual void setUpGodRaysFading(const DtOsgCullVisitorParameters* params, DtTritonGroupTcsUserData* userData) const;
218 
220  virtual void setUpZoomLevel(const DtOsgCullVisitorParameters* params, DtTritonGroupTcsUserData* userData) const;
221 
223  virtual void setUpViewport(Triton::Camera* tritonCamera, osg::Camera* camera) const;
224 
226  virtual void restoreOsgState(osg::State& state) const;
227 
229  virtual void updatePlanarReflectionCamera(const Vector4_32& fogColor, bool skyEnabled, DtTritonGroupTcsUserData* userData) const;
230 
235  virtual void addGraphicsContextIfNecessary(osg::GraphicsContext* key);
236 
237 
239  virtual const osg::StateSet* shadowTechniqueStateSet(const osg::Camera* osgCamera) const;
240 
242  virtual void updateSunIntensity(const osg::Camera* osgCamera, DtTritonGroupTcsUserData* userData, double windSpeed) const;
243 
245  virtual void updateLighingBasedonSensorFX(const osg::Camera* osgCamera, DtTritonGroupTcsUserData* userData) const;
246 
248  virtual void syncHeightMapToGpu(const DtHeightMapManager* heightMapMgr, const osg::State& state, const osg::Camera* camera
249  , DtTritonGroupTcsUserData* userData) const;
250 
252  virtual void logTritonInitializationInfo(void) const;
253 
255  virtual void updateBreakingWavesParametersInTriton(void);
256 
257  virtual void slot_hdrEnabledChanged( bool );
258  protected:
259  Triton::ResourceLoader* myResourceLoader;
260  Triton::Environment* myEnvironment;
262 
266 
267 
269 
273 
276 
278 
280 
283 
285 
287 
289 
291 
292  // when the quality changes the shaders have to be reloaded.
293  // This flag lets the updateShaders function know to force a reload.
294  mutable bool myMutableShadersDirty;
295 
296  // mutable due to osg limitations of drawImplementation being const.
297  // holds the compiled shader ids
298  mutable std::vector<unsigned int> myMutableUserShaderVector;
299 
301 
303 
305  friend class DtTritonImGuiHelper;
306 
308 
310 
311  // This is just an upper bound > the max possible wind speed allowed by triton (30)
312  // It is used to compute the reflection blend
313  const float myWindSpeedUpperBound = 40.0f;
314  // This is the max amount of how much reflections are blended in
315  const float myMaxReflectionBlend = 0.5f;
316 
319 
320  // Turn these on/off for debugging
321  const bool myHeightMapEnabled;
325 
326  // Was HDR on before we turned it off for below water
327  // visibility?
330  };
331 }
DtTritonManager & myTritonManager
Definition: DtTritonDrawable.h:281
const bool myPlanarReflectionsEnabled
Definition: DtTritonDrawable.h:324
DtTritonRenderingParameters myRenderingParameters
Definition: DtTritonDrawable.h:307
std::map< osg::GraphicsContext *, void * > ContextToHandleMap
Definition: DtTritonDrawable.h:65
DtVector4< double > myVrvLatLongMinMax
Definition: DtTritonDrawable.h:288
osg::ref_ptr< osg::ClipNode > myClipNode
Definition: DtTritonDrawable.h:279
osg::ref_ptr< osgEarth::GDALImageLayer > myMaskImageLayer
Definition: DtTritonDrawable.h:329
DtTritonImGuiHelper * myImGuiHelper
Definition: DtTritonDrawable.h:302
Definition: featureContext.h:36
const bool myHeightMapEnabled
Definition: DtTritonDrawable.h:321
Vector4_32 myUnderwaterFogColor
Definition: DtTritonDrawable.h:274
Definition: surface.h:48
Definition: DtSkyObjectManager.h:30
An OSG implementation of the sky.
Definition: DtOsgSkyObject.h:28
Triton::Ocean * myOcean
Definition: DtTritonDrawable.h:261
4 dimensional vector
const bool myBreakingWavesMapEnabled
Definition: DtTritonDrawable.h:323
Contains the declaration of the makVrv::DtTritonManager class.
Contains DLL export macros.
float mySpecularThreshold
Definition: DtTritonDrawable.h:272
DtSignalConnectionManager myConnections
Definition: DtTritonDrawable.h:282
Triton::Environment * myEnvironment
Definition: DtTritonDrawable.h:260
osg::Vec3 myOceanFloorOrigin
Definition: DtTritonDrawable.h:265
Contains makVrv::DtTritonRenderingParameters structure.
float myLightThreshold
Definition: DtTritonDrawable.h:271
This represents per camera, context (tcs) specific data for Triton.
Definition: DtTritonGroupTcsUserData.h:39
bool myAllowUnderwater
Definition: DtTritonDrawable.h:270
#define DT_DLL_VRVTRITON
Definition: vrvTriton.h:19
ContextToHandleMap myOsgGcToOsGc
Definition: DtTritonDrawable.h:284
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
The osg cull vistor parameters class provides additional culling and intersector parameters for choos...
Definition: DtOsgCullVisitorParameters.h:44
bool myInitializationComplete
Definition: DtTritonDrawable.h:268
double myUnderwaterVisibility
Definition: DtTritonDrawable.h:275
bool myPreSubmergedHDROn
Definition: DtTritonDrawable.h:328
boost::signalslib::signal< void()> signal_environmentToBeDestroyed
Emitted when the Triton environment is to be destroyed.
Definition: DtTritonDrawable.h:150
double myDefaultDampingDistance
Definition: DtTritonDrawable.h:263
DtHeightMapSuperManager & myHeightMapSuperManager
dereferenced
Definition: DtTritonDrawable.h:318
std::vector< unsigned int > myMutableUserShaderVector
Definition: DtTritonDrawable.h:298
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
structure used to communicated triton rendering parameters between imgui/system to triton ...
Definition: DtTritonRenderingParameters.h:20
bool mySetupFailed
Definition: DtTritonDrawable.h:290
makVrv::DtDe & myDe
Definition: DtTritonDrawable.h:277
osg::ref_ptr< osg::Texture2D > myOceanMaskTexture
Definition: DtTritonDrawable.h:286
bool myMutableShadersDirty
Definition: DtTritonDrawable.h:294
osg::Vec3 myOceanFloorNormal
Definition: DtTritonDrawable.h:264
Base class to provide boost signal/slot management.
Definition: DtTritonManager.h:49
DtSkyObjectManager & mySkyObjectManager
Definition: DtTritonDrawable.h:309
A class to manage automatic periodic updating of a height map generated from the database dynamically...
Definition: DtHeightMapManager.h:52
DtUniqueID myHeightMapRegisteredId
Definition: DtTritonDrawable.h:300
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:76
An OSG Drawable representing Triton&#39;s infinite ocean. /ingroup vrvTriton.
Definition: DtTritonDrawable.h:62
boost::signalslib::signal< void()> signal_postInitialize
Emitted when Triton has been initialized.
Definition: DtTritonDrawable.h:147
const bool myBreakingWavesEnabled
Definition: DtTritonDrawable.h:322
Definition: DtTritonImGuiHelper.h:33
Triton::ResourceLoader * myResourceLoader
Definition: DtTritonDrawable.h:259
4 dimensional matrix
A class to manage multiple DtHeightMapManager(s) (one per camera)
Definition: DtHeightMapSuperManager.h:55

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)