VR-Forces 4.8 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) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvTriton/vrvTriton.h>
14 
16 
19 
20 #include <matrix/vlVector.h>
21 
22 #include <osg/Camera>
23 #include <osg/Drawable>
24 #include <osg/TextureCubeMap>
25 #include <tbb/task.h>
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 DtEnvironmentInfo;
44  class DtObserverObject;
45  class DtOsgCullVisitorParameters;
46  class DtOsgSkyObject;
47  class DtPlanarReflection;
48  class DtTritonBreakingWavesMapManager;
49  class DtTritonBreakingWavesMapSuperManager;
50  class DtTritonCameraManager;
51  class DtTritonHeightMapManager;
52  class DtTritonHeightMapSuperManager;
53  class DtTritonPlanarReflectionManager;
54  class DtTritonShaderUniformManager;
55  class DtWindow;
56  class DtGlDebugGroup;
57  class DtTritonImGuiHelper;
58 
61  class DT_DLL_VRVTRITON DtTritonDrawable : public osg::Drawable
62  {
63  protected:
64  typedef std::map< osg::GraphicsContext*, void* > ContextToHandleMap;
65 
66  public:
68  DtTritonDrawable(makVrv::DtDe& de, const DtTritonManager& tritonManager,
69  DtEnvironmentInfo& environmentInfo, bool geocentric,
70  osg::TextureCubeMap* environmentMap = NULL,
72 
73  protected:
75  virtual ~DtTritonDrawable();
76 
78  DtTritonDrawable(const DtTritonDrawable& drawable);
79 
81  DtTritonDrawable &operator=(const DtTritonDrawable &);
82 
83  public:
85  virtual bool isSameKindAs(const Object* obj) const;
86 
88  virtual Object* cloneType() const;
89 
91  virtual Object* clone(const osg::CopyOp& copyop) const;
92 
94  virtual Triton::Ocean* ocean();
95 
97  virtual const Triton::Camera* closestCameraTo(const DtVector& position) const;
98 
100  virtual Triton::Environment* environment();
101 
103  virtual const Triton::Camera* tritonCamera(const osg::Camera* osgCamera) const;
104 
106  virtual void setBeach(const osg::Vec3& beachOrigin, const osg::Vec3& normal);
107 
109  virtual void syncHeightMapToGpu(DtTritonHeightMapManager* heightMapMgr, const osg::State* state);
110 
112  virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
113 
115  virtual void setPlanarReflectionsEnabled(bool enabled);
116  virtual bool planarReflectionsFlag() const;
117 
119  virtual void setBreakingWaveAmplitude(float meters);
121  virtual float getBreakingWaveAmplitude() const;
123 
125  virtual void setHeightMap(bool enabled);
129  virtual bool heightMap() const;
131 
133  virtual void setQuality(DtTritonManager::TritonQuality quality);
137  virtual DtTritonManager::TritonQuality getQuality() const;
139 
141  virtual void setBreakingWavesMap(bool enabled);
145  virtual bool breakingWavesMap() const;
147 
150  virtual void setMaxReflectionWindSpeed(double metersPerSecond);
151 
153  virtual void setUnderwaterFogColor(const osg::Vec4& color);
155  virtual const osg::Vec4& underwaterFogColor() const;
157 
159  virtual void setUnderwaterVisibility(double visibility);
161  virtual double underwaterVisibility() const;
163 
165  virtual void setWaterVisibility(double visibility);
168  virtual double waterVisibility() const;
170 
172  virtual void setSurgeDepth(float depth);
174  virtual float surgeDepth() const;
176 
178  virtual bool isInitialized() const;
179 
182  virtual void setAllowUnderwaterEffects(bool allow);
183 
185  virtual bool allowUnderwaterEffects() const;
186 
187 
189  virtual void setHeightMapResolution(float metersPerTexel);
192  virtual float heightMapResolution() const;
194 
196  virtual void setBreakingWavesMapResolution(float metersPerTexel);
199  virtual float breakingWavesMapResolution() const;
201 
203  virtual void enableReflections(bool enabled);
204 
206  virtual void releaseGLObjects(osg::State* state = 0) const;
207 
209  virtual void setHeightMapChanged();
210 
212  virtual void setBreakingWavesMapChanged();
213 
216  virtual osg::ref_ptr<DtPlanarReflection> getPlanarReflection(osg::Camera* camera);
217 
219  virtual osg::Group* getTritonGeode();
221  virtual const osg::Group* getTritonGeode() const;
223 
225  virtual DtTritonHeightMapManager *getOrCreateHeightMapManager(osg::RenderInfo& renderInfo);
226 
228  virtual DtTritonBreakingWavesMapManager *getOrCreateBreakingWavesMapManager(osg::RenderInfo& renderInfo);
229 
231  virtual int useSlowerHeightMapUpdate() const;
232 
234  virtual void setWindSpeed(double windSpeed);
235 
237  virtual bool geocentricFlag();
238 
241  void setOceanMaskTextureEnabled(bool myOceanMaskTextureEnabled);
242  bool isOceanMaskTextureEnabled() const;
243 
245  boost::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 setUpNearFarIfNecessary(void) const;
281 
283  virtual void updateShader(osg::Node* node, osg::State& state, void* context, Triton::Camera* camera) const;
284 
286  virtual void setSpecularThreshold(float threshold);
288  virtual float specularThreshold() const;
290 
292  virtual void flushInvalidCameras();
293 
294 
296  virtual void onPostTick(void);
297 
299  virtual void prepEnvironmentMap(const DtOsgSkyObject* skyObject, const osg::Camera* camera, const osg::State& state) const;
300 
302  virtual void prepHeightMapAndBreakingWavesMaps(DtTritonHeightMapManager* heightMapMgr, DtTritonBreakingWavesMapManager* breakingWavesMapMgr, const osg::State& state, osg::RenderInfo& renderInfo) const;
303 
305  virtual void prepReflectionMap(osg::ref_ptr<DtPlanarReflection> planarReflectionCamera, const osg::State& state) const;
306 
308  virtual void setupTritonLightFogVisibility(const osg::Camera* camera, DtOsgSkyObject* skyObject, bool isAboveWater, bool skyEnabled) const;
309 
311  virtual void setUpTritonParticlesAdditiveBlend(void) const;
312 
314  virtual void setUpGodRaysFading(const DtOsgCullVisitorParameters* params) const;
315 
317  virtual void setUpZoomLevel(const DtOsgCullVisitorParameters* params) const;
318 
320  virtual void updatePrecipitation(DtOsgSkyObject* skyObject, bool isAboveWater) const;
321 
323  virtual void setUpViewport(Triton::Camera* tritonCamera, osg::Camera* camera) const;
324 
326  virtual void checkGlErrors(void) const;
327 
329  virtual void restoreOsgState(osg::State& state) const;
330 
332  virtual void updatePlanarReflectionCamera(DtPlanarReflection* planarReflection, bool skyEnabled) const;
333 
336  virtual void slot_windowToBeDestroyed(DtWindow* window);
337 
342  virtual void addGraphicsContextIfNecessary(osg::GraphicsContext* key);
343 
345  virtual void setUpOceanMaskIfNecessary();
346 
348  virtual const osg::StateSet* shadowTechniqueStateSet(const osg::Camera* osgCamera) const;
349 
351  virtual void updateSunIntensity(void) const;
352 
354  virtual void updateLighingBasedonSensorFX(osg::Camera* osgCamera) const;
355 protected:
356 
358 
359  Triton::ResourceLoader *myResourceLoader;
360  Triton::Environment *myEnvironment;
362 
367 
368  bool myHeightMapFlag, myHeightMapChangedFlag;
369  bool myBreakingWavesMapFlag, myBreakingWavesMapChangedFlag;
373  bool myPrecipitationOverridden, mySavedPrecipitationState;
374 
378 
381 
383 
385 
387 
389 
391 
393 
395 
396  double myWindSpeed;
397 
400 
402 
405 
406  std::vector<osg::ref_ptr<osg::Camera> > myDebugVisualsCameras;
407  std::vector<osg::ref_ptr<osg::Texture> > myDebugVisualsTextures;
411 
413 
415 
417 
420 
422 
424 
425  // when the quality changes the shaders have to be reloaded.
426  // This flag lets the updateShaders function know to force a reload.
427  mutable bool myMutableShadersDirty;
428 
429  // mutable due to osg limitations of drawImplementation being const.
430  // This disables the ocean if the shaders fail to compile.
432 
433  // mutable due to osg limitations of drawImplementation being const.
434  // IMGui controlled flag to freeze the ocean sim.
435  mutable bool myMutableSimFrozen;
436 
437  // mutable due to osg limitations of drawImplementation being const.
438  // holds the compiled shader ids
439  mutable std::vector<unsigned int> myMutableUserShaderVector;
440 
443  double myFarZConfig;
445 
446 
448 
449  friend class DtTritonImGuiHelper;
450 
451 };
452 }
double myNearZConfig
Definition: DtTritonDrawable.h:442
std::vector< osg::ref_ptr< osg::Camera > > myDebugVisualsCameras
Definition: DtTritonDrawable.h:406
A class to manage automatic periodic updating of a height map generated from the database dynamically...
Definition: DtTritonHeightMapManager.h:122
bool myMutableOceanMaskTextureSetup
Definition: DtTritonDrawable.h:419
bool myHeightMapFlag
Definition: DtTritonDrawable.h:368
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:64
osg::Vec4 myUnderwaterFogColor
Definition: DtTritonDrawable.h:379
DtVector4< double > myVrvLatLongMinMax
Definition: DtTritonDrawable.h:421
double myFarZConfig
Definition: DtTritonDrawable.h:443
osg::ref_ptr< osg::ClipNode > myClipNode
Definition: DtTritonDrawable.h:394
DtTritonImGuiHelper * myImGuiHelper
Definition: DtTritonDrawable.h:447
Definition: featureContext.h:37
bool myOceanMaskTextureEnabled
Definition: DtTritonDrawable.h:444
Definition: surface.h:47
unsigned int GLuint
Definition: DtGlTextureBufferObject.h:17
A class to manage multiple DtTritonHeightMapManager(s) (one per camera)
Definition: DtTritonHeightMapSuperManager.h:33
float myDefaultVisibility
Definition: DtTritonDrawable.h:370
An OSG implementation of the sky.
Definition: DtOsgSkyObject.h:46
A class for managing multiple breaking wave map managers. There is a manager for each osg camera...
Definition: DtTritonBreakingWavesMapSuperManager.h:28
A camera for rendering Triton&#39;s planar reflection texture.
Definition: DtPlanarReflection.h:27
GLuint myDefaultVertShaderId
Definition: DtTritonDrawable.h:399
Triton::Ocean * myOcean
Definition: DtTritonDrawable.h:361
4 dimensional vector
osg::ref_ptr< osg::Texture > myDebugHeightMapVisualTexture
Definition: DtTritonDrawable.h:409
osg::ref_ptr< osg::TextureCubeMap > myCubeMap
Definition: DtTritonDrawable.h:357
makVrv::DtEnvironmentInfo & myEnvironmentInfo
Definition: DtTritonDrawable.h:384
Contains the declaration of the makVrv::DtTritonManager class.
Definition: DtTritonManager.h:193
bool myGeocentricFlag
Definition: DtTritonDrawable.h:366
DtTritonShaderUniformManager * myShaderUniformManger
Definition: DtTritonDrawable.h:414
const DtTritonManager & myTritonManager
Definition: DtTritonDrawable.h:403
bool myNearFarValuesInitializedFromConfig
Definition: DtTritonDrawable.h:441
Contains DLL export macros.
float mySpecularThreshold
Definition: DtTritonDrawable.h:377
class for managing the shader uniforms for triton, gets the shader ids and caches them between frames...
Definition: DtTritonShaderUniformManager.h:40
DtSignalConnectionManager myConnections
Definition: DtTritonDrawable.h:404
Triton::Environment * myEnvironment
Definition: DtTritonDrawable.h:360
osg::Vec3 myOceanFloorOrigin
Definition: DtTritonDrawable.h:365
float myLightThreshold
Definition: DtTritonDrawable.h:376
bool myAllowUnderwater
Definition: DtTritonDrawable.h:375
bool myMutableSimFrozen
Definition: DtTritonDrawable.h:435
bool myBreakingWavesMapFlag
Definition: DtTritonDrawable.h:369
#define DT_DLL_VRVTRITON
Definition: vrvTriton.h:19
ContextToHandleMap myOsgGcToOsGc
Definition: DtTritonDrawable.h:416
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:24
The osg cull vistor parameters class provides additional culling and intersector parameters for choos...
Definition: DtOsgCullVisitorParameters.h:38
bool myInitializationComplete
Definition: DtTritonDrawable.h:372
double myUnderwaterVisibility
Definition: DtTritonDrawable.h:380
float mySurgeDepth
Definition: DtTritonDrawable.h:371
double myDefaultDampingDistance
Definition: DtTritonDrawable.h:363
std::vector< unsigned int > myMutableUserShaderVector
Definition: DtTritonDrawable.h:439
DtTritonHeightMapSuperManager * myHeightMapSuperManager
Definition: DtTritonDrawable.h:388
boost::signal< void()> signal_postInitialize
Emitted when Triton has been initialized.
Definition: DtTritonDrawable.h:245
bool mySetupFailed
Definition: DtTritonDrawable.h:423
makVrv::DtDe & myDe
Definition: DtTritonDrawable.h:386
osg::ref_ptr< osg::Texture2D > myOceanMaskTexture
Definition: DtTritonDrawable.h:418
bool myMutableShadersDirty
Definition: DtTritonDrawable.h:427
DtTritonCameraManager * myTritonCameraManager
Definition: DtTritonDrawable.h:392
std::vector< osg::ref_ptr< osg::Texture > > myDebugVisualsTextures
Definition: DtTritonDrawable.h:407
osg::ref_ptr< osg::Camera > myDebugHeightMapCamera
Definition: DtTritonDrawable.h:408
osg::Vec3 myOceanFloorNormal
Definition: DtTritonDrawable.h:364
Base class to provide boost signal/slot management.
DtTritonManager::TritonQuality myQuality
Definition: DtTritonDrawable.h:401
Definition: DtTritonManager.h:48
bool myShowDebugHeightMapOverlay
Definition: DtTritonDrawable.h:410
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:38
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:61
TritonQuality
Definition: DtTritonManager.h:192
DtTritonPlanarReflectionManager * myPlanarReflectionManager
Definition: DtTritonDrawable.h:412
double myWindSpeed
Definition: DtTritonDrawable.h:396
bool myMutableDisableDrawing
Definition: DtTritonDrawable.h:431
bool mySavedPrecipitationState
Definition: DtTritonDrawable.h:373
class for managing the link between the triton camera&#39;s and the osg cameras
Definition: DtTritonCameraManager.h:42
Definition: DtTritonImGuiHelper.h:26
GLuint myDefaultFragShaderId
Definition: DtTritonDrawable.h:398
Triton::ResourceLoader * myResourceLoader
Definition: DtTritonDrawable.h:359
float myBreakerAmplitude
Definition: DtTritonDrawable.h:382
4 dimensional matrix
DtTritonBreakingWavesMapSuperManager * myBreakingWavesMapSuperManager
Definition: DtTritonDrawable.h:390

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)