VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtTritonManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2025 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 #include <vrvTriton/vrvTriton.h>
12 
13 #include <vrvCore/DtEnvironment.h>
14 
15 #include <vlutil/vlTime.h>
16 
17 #include <vrvUtil/signalslib.h>
19 
20 #include <osg/ref_ptr>
21 
22 namespace Triton
23 {
24  class WakeGenerator;
25  class WakeGeneratorParameters;
26  class RotorWash;
27  class Impact;
28  class TidalStreamWake;
29 }
30 
31 namespace osg
32 {
33  class Camera;
34 }
35 
36 namespace makVrv
37 {
38  class DtCoordinateSystem;
39  class DtDe;
40  class DtDriver;
41  class DtDynamicOceanObject;
42  class DtPlanarReflectionCamera;
43  class DtRenderer;
44  class DtTritonDrawable;
45  class DtTritonEventProcessor;
46  class DtTritonGroup;
47  class DtDynamicOceanObjectManager;
48 
50  {
51  public:
53  TritonQuality_Good = 0,
55  TritonQuality_Best
56  };
57 
59  TritonSpectralModel_JonSwap = 0 // (default)
60  , TritonSpectralModel_Pierson_Moskowitz
61  , TritonSpectralModel_Tessendorf
62  };
63 
64  public:
66  static DtTritonManager& instance(makVrv::DtDe& de);
67 
69  virtual ~DtTritonManager();
70 
71  protected:
74  public:
75  virtual void addToScene();
76 
77  virtual void oceanLayerAdded();
78  virtual void oceanLayerToBeDeleted();
79 
80  virtual void setSeaLevel(float level);
81  virtual float seaLevel() const;
82 
83  virtual void setElevationLod(double maxElevation);
84  virtual double elevationLod() const;
85 
90  virtual void setWind(double speed, double direction, double fetch = 0.0);
91 
100  virtual void setDouglasSeaState(
101  DtDouglasSeaState::Scale seaState, double seaStateDirection,
102  DtDouglasSwellState::Scale swellState, double swellStateDirection);
103 
104  virtual void addSwell(float wavelength, float waveHeight, float radiansClockwiseFromNorth);
105  virtual void clearSwells();
106 
109  virtual void setChoppiness(float chop);
110 
111  // Water visibility when below water
112  virtual bool getIsUnderwater(const osg::Camera* osgCamera) const;
113  virtual void setUnderwaterVisibility(double distance);
114  virtual bool setUnderwaterFogColor(const DtVector& fogColor);
115  virtual void setUnderwaterFogEnabled(bool enabled);
116 
117  // Water transparency when above water
118  virtual double waterVisibility() const;
119  virtual void setWaterVisibility(double distance);
120  virtual void setSurfaceTransparency(double transparency);
121 
122  // Depth at which wave displacements start getting dampened
123  virtual void setSurgeDepth(float depth);
124  virtual float getSurgeDepth() const;
125 
126  virtual void setDepthOffset(float offset);
127 
130  virtual bool intersect(const DtVector& position, DtVector& positionOut,
131  DtVector& normalOut, float waterlineAdjustment = 0.0);
132 
138  virtual bool intersectSeaLevel(const DtVector& position,
139  const DtVector& direction, DtVector& positionOut);
140 
146  virtual bool getHeight(const DtVector& position, const DtVector& direction,
147  double& height, DtVector& normalOut);
148 
149  virtual Triton::WakeGenerator* createWake(
150  const Triton::WakeGeneratorParameters& parameters);
151 
152  virtual Triton::RotorWash* createRotorWash(double rotorDiameter);
153 
154  virtual Triton::Impact* createImpact(double impactorDiameter, double mass,
155  double sprayScale);
156 
162  virtual Triton::TidalStreamWake* createTidalStreamWake(double size,
163  double draft, double maxWaveHeight, double offset);
164 
166  virtual void setWaveSprayEffects(bool waveSprayEnabled);
167  virtual bool waveSprayEffects() const;
168 
170  virtual void setDecalEffects(bool decalsEnabled);
171  virtual bool decalEffects() const;
172 
174  virtual void setGodRayEffects(bool godRaysEnabled);
175  virtual bool godRayEffects() const;
176 
178  virtual int numberOfPropWashes() const;
179 
183  virtual int maxPropWashes() const;
184 
185  virtual void setBreakingWaveAmplitude(float meters);
186  virtual float getBreakingWaveAmplitude() const;
187 
189  virtual float getMaximumWaveHeight();
190 
191  virtual void setSeaState(DtBeaufortWindScale::Scale beaufortScale);
192  virtual DtBeaufortWindScale::Scale seaState() const;
193 
194  virtual void setCorrelateIntersectionsToVisuals(bool visualCorrelation);
195  virtual bool correlateIntersectionsToVisuals() const;
196 
198  virtual void setIncludeWakesInIntersections(bool includeWakes);
201  virtual bool includeWakesInIntersections() const;
203 
206  virtual void setOceanMaskTextureEnabled(bool enable);
207  virtual bool isOceanMaskTextureEnabled() const;
208 
219  virtual bool isOverWater(const DtVector& localPosition, bool isVisible = true);
220 
221  virtual bool addedToScene();
222 
224  virtual bool getIsVisible() const;
225 
228  virtual DtTime oceanTime() const;
229 
230  virtual DtTritonDrawable* tritonDrawable() const;
231 
233  virtual double getOceanZoomOverride() const;
234  virtual void setOceanZoomOverride(double zoomOverride);
235 
237  virtual void setFreezeEnabled(bool enable);
240  virtual bool freezeEnabled() const;
241 
243  virtual void setFreezeTime(DtTime freezeAtTime);
245  virtual DtTime freezeTime(void) const;
246 
248  virtual bool LockHeightData();
250  virtual bool UnLockHeightData();
251  virtual bool IsLockedHeightData() const;
253 
255  virtual DtTritonGroup* tritonGroup();
257  virtual const DtTritonGroup* tritonGroup() const;
259 
260  public:
261  boost::signalslib::signal<void()> signal_oceanInitialized;
262  boost::signalslib::signal<void()> signal_addedToScene;
263  boost::signalslib::signal<void()> signal_removedFromScene;
264  boost::signalslib::signal<void()> signal_oceanToBeDestroyed;
265 
267  boost::signalslib::signal<void (DtPlanarReflectionCamera* reflection)> signal_planarReflectionCreated;
268 
269  protected:
270  void slot_coordinateSystemChanged();
271  void slot_postInitialize();
272  void slot_driverToBeDestroyed(DtDriver& driver);
273  virtual void installEventProcessor();
274 
277  void slot_postUpdate();
278 
280  virtual DtDynamicOceanObject* dynamicOcean() const;
281 
285  virtual bool intersectMslGeocentric(const DtVector& rayOrigin,
286  const DtVector& rayDirection, const double seaLevel, DtVector& positionOut);
287 
291  virtual bool intersectMslFlat(const DtVector& rayOrigin,
292  const DtVector& rayDirection, const double seaLevel, DtVector& positionOut);
293 
295  virtual bool intersectRaySphere(const DtVector& rayOrigin,
296  const DtVector& rayDirection, const DtVector& sphereCenter,
297  const double sphereSize, DtVector& hitPoint);
298 
299  protected:
301 
303 
306 
309 
311  float mySeaLevel;
314  bool myIncludeWakesInIntersections = true;
318 
320  bool myFreezeEnabled = false;
321  DtTime myFreezeAtTime = 0;
322 
323  static const float theMaxWindSpeedForWindFetch;
324 
327  DtCoordinateSystem* myCoordinateSystem = nullptr;
328 
329  boost::signalslib::connection myDriverToBeDestroyedConnection;
330  boost::signalslib::connection myPostInitializeConnection;
331 
333 
335  };
336 }
osg::ref_ptr< DtTritonDrawable > myTritonDrawable
Definition: DtTritonManager.h:307
DtDe & myDe
Definition: DtTritonManager.h:300
LOD node that switches by observer elevation ranges.
Definition: DtTritonGroup.h:34
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
float mySurgeDepth
Definition: DtTritonManager.h:334
The declaration of the makVrv::DtEnvironment class.
boost::signalslib::signal< void()> signal_oceanToBeDestroyed
Definition: DtTritonManager.h:264
float myElevationRange
Definition: DtTritonManager.h:310
boost::signalslib::signal< void(DtPlanarReflectionCamera *reflection)> signal_planarReflectionCreated
Signal emitted when a new planar reflection has been created.
Definition: DtTritonManager.h:267
DtDynamicOceanObjectManager & myDynamicOceanObjectManager
Definition: DtTritonManager.h:302
DtTritonEventProcessor * myEventProcessor
Definition: DtTritonManager.h:305
Definition: featureContext.h:36
DT_DLL_VRVCORE DtTaitBryan level(const DtCoordinateSystem &cs, const DtVector &localOrigin, double topoHeading)
Returns a level orientation with the topographic heading.
void slot_postInitialize(makVrv::DtDe &de)
voidpf void uLong size
Definition: ioapi.h:39
DtSignalConnectionManager myConnections
Definition: DtTritonManager.h:304
bool myVisualIntersections
Definition: DtTritonManager.h:313
double myOceanZoomOverride
Definition: DtTritonManager.h:316
The declaration of the makVrv::DtBeaufortWindScale class.
Manager that provides direct access to the dynamic ocean objects in use within a display engine...
Definition: DtDynamicOceanObjectManager.h:27
Contains DLL export macros.
double myWaterVisibility
Definition: DtTritonManager.h:312
Scale
Definition: DtDouglasSeaScale.h:33
static const float theMaxWindSpeedForWindFetch
Definition: DtTritonManager.h:323
boost::signalslib::signal< void()> signal_removedFromScene
Definition: DtTritonManager.h:263
The base dynamic ocean object. An actual (do-nothing) implementation is provided so that an implement...
Definition: DtDynamicOceanObject.h:29
Scale
Definition: DtBeaufortWindScale.h:29
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points. Coordinates are in local database coordinates The coordinat...
The DtDriver is an abstract class. Developers derive from this to create logic that &quot;directs&quot; things ...
Definition: DtDriver.h:30
Definition: DtTritonManager.h:54
boost::signalslib::signal< void()> signal_addedToScene
Definition: DtTritonManager.h:262
boost::signalslib::connection myPostInitializeConnection
Definition: DtTritonManager.h:330
#define DT_DLL_VRVTRITON
Definition: vrvTriton.h:19
Scale
Definition: DtDouglasSeaScale.h:114
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
bool myOceanMaskTextureEnabled
Definition: DtTritonManager.h:317
osg::ref_ptr< DtTritonGroup > myTritonRoot
Definition: DtTritonManager.h:308
float mySeaLevel
Definition: DtTritonManager.h:311
boost::signalslib::connection myDriverToBeDestroyedConnection
Definition: DtTritonManager.h:329
Definition: DtTritonEventProcessor.h:22
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:40
Definition: DtTritonManager.h:49
TritonSpectralModel
Definition: DtTritonManager.h:58
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
TritonQuality
Definition: DtTritonManager.h:52
boost::signalslib::signal< void()> signal_oceanInitialized
Definition: DtTritonManager.h:261
voidpf uLong offset
Definition: ioapi.h:42
float myBreakerAmplitude
Definition: DtTritonManager.h:332
bool myDecalEffects
Definition: DtTritonManager.h:315

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)