VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtOsgChannel.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 
12 #include <vrvCore/DtChannel.h>
13 
14 #include <vrvCore/DtIntersector.h>
15 
16 #include <vrvOsg/DtOsgRenderer.h>
17 #include <vrvOsg/DtCameraNode.h>
18 
19 #include <matrix/vlVector.h>
20 
21 #include <osgViewer/View>
22 
23 namespace osg
24 {
25  class Matrixd;
26  class DatabaseRequestHandler;
27 }
28 
29 namespace makVrv
30 {
31  class DtLight;
32  class DtChannelSpecificGroup;
33  class DtIntersectorResult;
34  class DtIntersectorsContainer;
35  class DtOsgWindow;
36  class DtOsgChannelCreator;
37  class DtOsgEmptySceneLogo;
38  class DtChannelManager;
39  class DtWindowConfiguration;
40  class DtSensorModule;
41  class DtSensor;
42  class DtOsgObserverObject;
43  class DtOsgCullVisitorParameters;
44  class DtTerrainPageSignaler;
45 
46  class DtOsgChannelSensor;
47 
48 
56  {
57  protected:
58  friend class DtOsgChannelCreator;
59 
63  DtOsgChannel(DtDe& de, DtOsgWindow* window, DtChannelConfiguration& config);
64 
66 
67 
72  virtual bool initialize();
73 
75 
76  virtual void initializeNormalized2DCamera();
77  virtual void initialize2DCamera(int w, int h);
78  virtual void initializeSceneCamera();
79  virtual void initializeRenderTexture();
80 
81  virtual void initializeRTTCamera();
82 
83  virtual void clearRttCamera();
84 
85  virtual void recreateRTTCamera();
86 
88 
90  virtual void setShadowState(bool enable);
91 
93  virtual void addOverlayDrawablesToCameras();
94 
100  virtual void initializeSignalConnections();
102 
103 
104  public:
106  virtual ~DtOsgChannel();
107 
112  virtual void setSensorName(const std::string& sensorName);
113 
115  virtual void setClearColor(float r, float g, float b, float a);
116 
120  virtual void setWindow(DtWindow* view);
121 
123  virtual const DtWindow* window() const;
124 
126  virtual void setViewport(int x, int y, int width, int height);
127 
131  virtual void clearFrameBufferIfChanged();
132 
134  virtual void getViewport(int& x, int& y, int& width, int& height) const;
135 
137  virtual void setCameraPosition(double x, double y, double z);
138 
140  virtual void setCameraOrientation(double psi, double theta, double phi);
141 
146  virtual void setCameraPositionAndOrientation(double x, double y,
147  double z, double psi, double theta, double phi);
148  virtual void setCameraPositionAndOrientation(osg::Vec3d& pos,
149  osg::Quat& orient);
150 
152  virtual void getCameraPositionAndOrientation(osg::Vec3d& position,
153  osg::Quat& rotation) const;
154 
165  virtual void setChannelEnabled(bool enabled, bool partial) override;
166 
169  virtual bool channelEnabled() const;
170 
171  virtual void update();
172 
174  virtual void connectToObserver();
175 
177  virtual osgViewer::View& view();
178 
180  virtual DtCameraNode* sceneCamera();
181 
183  virtual const DtCameraNode* sceneCamera() const;
184 
186  virtual DtCameraNode* rttCamera() const;
187 
189  virtual DtCameraNode* activeMainCamera();
190 
192  virtual const DtCameraNode* activeMainCamera() const;
193 
195  virtual DtCameraNode* overlayCamera();
196 
198  virtual DtCameraNode* normalizedOverlayCamera();
199 
201  virtual void setRenderToTexture(bool enabled);
202 
206  virtual void setRenderToTextureFormat(int format, int sourceFormat, int sourceType);
207 
209  virtual osg::ref_ptr<osg::Texture> allocateRenderTexture(int width, int height) const;
210 
213  virtual osg::ref_ptr<osg::Texture> getRenderTexture();
214  virtual osg::ref_ptr<osg::Texture> getOcculsionTexture();
215 
217  virtual osg::ref_ptr<osg::Texture> getDepthTexture() const;
218 
220  virtual void setDepthTextureUsesStencilBuffer(bool useStencil);
221 
223  virtual bool depthTextureUsesStencilBuffer() const;
224 
226  virtual int shadowQuality() const;
227 
231  virtual std::vector<const osg::Camera*> getShadowableCameras() const;
232 
235  virtual void setProjectionResizePolicy(
237 
240  virtual void updateProjection();
241 
242  virtual void projectionUnitsToFrustum(DtChannelConfiguration::ProjectionUnits units,
243  double &left, double zNear, double &right, double &top, double &bottom);
244 
245  virtual void projectionUnitsToFrustumWithZoomAdjustment(DtChannelConfiguration::ProjectionUnits units,
246  double& left, double zNear, double& right, double& top, double& bottom);
247 
249  virtual void connectChannelToScene();
250 
252  virtual bool processMouseEvent(const DtMouseEvent& ev);
253 
255  virtual bool processKeyboardEvent(const DtKeyEvent & ev);
256 
258  //virtual DtDynamicOverlay* overlay();
259 
261  virtual void getWorldToWindowMatrix(osg::Matrix& worldToWindowMatrix) const;
262 
264  virtual void moveMouseToScreenLocation(float screenX, float screenY);
265 
269  virtual void projectToScreen(double dbX, double dbY, double dbZ,
270  double& screenX, double& screenY, double& screenZ) const override;
271 
273  virtual void projectToWorld(double screenX, double screenY,
274  double& dbX, double& dbY, double& dbZ) const override;
275 
282  virtual DtIntersectorResult findWorldIntersection(double screenX, double screenY,
284  std::vector<DtElementID>* ignoreList = 0) override;
285 
287  virtual const std::string& name();
288 
293  boost::signalslib::signal<void(int, int, int, int)> signal_viewportChanged;
294 
295  typedef std::list<std::string> PostProcessorEffectList;
296 
300  virtual void addPostProcessEffect(const std::string& postProcessorEffect);
301 
305  virtual void removePostProcessEffect(const std::string& postProcessorEffect);
306 
308  virtual bool hasPostProcessEffect(const std::string& postProcessorEffect);
309 
310 
312  virtual void set3DCullVisitorParams(DtOsgCullVisitorParameters* params);
313  virtual void set2DCullVisitorParams(DtOsgCullVisitorParameters* params);
315 
316  virtual void setEnablePostProcessors(bool enable);
317 
318  virtual bool getEnablePostProcessors();
319 
320  //getter/setter for flag to use old (pre 2.1) channel offset calculation
321  virtual bool useOldChannelOffsetCalcuation() const;
322  virtual void setUseOldChannelOffsetCalcuation(bool enable);
323 
326  virtual bool forceHdrLuminanceOverride();
327 
328  virtual void setForceHdrLuminanceOverride(bool force);
329 
331  // structure to expedite culling. We need to clear any memory
332  // that this structure caches to decrement reference count of
333  // StateSets (and hence drawables, textures, etc) when scene
334  // changes completely (e.g. on post processor turned off/on)
335  // so that memory can be reclaimed
336  // This helper function accomplishes that
337  virtual void clearStateGraph(void);
338 
340  // should just pass through without applying any effects
341  // used by SensorFX to turn off HDR on a per channel basis.
342  virtual void setEnableHdrPassthrough(bool flag);
343  virtual bool enableHdrPassthrough();
344 
347  virtual void setHdrOutputScale(float scale);
350  virtual float hdrOutputScale();
351 
353  virtual void screenCapture();
354 
356  virtual void setOcclusionTextureEnabled(bool enabled);
357 
359  virtual void initOcclusionTexture();
360 
362  virtual void updateCameraFrustumPlanes( std::vector< DtVector4<double> >& planes );
363 
366  virtual void updateAcquisitionBoxFrustumPlanes(const int& boxCenterX, const int& boxCenterY,
367  const int& boxWidth, const int& boxHeight, std::vector< DtVector4<double> >& planes );
368 
370  virtual void setChannelSensor(DtOsgChannelSensor* extension);
371  virtual DtOsgChannelSensor* findChannelSensor() { return myChannelSensor; }
372 
375  virtual void releaseResources(osg::State* gcState);
376 
379  virtual void updateShowTracksUniform(bool value);
380 
387  virtual std::vector<DtElementID> entitiesInFrustum() override;
388 
389  protected:
390  //create observer to camera matricies both with and without
391  // channel offset applied.
392  // offsetObserverToCamera has channel offset applied and
393  // observerToCamera does not
394  virtual void makeObserverToCameraMatrix(osg::Vec3d& orient,
395  osg::Matrixd& offsetObserverToCamera, osg::Matrixd& observerToCamera);
396  virtual void makeObserverToCameraMatrix(osg::Quat& qObserverToWorld,
397  osg::Matrixd& offsetObserverToCamera, osg::Matrixd& observerToCamera);
398 
399 
401  virtual void calculateNearFar(double& zNear, double& zFar);
402 
406  virtual bool useAttachedForNearClip(double alt);
407 
409  virtual double calculateNearClip(double alt, double zFar);
410 
412  virtual double calculateFarClip(double alt);
413 
418  virtual double calculateNearClipMagClamp(double zNear, double zFar, float magLevel=2.);
419 
421  virtual void projectFor3D();
422 
424  virtual void projectFor2D();
425 
428  virtual void connectRttCameraToScene();
429 
433  virtual void stopUsingModelSet(DtModelSetId modelSet);
434 
438  virtual void startUsingModelSet(DtModelSetId modelSet);
439 
441  virtual void slot_visualizerRootAdded(DtModelSetId modelSet, int visualType);
442 
444  virtual void slot_shadowsRemoved();
445 
447  virtual void slot_observerModelSetChanged(DtObserverObject* observer,
448  DtModelSetId modelSet);
449 
451  virtual void slot_observerSettingChanged(DtObserverObject* observer,
452  int setting, bool value);
453 
455  virtual void slot_observerSettingRemoved(DtObserverObject* observer,
456  int setting);
457 
460  virtual void slot_observerColorControlChanged(DtObserverObject* observer);
461 
463  virtual void slot_projectionChanged(DtObserverObject* observer, bool is2D);
464 
466  virtual void slot_windowConfigurationModified(const std::string& deName,
467  const std::string& oldWindowName, const DtWindowConfiguration& config);
468 
470  virtual void slot_channelConfigurationModified(const std::string& deName,
471  const std::string& windowName, const std::string& oldChannelName,
472  const DtChannelConfiguration& channelConfig);
473 
475  virtual void slot_onCoordinateSystemChanged();
476 
479  virtual void slot_paperMapEnabledChanged(bool setting);
480 
482  virtual void observerRemoved(const std::string& observerName);
483 
485  virtual void updateMultiSampleOverrideSetting();
486 
487  protected:
488 
490  virtual void getRenderTextureAttachmentInfo(unsigned int& level, unsigned int& face, unsigned int& sampleBuffers, unsigned int& samples);
491 
493  virtual void initializeRenderTextureColor();
494 
496  virtual void initializeRenderTextureDepth();
497 
499  virtual void initializeRttCameraDepth();
500 
502  virtual void changedRttCameraFbo();
503 
504  virtual void enableLighting(osg::ref_ptr<osg::Camera> camera, bool enable);
505 
508  virtual void calculateAndSetFocusPointDistance(double zNear, double zFar);
509 
512  osgViewer::CompositeViewer* getOrCreateViewer();
513 
515  virtual void flipHorizontal(bool flip);
516 
519  bool anyPointInFrustum(const std::vector<DtVector4<double>>& camPlanes,
520  const std::vector<DtVector>& points) const;
521 
522  protected:
523  typedef std::map< int, DtChannelSpecificGroup*> VisualTypeMap;
524 
528 
530 
532 
534 
536 
538 
540 
542 
543 
544  //The master 3D camera
546 
547  //The 2D camera in screen space(0,0 - w,h)
549 
550  //The 2D camera in normalize screen space (0,0 - 1,1)
552 
557 
559 
562 
567 
568  // ex. { "dof", "rainsplash", "oceanspray" }
569  // list of post processor effect names to enable on update
571 
572  osg::Node::NodeMask myOldSceneCameraNodeMask;
573  osg::Node::NodeMask myOldRTTCameraNodeMask;
574 
576 
578 
579  //flag to use old (pre 2.1) channel offset calculation
580  // set by creating a signal_channelCreated callback and
581  // setting it in there
583 
585 
589 
591 
592  // For mirror mode (horizontal flip), we disable the feature in 2D (plan view)
593  // We have to keep track of the last value from the channel config so we
594  // can restore right the value when the user goes back to a 3D view
596 
597  // When NEAR_FAR_DYNAMIC_NEAR_CLIP_MAG_CLAMP policy is used, this value is cached. If the clamp
598  // intersector gets a sky shot and this value is > 0. it is used instead. When the policy is
599  // NOT NEAR_FAR_DYNAMIC_NEAR_CLIP_MAG_CLAMP it is set to 0., so old cache values don't get used.
601 
602  // used for a debug ability to override the number of multisamples used by the rtt camera
604 
605  std::vector<osg::Vec3d> myFocusPoints;
607 
609 
611 
612  DtIntersectorsContainer* myIntersectors = nullptr;
613 
615 
619  static int theRunningCameraId;
620  private:
621 
623  DtOsgChannel();
624 
626  DtOsgChannel(const DtOsgChannel&);
627 
629  DtOsgChannel &operator=(const DtOsgChannel &);
630  };
631 
635  {
636  public:
638  virtual DtChannel* create(DtDe& de, DtWindow* window, DtChannelConfiguration& config);
639  };
640 }
bool myShadowState
Definition: DtOsgChannel.h:566
IntersectProperties
The IntersectProperties enum is a flag set that indicates the types of nodes to be considered for int...
Definition: DtIntersector.h:31
DtOsgObserverObject * myOsgObserverObject
Definition: DtOsgChannel.h:527
Abstract Base class.
Definition: DtWindow.h:25
bool myCoordinateSystemChanged
Definition: DtOsgChannel.h:564
DtOsgEmptySceneLogo * myEmptySceneLogo
Definition: DtOsgChannel.h:614
std::vector< osg::Vec3d > myFocusPoints
Definition: DtOsgChannel.h:605
osg::ref_ptr< osg::DatabaseRequestHandlerCallback > myDatabasePagerCallback
Definition: DtOsgChannel.h:584
int myRenderTextureFormat
Definition: DtOsgChannel.h:529
DtOsgWindow * myOsgWindow
Definition: DtOsgChannel.h:526
This class encapsulates a Key event.
Definition: DtKeyEvent.h:16
static int theRunningCameraId
This is used to give names to each camera created. This is appended to the camera name This is useful...
Definition: DtOsgChannel.h:619
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
DT_DLL_VRVCORE DtTaitBryan level(const DtCoordinateSystem &cs, const DtVector &localOrigin, double topoHeading)
Returns a level orientation with the topographic heading.
bool myShowTracksEnabled
Definition: DtOsgChannel.h:610
bool myFrameBufferNeedsClear
Definition: DtOsgChannel.h:590
The channel creator for the abstract channel class.
Definition: DtOsgChannel.h:634
Utility class that contains intersectors for all model sets in the system (3d, xr, 2d) Use an object of this class when all models sets can be possibly needed. When you know which model set you need, you can just use the DtIntersectorCreator to create an intersector for a model set Models sets corresponding to 3d, xr and 2d are created by default (these correspond to values of 0, 1 and 5) Additional model sets can be registered with DtIntersectorsContainer::registerModelSet.
Definition: DtIntersectorsContainer.h:37
bool mySensorInitialized
Definition: DtOsgChannel.h:537
int myLastNumMultiSamplesOverride
Definition: DtOsgChannel.h:603
Descriptor for a single intersection result.
Definition: DtIntersectorResult.h:21
Definition: DtOsgChannelSensor.h:22
PostProcessorEffectList myPostProcessorEffects
Definition: DtOsgChannel.h:570
The abstract channel creator for the abstract channel class.
Definition: DtChannel.h:192
This owns a list of channel configurations.
Definition: DtWindowConfiguration.h:26
This class provides the OSG-specific implementation of a DtChannel.
Definition: DtOsgChannel.h:55
osg::ref_ptr< osg::Texture > myRenderTexture
The textures the 3D scene renders into when post processing is on.
Definition: DtOsgChannel.h:554
osg::ref_ptr< osg::Texture > myOcclusionTexture
Definition: DtOsgChannel.h:556
bool myEnableHdrPassthrough
Definition: DtOsgChannel.h:586
This class encapsulates a mouse button event.
Definition: DtMouseEvent.h:19
bool myEnablePostProcessors
Definition: DtOsgChannel.h:577
bool myUseOldChannelOffsetCalcuation
Definition: DtOsgChannel.h:582
bool myChannelEnabled
Definition: DtOsgChannel.h:539
osg::ref_ptr< osgViewer::View > myView
Definition: DtOsgChannel.h:525
osg::ref_ptr< DtCameraNode > myNormalized2DCamera
Definition: DtOsgChannel.h:551
int myRenderTextureSourceType
Definition: DtOsgChannel.h:533
The abstract Channel Class.
Definition: DtChannel.h:35
Contains makVrv:DtIntersector class.
This class handles displaying a logo for a channel when the channel scene is empty. An empty scene means that no terrain is loaded. On overlay is used to hide the scene until the terrain loads.
Definition: DtOsgEmptySceneLogo.h:46
Contains makVrv::DtCameraNode declaration.
std::list< std::string > PostProcessorEffectList
Emitted when the channel&#39;s viewport changes dimensions.
Definition: DtOsgChannel.h:295
DtOsgChannelSensor * myChannelSensor
Definition: DtOsgChannel.h:608
This abstract base class defines the interface for OS-specific keyboard and mouse event listeners...
Definition: DtObserverObject.h:32
bool myRenderToTextureFlag
Definition: DtOsgChannel.h:565
float myHdrOutputScale
Definition: DtOsgChannel.h:588
The osg cull vistor parameters class provides additional culling and intersector parameters for choos...
Definition: DtOsgCullVisitorParameters.h:43
osg::Node::NodeMask myOldRTTCameraNodeMask
Definition: DtOsgChannel.h:573
osg::Node::NodeMask myOldSceneCameraNodeMask
Definition: DtOsgChannel.h:572
osg::ref_ptr< osg::Group > myRoot
Definition: DtOsgChannel.h:541
Contains makVrv::DtChannel class.
bool myIsUsingTrackballManipulator
Definition: DtOsgChannel.h:563
bool myForceHdrLuminanceOverride
Definition: DtOsgChannel.h:587
VR-Vantage specific subclass of OSG camera.
Definition: DtCameraNode.h:30
ProjectionUnits
Definition: DtChannelConfiguration.h:37
osg::ref_ptr< DtCameraNode > mySceneCamera
Definition: DtOsgChannel.h:545
virtual DtOsgChannelSensor * findChannelSensor()
Definition: DtOsgChannel.h:371
boost::signalslib::signal< void(int, int, int, int)> signal_viewportChanged
Emitted when the channel&#39;s viewport changes dimensions.
Definition: DtOsgChannel.h:293
osg::ref_ptr< DtCameraNode > myRTTCamera
Slave camera configured to render to myRenderTexture.
Definition: DtOsgChannel.h:561
Configuration for a single channel Serialized and sent to remote displays as necessary to configure r...
Definition: DtChannelConfiguration.h:24
std::map< int, DtChannelSpecificGroup * > VisualTypeMap
Definition: DtOsgChannel.h:523
Class for generic lights This holds per-light data such as range, attenuation factors, colors, etc.
Definition: DtLight.h:49
bool myDepthTextureUsesStencilBuffer
Definition: DtOsgChannel.h:558
double myPreviousClampedNearClipDistance
Definition: DtOsgChannel.h:600
DtLight * myFlashlight
Definition: DtOsgChannel.h:575
bool myRenderTextureFormatDirty
Definition: DtOsgChannel.h:535
osg::ref_ptr< DtCameraNode > my2DCamera
Definition: DtOsgChannel.h:548
int myLastFocusPointAttempted
Definition: DtOsgChannel.h:606
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
DtModelSetId
Definition: DtModelSetEnums.h:19
int myRenderTextureSourceFormat
Definition: DtOsgChannel.h:531
Contains makVrv::DtOsgRenderer class.
Definition: DtIntersector.h:33
ProjectionResizePolicy
Definition: DtChannelConfiguration.h:44
This abstract base class defines the interface for OS-specific keyboard and mouse event listeners...
Definition: DtOsgObserverObject.h:49
A basic OSG display window, used to get the osg context for a display window.
Definition: DtOsgWindow.h:36
osg::ref_ptr< osg::Texture > myDepthTexture
Definition: DtOsgChannel.h:555
bool myLastMirrorMode
Definition: DtOsgChannel.h:595

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)