VR-Forces 4.10 Class Documentation
 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) 2021 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,
73 
74  protected:
76  virtual ~DtTritonDrawable();
77 
78  private:
79 
81  DtTritonDrawable() = delete;
82 
84  DtTritonDrawable(const DtTritonDrawable& drawable) = delete;
85 
87  DtTritonDrawable& operator=(const DtTritonDrawable&) = delete;
88 
89  public:
91  virtual bool isSameKindAs(const Object* obj) const;
92 
94  virtual Object* cloneType() const;
95 
97  virtual Object* clone(const osg::CopyOp& copyop) const;
98 
100  virtual Triton::Ocean* ocean();
101 
103  virtual const Triton::Camera* closestCameraTo(const DtVector& position) const;
104 
106  virtual Triton::Environment* environment();
107 
109  virtual const Triton::Camera* tritonCamera(const osg::Camera* osgCamera) const;
110 
112  virtual void setBeach(const osg::Vec3& beachOrigin, const osg::Vec3& normal);
113 
115  virtual void syncHeightMapToGpu(DtHeightMapManager* heightMapMgr, const osg::State* state, const osg::Camera* camera);
116 
118  virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
119 
121  virtual void setPlanarReflectionsEnabled(bool enabled);
122  virtual bool planarReflectionsFlag() const;
123 
125  virtual void setBreakingWaveAmplitude(float meters);
127  virtual float getBreakingWaveAmplitude() const;
129 
131  virtual void setHeightMap(bool enabled);
135  virtual bool heightMap() const;
137 
139  virtual void setQuality(DtTritonManager::TritonQuality quality);
143  virtual DtTritonManager::TritonQuality getQuality() const;
145 
147  virtual void setBreakingWavesMap(bool enabled);
151  virtual bool breakingWavesMap() const;
153 
156  virtual void setMaxReflectionWindSpeed(double metersPerSecond);
157 
159  virtual void setUnderwaterFogColor(const osg::Vec4& color);
161  virtual const osg::Vec4& underwaterFogColor() const;
163 
165  virtual void setUnderwaterVisibility(double visibility);
167  virtual double underwaterVisibility() const;
169 
171  virtual void setWaterVisibility(double visibility);
174  virtual double waterVisibility() const;
176 
178  virtual void setSurgeDepth(float depth);
180  virtual float surgeDepth() const;
182 
184  virtual bool isInitialized() const;
185 
188  virtual void setAllowUnderwaterEffects(bool allow);
189 
191  virtual bool allowUnderwaterEffects() const;
192 
193 
195  virtual void setHeightMapResolution(float metersPerTexel);
198  virtual float heightMapResolution() const;
200 
202  virtual void setBreakingWavesMapResolution(float metersPerTexel);
205  virtual float breakingWavesMapResolution() const;
207 
209  virtual void enableReflections(bool enabled);
210 
212  virtual void releaseGLObjects(osg::State* state = 0) const;
213 
215  virtual void setHeightMapChanged();
216 
218  virtual void setBreakingWavesMapChanged();
219 
222  virtual osg::ref_ptr<DtPlanarReflection> getPlanarReflection(osg::Camera* camera);
223 
225  virtual osg::Group* getTritonGeode();
227  virtual const osg::Group* getTritonGeode() const;
229 
231  virtual DtHeightMapManager* getOrCreateHeightMapManager(osg::RenderInfo& renderInfo);
232 
234  virtual DtTritonBreakingWavesMapManager* getOrCreateBreakingWavesMapManager(osg::RenderInfo& renderInfo);
235 
237  virtual void setWindSpeed(double windSpeed);
238 
240  virtual bool geocentricFlag();
241 
244  virtual void setOceanMaskTextureEnabled(bool myOceanMaskTextureEnabled);
245  virtual bool isOceanMaskTextureEnabled() const;
246 
248  virtual const DtTritonRenderingParameters& renderingParameters(void) const;
249 
251  virtual DtTritonRenderingParameters& renderingParameters(void);
252 
254  boost::signalslib::signal<void()> signal_postInitialize;
255 
256  protected:
257 
259  virtual void shaderUpdateLightUniforms(osg::RenderInfo& info, void* context, Triton::Camera* camera) const;
260 
262  virtual void updateImguiAndConstantsOffOfImgui();
264  virtual void updateImguiHeightMapDebugOverlay(bool needUpdate, osg::RenderInfo& renderInfo);
265 
268  virtual bool setup(osg::RenderInfo& renderInfo);
269 
271  virtual void cleanup(void);
272 
274  virtual void removePlanarReflections();
275 
277  virtual void slot_reloadShader();
278 
280  virtual void initShaderUniformHandles(void* context, Triton::Camera* camera) const;
281 
283  virtual void applyLighting(osg::RenderInfo& info, void* context, Triton::Camera* camera) const;
284 
286  virtual void applyQuality() const;
287 
289  virtual void setUpNearFarIfNecessary(void) const;
290 
292  virtual void updateShader(osg::Node* node, osg::State& state, void* context, Triton::Camera* camera) const;
293 
295  virtual void setSpecularThreshold(float threshold);
297  virtual float specularThreshold() const;
299 
301  virtual void slot_heightMapChanged(DtHeightMapManager& manager);
302 
304  virtual void slot_heightMapCameraChanged();
305 
307  virtual void flushInvalidCameras();
308 
309 
311  virtual void onPostTick(void);
312 
314  virtual void prepEnvironmentMap(const DtOsgSkyObject* skyObject, const osg::Camera* camera, const osg::State& state) const;
315 
317  virtual void prepHeightMapAndBreakingWavesMaps(DtHeightMapManager* heightMapMgr, DtTritonBreakingWavesMapManager* breakingWavesMapMgr, const osg::State& state, osg::RenderInfo& renderInfo) const;
318 
320  virtual void prepReflectionMap(osg::ref_ptr<DtPlanarReflection> planarReflectionCamera, const osg::State& state) const;
321 
323  virtual void setupTritonLightFogVisibility(const osg::Camera* camera, DtOsgSkyObject* skyObject, bool isAboveWater, bool skyEnabled) const;
324 
326  virtual void setUpTritonParticlesAdditiveBlend(void) const;
327 
329  virtual void setUpGodRaysFading(const DtOsgCullVisitorParameters* params) const;
330 
332  virtual void setUpZoomLevel(const DtOsgCullVisitorParameters* params) const;
333 
335  virtual void updatePrecipitation(DtOsgSkyObject* skyObject, bool isAboveWater) const;
336 
338  virtual void setUpViewport(Triton::Camera* tritonCamera, osg::Camera* camera) const;
339 
341  virtual void checkGlErrors(void) const;
342 
344  virtual void restoreOsgState(osg::State& state) const;
345 
347  virtual void updatePlanarReflectionCamera(DtPlanarReflection* planarReflection, bool skyEnabled) const;
348 
351  virtual void slot_windowToBeDestroyed(DtWindow* window);
352 
357  virtual void addGraphicsContextIfNecessary(osg::GraphicsContext* key);
358 
360  virtual void setUpOceanMaskIfNecessary();
361 
363  virtual const osg::StateSet* shadowTechniqueStateSet(const osg::Camera* osgCamera) const;
364 
366  virtual void updateSunIntensity(void) const;
367 
369  virtual void updateLighingBasedonSensorFX(osg::Camera* osgCamera) const;
370  protected:
371 
373 
374  Triton::ResourceLoader* myResourceLoader;
375  Triton::Environment* myEnvironment;
377 
382 
383  bool myHeightMapFlag, myHeightMapChangedFlag;
384  bool myBreakingWavesMapFlag, myBreakingWavesMapChangedFlag;
388  bool myPrecipitationOverridden, mySavedPrecipitationState;
389 
393 
396 
398 
400 
402 
404 
406 
408 
409  double myWindSpeed;
410 
412 
415 
416  std::vector<osg::ref_ptr<osg::Camera> > myDebugVisualsCameras;
417  std::vector<osg::ref_ptr<osg::Texture> > myDebugVisualsTextures;
421 
423 
425 
427 
430 
432 
434 
435  // when the quality changes the shaders have to be reloaded.
436  // This flag lets the updateShaders function know to force a reload.
437  mutable bool myMutableShadersDirty;
438 
439  // mutable due to osg limitations of drawImplementation being const.
440  // This disables the ocean if the shaders fail to compile.
442 
443  // mutable due to osg limitations of drawImplementation being const.
444  // IMGui controlled flag to freeze the ocean sim.
445  mutable bool myMutableSimFrozen;
446 
447  // mutable due to osg limitations of drawImplementation being const.
448  // holds the compiled shader ids
449  mutable std::vector<unsigned int> myMutableUserShaderVector;
450 
453  double myFarZConfig;
455 
456 
458 
459  friend class DtTritonImGuiHelper;
460 
462 
463  };
464 }
double myNearZConfig
Definition: DtTritonDrawable.h:452
std::vector< osg::ref_ptr< osg::Camera > > myDebugVisualsCameras
Definition: DtTritonDrawable.h:416
DtTritonRenderingParameters myRenderingParameters
Definition: DtTritonDrawable.h:461
bool myMutableOceanMaskTextureSetup
Definition: DtTritonDrawable.h:429
bool myHeightMapFlag
Definition: DtTritonDrawable.h:383
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:25
std::map< osg::GraphicsContext *, void * > ContextToHandleMap
Definition: DtTritonDrawable.h:65
osg::Vec4 myUnderwaterFogColor
Definition: DtTritonDrawable.h:394
DtVector4< double > myVrvLatLongMinMax
Definition: DtTritonDrawable.h:431
double myFarZConfig
Definition: DtTritonDrawable.h:453
osg::ref_ptr< osg::ClipNode > myClipNode
Definition: DtTritonDrawable.h:407
DtTritonImGuiHelper * myImGuiHelper
Definition: DtTritonDrawable.h:457
Definition: featureContext.h:37
bool myOceanMaskTextureEnabled
Definition: DtTritonDrawable.h:454
Definition: surface.h:47
float myDefaultVisibility
Definition: DtTritonDrawable.h:385
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:376
4 dimensional vector
osg::ref_ptr< osg::Texture > myDebugHeightMapVisualTexture
Definition: DtTritonDrawable.h:419
osg::ref_ptr< osg::TextureCubeMap > myCubeMap
Definition: DtTritonDrawable.h:372
makVrv::DtEnvironmentInfo & myEnvironmentInfo
Definition: DtTritonDrawable.h:399
Contains the declaration of the makVrv::DtTritonManager class.
Definition: DtTritonManager.h:199
bool myGeocentricFlag
Definition: DtTritonDrawable.h:381
DtTritonShaderUniformManager * myShaderUniformManger
Definition: DtTritonDrawable.h:424
const DtTritonManager & myTritonManager
Definition: DtTritonDrawable.h:413
bool myNearFarValuesInitializedFromConfig
Definition: DtTritonDrawable.h:451
Contains DLL export macros.
float mySpecularThreshold
Definition: DtTritonDrawable.h:392
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:414
Triton::Environment * myEnvironment
Definition: DtTritonDrawable.h:375
structure used to communicated triton rendering parameters between imgui/system to triton ...
Definition: DtTritonRenderingParameters.h:20
osg::Vec3 myOceanFloorOrigin
Definition: DtTritonDrawable.h:380
Contains makVrv::DtTritonRenderingParameters structure.
float myLightThreshold
Definition: DtTritonDrawable.h:391
bool myAllowUnderwater
Definition: DtTritonDrawable.h:390
bool myMutableSimFrozen
Definition: DtTritonDrawable.h:445
bool myBreakingWavesMapFlag
Definition: DtTritonDrawable.h:384
#define DT_DLL_VRVTRITON
Definition: vrvTriton.h:19
ContextToHandleMap myOsgGcToOsGc
Definition: DtTritonDrawable.h:426
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:38
bool myInitializationComplete
Definition: DtTritonDrawable.h:387
double myUnderwaterVisibility
Definition: DtTritonDrawable.h:395
float mySurgeDepth
Definition: DtTritonDrawable.h:386
double myDefaultDampingDistance
Definition: DtTritonDrawable.h:378
std::vector< unsigned int > myMutableUserShaderVector
Definition: DtTritonDrawable.h:449
bool mySetupFailed
Definition: DtTritonDrawable.h:433
makVrv::DtDe & myDe
Definition: DtTritonDrawable.h:401
osg::ref_ptr< osg::Texture2D > myOceanMaskTexture
Definition: DtTritonDrawable.h:428
bool myMutableShadersDirty
Definition: DtTritonDrawable.h:437
DtTritonCameraManager * myTritonCameraManager
Definition: DtTritonDrawable.h:405
std::vector< osg::ref_ptr< osg::Texture > > myDebugVisualsTextures
Definition: DtTritonDrawable.h:417
osg::ref_ptr< osg::Camera > myDebugHeightMapCamera
Definition: DtTritonDrawable.h:418
osg::Vec3 myOceanFloorNormal
Definition: DtTritonDrawable.h:379
Base class to provide boost signal/slot management.
DtTritonManager::TritonQuality myQuality
Definition: DtTritonDrawable.h:411
Definition: DtTritonManager.h:48
bool myShowDebugHeightMapOverlay
Definition: DtTritonDrawable.h:420
A class to manage automatic periodic updating of a breaking wave direction map generated from shapefi...
Definition: DtTritonBreakingWavesMapManager.h:28
class for managing the planar reflections used by triton drawable.
Definition: DtTritonPlanarReflectionManager.h:48
A class to manage automatic periodic updating of a height map generated from the database dynamically...
Definition: DtHeightMapManager.h:94
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
An OSG Drawable representing Triton&#39;s infinite ocean.
Definition: DtTritonDrawable.h:62
TritonQuality
Definition: DtTritonManager.h:198
DtTritonPlanarReflectionManager * myPlanarReflectionManager
Definition: DtTritonDrawable.h:422
boost::signalslib::signal< void()> signal_postInitialize
Emitted when Triton has been initialized.
Definition: DtTritonDrawable.h:254
double myWindSpeed
Definition: DtTritonDrawable.h:409
bool myMutableDisableDrawing
Definition: DtTritonDrawable.h:441
bool mySavedPrecipitationState
Definition: DtTritonDrawable.h:388
class for managing the link between the triton camera&#39;s and the osg cameras
Definition: DtTritonCameraManager.h:42
Definition: DtTritonImGuiHelper.h:26
Triton::ResourceLoader * myResourceLoader
Definition: DtTritonDrawable.h:374
float myBreakerAmplitude
Definition: DtTritonDrawable.h:397
4 dimensional matrix
DtTritonBreakingWavesMapSuperManager * myBreakingWavesMapSuperManager
Definition: DtTritonDrawable.h:403

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)