VR-Forces 5.0.3 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) 2022 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvTriton/vrvTriton.h>
15 
17 
20 
21 #include <matrix/vlVector.h>
22 
23 #include <osg/Camera>
24 #include <osg/Drawable>
25 #include <osg/TextureCubeMap>
26 #include <tbb/task.h>
27 #include <map>
28 
29 namespace osg
30 {
31  class Texture2D;
32 }
33 
34 namespace Triton
35 {
36  class Camera;
37  class Environment;
38  class Ocean;
39  class ResourceLoader;
40 }
41 
42 namespace makVrv
43 {
44  class DtEnvironmentInfo;
45  class DtHeightMapManager;
46  class DtHeightMapSuperManager;
47  class DtObserverObject;
48  class DtOsgCullVisitorParameters;
49  class DtOsgSkyObject;
50  class DtPlanarReflection;
51  class DtTritonBreakingWavesMapManager;
52  class DtTritonBreakingWavesMapSuperManager;
53  class DtTritonCameraManager;
54  class DtTritonPlanarReflectionManager;
55  class DtTritonShaderUniformManager;
56  class DtWindow;
57  class DtGlDebugGroup;
58  class DtTritonImGuiHelper;
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, const DtTritonManager& tritonManager,
70  DtEnvironmentInfo& environmentInfo, bool geocentric,
71  osg::TextureCubeMap* environmentMap = NULL);
72 
73  protected:
75  virtual ~DtTritonDrawable();
76 
77  private:
78 
80  DtTritonDrawable() = delete;
81 
83  DtTritonDrawable(const DtTritonDrawable& drawable) = delete;
84 
86  DtTritonDrawable& operator=(const DtTritonDrawable&) = delete;
87 
88  public:
90  virtual bool isSameKindAs(const Object* obj) const;
91 
93  virtual Object* cloneType() const;
94 
96  virtual Object* clone(const osg::CopyOp& copyop) const;
97 
99  virtual Triton::Ocean* ocean();
100 
102  virtual const Triton::Camera* closestCameraTo(const DtVector& position) const;
103 
105  virtual Triton::Environment* environment();
106 
108  virtual const Triton::Camera* tritonCamera(const osg::Camera* osgCamera) const;
109 
111  virtual void setBeach(const osg::Vec3& beachOrigin, const osg::Vec3& normal);
112 
114  virtual void syncHeightMapToGpu(DtHeightMapManager* heightMapMgr, const osg::State* state, const osg::Camera* camera);
115 
117  virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
118 
120  virtual void setPlanarReflectionsEnabled(bool enabled);
121  virtual bool planarReflectionsFlag() const;
122 
124  virtual void setBreakingWaveAmplitude(float meters);
126  virtual float getBreakingWaveAmplitude() const;
128 
130  virtual void setHeightMap(bool enabled);
134  virtual bool heightMap() const;
136 
138  virtual void setBreakingWavesMap(bool enabled);
142  virtual bool breakingWavesMap() const;
144 
147  virtual void setMaxReflectionWindSpeed(double metersPerSecond);
148 
150  virtual void setUnderwaterFogColor(const osg::Vec4& color);
152  virtual const osg::Vec4& underwaterFogColor() const;
154 
156  virtual void setUnderwaterVisibility(double visibility);
158  virtual double underwaterVisibility() const;
160 
162  virtual void setWaterVisibility(double visibility);
165  virtual double waterVisibility() const;
167 
169  virtual void setSurgeDepth(float depth);
171  virtual float surgeDepth() const;
173 
175  virtual bool isInitialized() const;
176 
179  virtual void setAllowUnderwaterEffects(bool allow);
180 
182  virtual bool allowUnderwaterEffects() const;
183 
184 
186  virtual void setHeightMapResolution(float metersPerTexel);
189  virtual float heightMapResolution() const;
191 
193  virtual void setBreakingWavesMapResolution(float metersPerTexel);
196  virtual float breakingWavesMapResolution() const;
198 
200  virtual void enableReflections(bool enabled);
201 
203  virtual void releaseGLObjects(osg::State* state = 0) const;
204 
206  virtual void setHeightMapChanged();
207 
209  virtual void setBreakingWavesMapChanged();
210 
213  virtual osg::ref_ptr<DtPlanarReflection> getPlanarReflection(osg::Camera* camera);
214 
216  virtual osg::Group* getTritonGeode();
218  virtual const osg::Group* getTritonGeode() const;
220 
222  virtual DtHeightMapManager* getOrCreateHeightMapManager(osg::RenderInfo& renderInfo);
223 
225  virtual DtTritonBreakingWavesMapManager* getOrCreateBreakingWavesMapManager(osg::RenderInfo& renderInfo);
226 
228  virtual void setWindSpeed(double windSpeed);
229 
231  virtual bool geocentricFlag();
232 
235  virtual void setOceanMaskTextureEnabled(bool myOceanMaskTextureEnabled);
236  virtual bool isOceanMaskTextureEnabled() const;
237 
239  virtual const DtTritonRenderingParameters& renderingParameters(void) const;
240 
242  virtual DtTritonRenderingParameters& renderingParameters(void);
243 
245  boost::signalslib::signal<void()> signal_postInitialize;
246 
247  protected:
248 
250  virtual void shaderUpdateLightUniforms(osg::RenderInfo& info, void* context, Triton::Camera* camera) const;
251 
253  virtual void updateImguiAndConstantsOffOfImgui();
255  virtual void updateImguiHeightMapDebugOverlay(bool needUpdate, osg::RenderInfo& renderInfo);
256 
259  virtual bool setup(osg::RenderInfo& renderInfo);
260 
262  virtual void cleanup(void);
263 
265  virtual void removePlanarReflections();
266 
268  virtual void slot_reloadShader();
269 
271  virtual void initShaderUniformHandles(void* context, Triton::Camera* camera) const;
272 
274  virtual void applyLighting(osg::RenderInfo& info, void* context, Triton::Camera* camera) const;
275 
277  virtual void applyQuality() const;
278 
280  virtual void applySpectralModel(void) const;
281 
283  virtual void setUpNearFarIfNecessary(void) const;
284 
286  virtual void updateShader(osg::Node* node, osg::State& state, void* context, Triton::Camera* camera) const;
287 
289  virtual void setSpecularThreshold(float threshold);
291  virtual float specularThreshold() const;
293 
295  virtual void slot_heightMapChanged(DtHeightMapManager& manager);
296 
298  virtual void slot_heightMapCameraChanged();
299 
301  virtual void flushInvalidCameras();
302 
303 
305  virtual void onPostTick(void);
306 
308  virtual void prepEnvironmentMap(const DtOsgSkyObject* skyObject, const osg::Camera* camera, const osg::State& state) const;
309 
311  virtual void prepHeightMapAndBreakingWavesMaps(DtHeightMapManager* heightMapMgr, DtTritonBreakingWavesMapManager* breakingWavesMapMgr, const osg::State& state, osg::RenderInfo& renderInfo) const;
312 
314  virtual void prepReflectionMap(osg::ref_ptr<DtPlanarReflection> planarReflectionCamera, const osg::State& state) const;
315 
317  virtual void setupTritonLightFogVisibility(const osg::Camera* camera, DtOsgSkyObject* skyObject, bool isAboveWater, bool skyEnabled) const;
318 
320  virtual void setUpTritonParticlesAdditiveBlend(void) const;
321 
323  virtual void setUpGodRaysFading(const DtOsgCullVisitorParameters* params) const;
324 
326  virtual void setUpZoomLevel(const DtOsgCullVisitorParameters* params) const;
327 
329  virtual void setUpViewport(Triton::Camera* tritonCamera, osg::Camera* camera) const;
330 
332  virtual void checkGlErrors(void) const;
333 
335  virtual void restoreOsgState(osg::State& state) const;
336 
338  virtual void updatePlanarReflectionCamera(DtPlanarReflection* planarReflection, bool skyEnabled) const;
339 
342  virtual void slot_windowToBeDestroyed(DtWindow* window);
343 
348  virtual void addGraphicsContextIfNecessary(osg::GraphicsContext* key);
349 
351  virtual void setUpOceanMaskIfNecessary();
352 
354  virtual const osg::StateSet* shadowTechniqueStateSet(const osg::Camera* osgCamera) const;
355 
357  virtual void updateSunIntensity(const osg::Camera* osgCamera) const;
358 
360  virtual void updateLighingBasedonSensorFX(osg::Camera* osgCamera) const;
361  protected:
362 
364 
365  Triton::ResourceLoader* myResourceLoader;
366  Triton::Environment* myEnvironment;
368 
373 
374  bool myHeightMapFlag, myHeightMapChangedFlag;
375  bool myBreakingWavesMapFlag, myBreakingWavesMapChangedFlag;
379 
383 
386 
388 
390 
392 
394 
396 
398 
399  double myWindSpeed;
400 
403 
404  std::vector<osg::ref_ptr<osg::Camera> > myDebugVisualsCameras;
405  std::vector<osg::ref_ptr<osg::Texture> > myDebugVisualsTextures;
409 
411 
413 
415 
418 
420 
422 
423  // when the quality changes the shaders have to be reloaded.
424  // This flag lets the updateShaders function know to force a reload.
425  mutable bool myMutableShadersDirty;
426 
427  // mutable due to osg limitations of drawImplementation being const.
428  // This disables the ocean if the shaders fail to compile.
430 
431  // mutable due to osg limitations of drawImplementation being const.
432  // holds the compiled shader ids
433  mutable std::vector<unsigned int> myMutableUserShaderVector;
434 
437  double myFarZConfig;
439 
440 
442 
443  friend class DtTritonImGuiHelper;
444 
446 
447  };
448 }
double myNearZConfig
Definition: DtTritonDrawable.h:436
std::vector< osg::ref_ptr< osg::Camera > > myDebugVisualsCameras
Definition: DtTritonDrawable.h:404
DtTritonRenderingParameters myRenderingParameters
Definition: DtTritonDrawable.h:445
bool myMutableOceanMaskTextureSetup
Definition: DtTritonDrawable.h:417
bool myHeightMapFlag
Definition: DtTritonDrawable.h:374
Abstract Base class.
Definition: DtWindow.h:25
The DtEnvironmentInfo class is responsible for holding data related to the environment such as sky li...
Definition: DtEnvironmentInfo.h:27
std::map< osg::GraphicsContext *, void * > ContextToHandleMap
Definition: DtTritonDrawable.h:65
osg::Vec4 myUnderwaterFogColor
Definition: DtTritonDrawable.h:384
DtVector4< double > myVrvLatLongMinMax
Definition: DtTritonDrawable.h:419
double myFarZConfig
Definition: DtTritonDrawable.h:437
osg::ref_ptr< osg::ClipNode > myClipNode
Definition: DtTritonDrawable.h:397
DtTritonImGuiHelper * myImGuiHelper
Definition: DtTritonDrawable.h:441
Definition: featureContext.h:37
bool myOceanMaskTextureEnabled
Definition: DtTritonDrawable.h:438
Definition: surface.h:47
float myDefaultVisibility
Definition: DtTritonDrawable.h:376
An OSG implementation of the sky.
Definition: DtOsgSkyObject.h:28
A class for managing multiple breaking wave map managers. There is a manager for each osg camera...
Definition: DtTritonBreakingWavesMapSuperManager.h:39
A camera for rendering Triton&#39;s planar reflection texture.
Definition: DtPlanarReflection.h:27
Triton::Ocean * myOcean
Definition: DtTritonDrawable.h:367
4 dimensional vector
osg::ref_ptr< osg::Texture > myDebugHeightMapVisualTexture
Definition: DtTritonDrawable.h:407
osg::ref_ptr< osg::TextureCubeMap > myCubeMap
Definition: DtTritonDrawable.h:363
makVrv::DtEnvironmentInfo & myEnvironmentInfo
Definition: DtTritonDrawable.h:389
Contains the declaration of the makVrv::DtTritonManager class.
bool myGeocentricFlag
Definition: DtTritonDrawable.h:372
DtTritonShaderUniformManager * myShaderUniformManger
Definition: DtTritonDrawable.h:412
const DtTritonManager & myTritonManager
Definition: DtTritonDrawable.h:401
bool myNearFarValuesInitializedFromConfig
Definition: DtTritonDrawable.h:435
Contains DLL export macros.
float mySpecularThreshold
Definition: DtTritonDrawable.h:382
class for managing the shader uniforms for triton, gets the shader ids and caches them between frames...
Definition: DtTritonShaderUniformManager.h:54
DtSignalConnectionManager myConnections
Definition: DtTritonDrawable.h:402
Triton::Environment * myEnvironment
Definition: DtTritonDrawable.h:366
structure used to communicated triton rendering parameters between imgui/system to triton ...
Definition: DtTritonRenderingParameters.h:20
osg::Vec3 myOceanFloorOrigin
Definition: DtTritonDrawable.h:371
Contains makVrv::DtTritonRenderingParameters structure.
float myLightThreshold
Definition: DtTritonDrawable.h:381
bool myAllowUnderwater
Definition: DtTritonDrawable.h:380
bool myBreakingWavesMapFlag
Definition: DtTritonDrawable.h:375
#define DT_DLL_VRVTRITON
Definition: vrvTriton.h:19
ContextToHandleMap myOsgGcToOsGc
Definition: DtTritonDrawable.h:414
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:42
bool myInitializationComplete
Definition: DtTritonDrawable.h:378
double myUnderwaterVisibility
Definition: DtTritonDrawable.h:385
float mySurgeDepth
Definition: DtTritonDrawable.h:377
double myDefaultDampingDistance
Definition: DtTritonDrawable.h:369
std::vector< unsigned int > myMutableUserShaderVector
Definition: DtTritonDrawable.h:433
bool mySetupFailed
Definition: DtTritonDrawable.h:421
makVrv::DtDe & myDe
Definition: DtTritonDrawable.h:391
osg::ref_ptr< osg::Texture2D > myOceanMaskTexture
Definition: DtTritonDrawable.h:416
bool myMutableShadersDirty
Definition: DtTritonDrawable.h:425
DtTritonCameraManager * myTritonCameraManager
Definition: DtTritonDrawable.h:395
std::vector< osg::ref_ptr< osg::Texture > > myDebugVisualsTextures
Definition: DtTritonDrawable.h:405
osg::ref_ptr< osg::Camera > myDebugHeightMapCamera
Definition: DtTritonDrawable.h:406
osg::Vec3 myOceanFloorNormal
Definition: DtTritonDrawable.h:370
Base class to provide boost signal/slot management.
Definition: DtTritonManager.h:48
bool myShowDebugHeightMapOverlay
Definition: DtTritonDrawable.h:408
A class to manage automatic periodic updating of a breaking wave direction map generated from shapefi...
Definition: DtTritonBreakingWavesMapManager.h:40
class for managing the planar reflections used by triton drawable.
Definition: DtTritonPlanarReflectionManager.h:51
A class to manage automatic periodic updating of a height map generated from the database dynamically...
Definition: DtHeightMapManager.h:95
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:70
An OSG Drawable representing Triton&#39;s infinite ocean. /ingroup vrvTriton.
Definition: DtTritonDrawable.h:62
DtTritonPlanarReflectionManager * myPlanarReflectionManager
Definition: DtTritonDrawable.h:410
boost::signalslib::signal< void()> signal_postInitialize
Emitted when Triton has been initialized.
Definition: DtTritonDrawable.h:245
double myWindSpeed
Definition: DtTritonDrawable.h:399
bool myMutableDisableDrawing
Definition: DtTritonDrawable.h:429
class for managing the link between the triton camera&#39;s and the osg cameras
Definition: DtTritonCameraManager.h:51
Definition: DtTritonImGuiHelper.h:26
Triton::ResourceLoader * myResourceLoader
Definition: DtTritonDrawable.h:365
float myBreakerAmplitude
Definition: DtTritonDrawable.h:387
4 dimensional matrix
DtTritonBreakingWavesMapSuperManager * myBreakingWavesMapSuperManager
Definition: DtTritonDrawable.h:393

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)