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) 2023 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 
177  virtual void setBreakingWaveAmplitude(float meters);
178  virtual float getBreakingWaveAmplitude() const;
179 
181  virtual float getMaximumWaveHeight();
182 
183  virtual void setSeaState(DtBeaufortWindScale::Scale beaufortScale);
184  virtual DtBeaufortWindScale::Scale seaState() const;
185 
186  virtual void setCorrelateIntersectionsToVisuals(bool visualCorrelation);
187  virtual bool correlateIntersectionsToVisuals() const;
188 
190  virtual void setIncludeWakesInIntersections(bool includeWakes);
193  virtual bool includeWakesInIntersections() const;
195 
198  virtual void setOceanMaskTextureEnabled(bool enable);
199  virtual bool isOceanMaskTextureEnabled() const;
200 
211  virtual bool isOverWater(const DtVector& localPosition, bool isVisible = true);
212 
213  virtual bool addedToScene();
214 
216  virtual bool getIsVisible() const;
217 
220  virtual DtTime oceanTime() const;
221 
222  virtual DtTritonDrawable* tritonDrawable() const;
223 
225  virtual double getOceanZoomOverride() const;
226  virtual void setOceanZoomOverride(double zoomOverride);
227 
229  virtual void setFreezeEnabled(bool enable);
232  virtual bool freezeEnabled() const;
233 
235  virtual void setFreezeTime(DtTime freezeAtTime);
237  virtual DtTime freezeTime(void) const;
238 
240  virtual bool LockHeightData();
242  virtual bool UnLockHeightData();
243  virtual bool IsLockedHeightData() const;
245 
247  virtual DtTritonGroup* tritonGroup();
249  virtual const DtTritonGroup* tritonGroup() const;
251 
252  public:
253  boost::signalslib::signal<void()> signal_oceanInitialized;
254  boost::signalslib::signal<void()> signal_addedToScene;
255  boost::signalslib::signal<void()> signal_removedFromScene;
256  boost::signalslib::signal<void()> signal_oceanToBeDestroyed;
257 
259  boost::signalslib::signal<void (DtPlanarReflectionCamera* reflection)> signal_planarReflectionCreated;
260 
261  protected:
262  void slot_coordinateSystemChanged();
263  void slot_postInitialize();
264  void slot_driverToBeDestroyed(DtDriver& driver);
265  virtual void installEventProcessor();
266 
269  void slot_postUpdate();
270 
272  virtual DtDynamicOceanObject* dynamicOcean() const;
273 
277  virtual bool intersectMslGeocentric(const DtVector& rayOrigin,
278  const DtVector& rayDirection, const double seaLevel, DtVector& positionOut);
279 
283  virtual bool intersectMslFlat(const DtVector& rayOrigin,
284  const DtVector& rayDirection, const double seaLevel, DtVector& positionOut);
285 
287  virtual bool intersectRaySphere(const DtVector& rayOrigin,
288  const DtVector& rayDirection, const DtVector& sphereCenter,
289  const double sphereSize, DtVector& hitPoint);
290 
291  protected:
293 
295 
298 
301 
303  float mySeaLevel;
306  bool myIncludeWakesInIntersections = true;
310 
312  bool myFreezeEnabled = false;
313  DtTime myFreezeAtTime = 0;
314 
315  static const float theMaxWindSpeedForWindFetch;
316 
319  DtCoordinateSystem* myCoordinateSystem = nullptr;
320 
321  boost::signalslib::connection myDriverToBeDestroyedConnection;
322  boost::signalslib::connection myPostInitializeConnection;
323 
325 
327  };
328 }
osg::ref_ptr< DtTritonDrawable > myTritonDrawable
Definition: DtTritonManager.h:299
DtDe & myDe
Definition: DtTritonManager.h:292
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:326
The declaration of the makVrv::DtEnvironment class.
boost::signalslib::signal< void()> signal_oceanToBeDestroyed
Definition: DtTritonManager.h:256
float myElevationRange
Definition: DtTritonManager.h:302
boost::signalslib::signal< void(DtPlanarReflectionCamera *reflection)> signal_planarReflectionCreated
Signal emitted when a new planar reflection has been created.
Definition: DtTritonManager.h:259
DtDynamicOceanObjectManager & myDynamicOceanObjectManager
Definition: DtTritonManager.h:294
DtTritonEventProcessor * myEventProcessor
Definition: DtTritonManager.h:297
Definition: featureContext.h:37
DT_DLL_VRVCORE DtTaitBryan level(const DtCoordinateSystem &cs, const DtVector &localOrigin, double topoHeading)
Returns a level orientation with the topographic heading.
voidpf void uLong size
Definition: ioapi.h:39
DtSignalConnectionManager myConnections
Definition: DtTritonManager.h:296
bool myVisualIntersections
Definition: DtTritonManager.h:305
double myOceanZoomOverride
Definition: DtTritonManager.h:308
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:304
Scale
Definition: DtDouglasSeaScale.h:33
static const float theMaxWindSpeedForWindFetch
Definition: DtTritonManager.h:315
boost::signalslib::signal< void()> signal_removedFromScene
Definition: DtTritonManager.h:255
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:31
Definition: DtTritonManager.h:54
boost::signalslib::signal< void()> signal_addedToScene
Definition: DtTritonManager.h:254
boost::signalslib::connection myPostInitializeConnection
Definition: DtTritonManager.h:322
#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:309
osg::ref_ptr< DtTritonGroup > myTritonRoot
Definition: DtTritonManager.h:300
float mySeaLevel
Definition: DtTritonManager.h:303
boost::signalslib::connection myDriverToBeDestroyedConnection
Definition: DtTritonManager.h:321
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:72
An OSG Drawable representing Triton&#39;s infinite ocean. /ingroup vrvTriton.
Definition: DtTritonDrawable.h:60
TritonQuality
Definition: DtTritonManager.h:52
boost::signalslib::signal< void()> signal_oceanInitialized
Definition: DtTritonManager.h:253
voidpf uLong offset
Definition: ioapi.h:42
float myBreakerAmplitude
Definition: DtTritonManager.h:324
bool myDecalEffects
Definition: DtTritonManager.h:307

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)