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 namespace osg
29 {
30  class Texture2D;
31 }
32 
33 namespace Triton
34 {
35  class Camera;
36  class Environment;
37  class Ocean;
38  class ResourceLoader;
39 }
40 
41 namespace makVrv
42 {
43  class DtHeightMapManager;
44  class DtObserverObject;
45  class DtOsgCullVisitorParameters;
46  class DtOsgSkyObject;
47  class DtPlanarReflectionCamera;
48  class DtTritonBreakingWavesMapManager;
49  class DtTritonPlanarReflectionManager;
50  class DtTritonShaderUniformManager;
51  class DtWindow;
52  class DtGlDebugGroup;
53  class DtTritonImGuiHelper;
54  class DtSkyObjectManager;
55  class DtTritonGroupTcsUserData;
56  class DtHeightMapSuperManager;
57 
60  class DT_DLL_VRVTRITON DtTritonDrawable : public osg::Drawable
61  {
62  protected:
63  typedef std::map< osg::GraphicsContext*, void* > ContextToHandleMap;
64 
65  public:
67  DtTritonDrawable(makVrv::DtDe& de, DtTritonManager& tritonManager);
68 
69  protected:
71  virtual ~DtTritonDrawable();
72 
73  private:
74 
76  DtTritonDrawable() = delete;
77 
79  DtTritonDrawable(const DtTritonDrawable& drawable) = delete;
80 
82  DtTritonDrawable& operator=(const DtTritonDrawable&) = delete;
83 
84  public:
86  virtual void setUpEnvironment();
87 
89  virtual void setUpOceanMask();
90 
92  virtual Triton::Ocean* ocean();
93 
95  virtual Triton::Environment* environment();
96 
98  virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
99 
101  virtual void setUnderwaterFogColor(const Vector4_32& color);
103  virtual const Vector4_32& underwaterFogColor() const;
105 
107  virtual void setUnderwaterVisibility(double visibility);
109  virtual double underwaterVisibility() const;
111 
113  virtual bool isInitialized() const;
114 
117  virtual void setAllowUnderwaterEffects(bool allow);
118 
120  virtual bool allowUnderwaterEffects() const;
121 
123  virtual void releaseGLObjects(osg::State* state = 0) const;
124 
126  virtual void planarReflectionCameras(std::vector<osg::ref_ptr<const DtPlanarReflectionCamera>>& planarReflectionCameras) const;
127 
130  virtual osg::ref_ptr<DtPlanarReflectionCamera> planarReflectionCamera(osg::Camera* osgCamera) const;
131 
133  virtual osg::Group* getTritonGeode();
135  virtual const osg::Group* getTritonGeode() const;
137 
139  virtual const DtTritonRenderingParameters& renderingParameters(void) const;
140 
142  virtual DtTritonRenderingParameters& renderingParameters(void);
143 
145  boost::signalslib::signal<void()> signal_postInitialize;
146 
148  boost::signalslib::signal<void()> signal_environmentToBeDestroyed;
149 
150  protected:
151 
153  virtual void shaderUpdateLightUniforms(osg::RenderInfo& info
154  , const osg::Camera* osgCamera
155  , DtTritonGroupTcsUserData* userData, double windSpeed) const;
156 
158  virtual void slot_preObserverUpdate();
159 
162  virtual bool setUpOcean();
163 
165  virtual void cleanup(void);
166 
168  virtual void slot_reloadShader();
169 
170 
172  virtual void applyLighting(osg::RenderInfo& info, const osg::Camera* osgCamera
173  , DtTritonGroupTcsUserData* userData, double windSpeed) const;
174 
176  virtual bool applyQuality() const;
177 
179  virtual void applySpectralModel(void) const;
180 
182  virtual void updateShader(osg::Node* node, osg::State& state) const;
183 
185  virtual void onPostTick(void);
186 
188  virtual void prepEnvironmentMap(const DtOsgSkyObject* skyObject, const osg::Camera* camera, osg::State& state, DtTritonGroupTcsUserData* userData) const;
189 
191  virtual void prepHeightMapAndBreakingWavesMaps(const DtHeightMapManager* heightMapMgr, osg::State& state, osg::RenderInfo& renderInfo
192  , DtTritonGroupTcsUserData* userData, bool forceUpdate) const;
193 
195  virtual void prepReflectionMap(osg::ref_ptr<DtPlanarReflectionCamera> planarReflectionCamera, const osg::State& state
196  , double windSpeed, DtTritonGroupTcsUserData* userData) const;
197 
199  virtual void setupTritonLightFogVisibility(const osg::Camera* camera, DtOsgSkyObject* skyObject, std::pair<bool, float> isAboveWater, bool skyEnabled, DtTritonGroupTcsUserData* userData) const;
200 
202  virtual Vector4_32 calculateUnderWaterFogColor( Vector4_32 ambientLight, float cameraDepth ) const;
203 
208  virtual std::pair<bool, float> isCameraAboveWater( Triton::Ocean* ocean,
209  const Triton::Environment* environment, const Triton::Camera* camera ) const;
210 
212  virtual void setUpTritonParticlesAdditiveBlend(void) const;
213 
215  virtual void setUpGodRaysFading(const DtOsgCullVisitorParameters* params, DtTritonGroupTcsUserData* userData) const;
216 
218  virtual void setUpZoomLevel(const DtOsgCullVisitorParameters* params, DtTritonGroupTcsUserData* userData) const;
219 
221  virtual void setUpViewport(Triton::Camera* tritonCamera, osg::Camera* camera) const;
222 
224  virtual void restoreOsgState(osg::State& state) const;
225 
227  virtual void updatePlanarReflectionCamera(const Vector4_32& fogColor, bool skyEnabled, DtTritonGroupTcsUserData* userData) const;
228 
233  virtual void addGraphicsContextIfNecessary(osg::GraphicsContext* key);
234 
235 
237  virtual const osg::StateSet* shadowTechniqueStateSet(const osg::Camera* osgCamera) const;
238 
240  virtual void updateSunIntensity(const osg::Camera* osgCamera, DtTritonGroupTcsUserData* userData, double windSpeed) const;
241 
243  virtual void updateLighingBasedonSensorFX(const osg::Camera* osgCamera, DtTritonGroupTcsUserData* userData) const;
244 
246  virtual void syncHeightMapToGpu(const DtHeightMapManager* heightMapMgr, const osg::State& state, const osg::Camera* camera
247  , DtTritonGroupTcsUserData* userData) const;
248 
250  virtual void logTritonInitializationInfo(void) const;
251 
253  virtual void updateBreakingWavesParametersInTriton(void);
254 
255  virtual void slot_hdrEnabledChanged( bool );
256  protected:
257  Triton::ResourceLoader* myResourceLoader;
258  Triton::Environment* myEnvironment;
260 
264 
265 
267 
271 
274 
276 
278 
281 
283 
285 
287 
289 
290  // when the quality changes the shaders have to be reloaded.
291  // This flag lets the updateShaders function know to force a reload.
292  mutable bool myMutableShadersDirty;
293 
294  // mutable due to osg limitations of drawImplementation being const.
295  // holds the compiled shader ids
296  mutable std::vector<unsigned int> myMutableUserShaderVector;
297 
299 
301 
303  friend class DtTritonImGuiHelper;
304 
306 
308 
309  // This is just an upper bound > the max possible wind speed allowed by triton (30)
310  // It is used to compute the reflection blend
311  const float myWindSpeedUpperBound = 40.0f;
312  // This is the max amount of how much reflections are blended in
313  const float myMaxReflectionBlend = 0.5f;
314 
317 
318  // Turn these on/off for debugging
319  const bool myHeightMapEnabled;
323 
324  // Was HDR on before we turned it off for below water
325  // visibility?
327  };
328 }
DtTritonManager & myTritonManager
Definition: DtTritonDrawable.h:279
const bool myPlanarReflectionsEnabled
Definition: DtTritonDrawable.h:322
DtTritonRenderingParameters myRenderingParameters
Definition: DtTritonDrawable.h:305
std::map< osg::GraphicsContext *, void * > ContextToHandleMap
Definition: DtTritonDrawable.h:63
DtVector4< double > myVrvLatLongMinMax
Definition: DtTritonDrawable.h:286
osg::ref_ptr< osg::ClipNode > myClipNode
Definition: DtTritonDrawable.h:277
DtTritonImGuiHelper * myImGuiHelper
Definition: DtTritonDrawable.h:300
Definition: featureContext.h:37
const bool myHeightMapEnabled
Definition: DtTritonDrawable.h:319
Vector4_32 myUnderwaterFogColor
Definition: DtTritonDrawable.h:272
Definition: surface.h:48
Definition: DtSkyObjectManager.h:30
An OSG implementation of the sky.
Definition: DtOsgSkyObject.h:28
Triton::Ocean * myOcean
Definition: DtTritonDrawable.h:259
4 dimensional vector
const bool myBreakingWavesMapEnabled
Definition: DtTritonDrawable.h:321
Contains the declaration of the makVrv::DtTritonManager class.
Contains DLL export macros.
float mySpecularThreshold
Definition: DtTritonDrawable.h:270
DtSignalConnectionManager myConnections
Definition: DtTritonDrawable.h:280
Triton::Environment * myEnvironment
Definition: DtTritonDrawable.h:258
osg::Vec3 myOceanFloorOrigin
Definition: DtTritonDrawable.h:263
Contains makVrv::DtTritonRenderingParameters structure.
float myLightThreshold
Definition: DtTritonDrawable.h:269
This represents per camera, context (tcs) specific data for Triton.
Definition: DtTritonGroupTcsUserData.h:39
bool myAllowUnderwater
Definition: DtTritonDrawable.h:268
#define DT_DLL_VRVTRITON
Definition: vrvTriton.h:19
ContextToHandleMap myOsgGcToOsGc
Definition: DtTritonDrawable.h:282
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:43
bool myInitializationComplete
Definition: DtTritonDrawable.h:266
double myUnderwaterVisibility
Definition: DtTritonDrawable.h:273
bool myPreSubmergedHDROn
Definition: DtTritonDrawable.h:326
boost::signalslib::signal< void()> signal_environmentToBeDestroyed
Emitted when the Triton environment is to be destroyed.
Definition: DtTritonDrawable.h:148
double myDefaultDampingDistance
Definition: DtTritonDrawable.h:261
DtHeightMapSuperManager & myHeightMapSuperManager
dereferenced
Definition: DtTritonDrawable.h:316
std::vector< unsigned int > myMutableUserShaderVector
Definition: DtTritonDrawable.h:296
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:288
makVrv::DtDe & myDe
Definition: DtTritonDrawable.h:275
osg::ref_ptr< osg::Texture2D > myOceanMaskTexture
Definition: DtTritonDrawable.h:284
bool myMutableShadersDirty
Definition: DtTritonDrawable.h:292
osg::Vec3 myOceanFloorNormal
Definition: DtTritonDrawable.h:262
Base class to provide boost signal/slot management.
Definition: DtTritonManager.h:49
DtSkyObjectManager & mySkyObjectManager
Definition: DtTritonDrawable.h:307
A class to manage automatic periodic updating of a height map generated from the database dynamically...
Definition: DtHeightMapManager.h:47
DtUniqueID myHeightMapRegisteredId
Definition: DtTritonDrawable.h:298
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
An OSG Drawable representing Triton&#39;s infinite ocean. /ingroup vrvTriton.
Definition: DtTritonDrawable.h:60
boost::signalslib::signal< void()> signal_postInitialize
Emitted when Triton has been initialized.
Definition: DtTritonDrawable.h:145
const bool myBreakingWavesEnabled
Definition: DtTritonDrawable.h:320
Definition: DtTritonImGuiHelper.h:33
Triton::ResourceLoader * myResourceLoader
Definition: DtTritonDrawable.h:257
4 dimensional matrix
A class to manage multiple DtHeightMapManager(s) (one per camera)
Definition: DtHeightMapSuperManager.h:55

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)