VR-Forces 5.0.1 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) 2022 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 <osgViewer/View>
20 
21 namespace osg
22 {
23  class Matrixd;
24  class DatabaseRequestHandler;
25 }
26 
27 namespace makVrv
28 {
29  class DtLight;
30  class DtChannelSpecificGroup;
31  class DtIntersectorResult;
32  class DtIntersectorsContainer;
33  class DtOsgWindow;
34  class DtOsgChannelCreator;
35  class DtChannelManager;
36  class DtWindowConfiguration;
37  class DtSensorModule;
38  class DtSensor;
39  class DtOsgObserverObject;
40  class DtOsgCullVisitorParameters;
41  class DtTerrainPageSignaler;
42 
43  class DtOsgChannelSensor;
44 
45 
53  {
54  protected:
55  friend class DtOsgChannelCreator;
56 
60  DtOsgChannel(DtDe& de, DtOsgWindow* window, DtChannelConfiguration& config);
61 
63 
64 
69  virtual bool initialize();
70 
72 
73  virtual void initializeNormalized2DCamera();
74  virtual void initialize2DCamera(int w, int h);
75  virtual void initializeSceneCamera();
76  virtual void initializeRenderTexture();
77 
78  virtual void initializeRTTCamera();
79 
80  virtual void clearRttCamera();
81 
82  virtual void recreateRTTCamera();
83 
85 
87  virtual void setShadowState(bool enable);
88 
90  virtual void addOverlayDrawablesToCameras();
91 
97  virtual void initializeSignalConnections();
99 
100 
101  public:
103  virtual ~DtOsgChannel();
104 
109  virtual void setSensorName(const std::string& sensorName);
110 
112  virtual void setClearColor(float r, float g, float b, float a);
113 
117  virtual void setWindow(DtWindow* view);
118 
120  virtual const DtWindow* window() const;
121 
123  virtual void setViewport(int x, int y, int width, int height);
124 
128  virtual void clearFrameBufferIfChanged();
129 
131  virtual void getViewport(int& x, int& y, int& width, int& height) const;
132 
134  virtual void setCameraPosition(double x, double y, double z);
135 
137  virtual void setCameraOrientation(double psi, double theta, double phi);
138 
143  virtual void setCameraPositionAndOrientation(double x, double y,
144  double z, double psi, double theta, double phi);
145  virtual void setCameraPositionAndOrientation(osg::Vec3d& pos,
146  osg::Quat& orient);
147 
149  virtual void getCameraPositionAndOrientation(osg::Vec3d& position,
150  osg::Quat& rotation) const;
151 
162  virtual void setChannelEnabled(bool enabled, bool partial) override;
163 
166  virtual bool channelEnabled() const;
167 
168  virtual void update();
169 
171  virtual void connectToObserver();
172 
174  virtual osgViewer::View& view();
175 
177  virtual DtCameraNode* sceneCamera();
178 
180  virtual const DtCameraNode* sceneCamera() const;
181 
183  virtual DtCameraNode* rttCamera() const;
184 
186  virtual DtCameraNode* activeMainCamera();
187 
189  virtual const DtCameraNode* activeMainCamera() const;
190 
192  virtual DtCameraNode* overlayCamera();
193 
195  virtual DtCameraNode* normalizedOverlayCamera();
196 
198  virtual void setRenderToTexture(bool enabled);
199 
203  virtual void setRenderToTextureFormat(int format, int sourceFormat, int sourceType);
204 
206  virtual osg::ref_ptr<osg::Texture> allocateRenderTexture(int width, int height) const;
207 
210  virtual osg::ref_ptr<osg::Texture> getRenderTexture();
211  virtual osg::ref_ptr<osg::Texture> getOcculsionTexture();
212 
214  virtual osg::ref_ptr<osg::Texture> getDepthTexture() const;
215 
217  virtual void setDepthTextureUsesStencilBuffer(bool useStencil);
218 
220  virtual bool depthTextureUsesStencilBuffer() const;
221 
223  virtual int shadowQuality() const;
224 
228  virtual std::vector<const osg::Camera*> getShadowableCameras() const;
229 
232  virtual void setProjectionResizePolicy(
234 
237  virtual void updateProjection();
238 
239  virtual void projectionUnitsToFrustum(DtChannelConfiguration::ProjectionUnits units,
240  double &left, double zNear, double &right, double &top, double &bottom);
241 
242  virtual void projectionUnitsToFrustumWithZoomAdjustment(DtChannelConfiguration::ProjectionUnits units,
243  double& left, double zNear, double& right, double& top, double& bottom);
244 
246  virtual void connectChannelToScene();
247 
249  virtual bool processMouseEvent(const DtMouseEvent& ev);
250 
252  virtual bool processKeyboardEvent(const DtKeyEvent & ev);
253 
255  //virtual DtDynamicOverlay* overlay();
256 
258  virtual void getWorldToWindowMatrix(osg::Matrix& worldToWindowMatrix) const;
259 
261  virtual void moveMouseToScreenLocation(float screenX, float screenY);
262 
266  virtual void projectToScreen(double dbX, double dbY, double dbZ,
267  double& screenX, double& screenY, double& screenZ);
268 
270  virtual void projectToWorld(double screenX, double screenY,
271  double& dbX, double& dbY, double& dbZ);
272 
275  virtual DtIntersectorResult findWorldIntersection(double screenX, double screenY,
277  std::vector<DtElementID>* ignoreList = 0);
278 
280  virtual const std::string& name();
281 
286  boost::signalslib::signal<void(int, int, int, int)> signal_viewportChanged;
287 
288  typedef std::list<std::string> PostProcessorEffectList;
289 
293  virtual void addPostProcessEffect(const std::string& postProcessorEffect);
294 
298  virtual void removePostProcessEffect(const std::string& postProcessorEffect);
299 
301  virtual void set3DCullVisitorParams(DtOsgCullVisitorParameters* params);
302  virtual void set2DCullVisitorParams(DtOsgCullVisitorParameters* params);
304 
305  virtual void setEnablePostProcessors(bool enable);
306 
307  virtual bool getEnablePostProcessors();
308 
309  //getter/setter for flag to use old (pre 2.1) channel offset calculation
310  virtual bool useOldChannelOffsetCalcuation() const;
311  virtual void setUseOldChannelOffsetCalcuation(bool enable);
312 
315  virtual bool forceHdrLuminanceOverride();
316 
317  virtual void setForceHdrLuminanceOverride(bool force);
318 
320  // structure to expedite culling. We need to clear any memory
321  // that this structure caches to decrement reference count of
322  // StateSets (and hence drawables, textures, etc) when scene
323  // changes completely (e.g. on post processor turned off/on)
324  // so that memory can be reclaimed
325  // This helper function accomplishes that
326  virtual void clearStateGraph(void);
327 
329  // should just pass through without applying any effects
330  // used by SensorFX to turn off HDR on a per channel basis.
331  virtual void setEnableHdrPassthrough(bool flag);
332  virtual bool enableHdrPassthrough();
333 
336  virtual void setHdrOutputScale(float scale);
339  virtual float hdrOutputScale();
340 
342  virtual void screenCapture();
343 
345  virtual void setOcclusionTextureEnabled(bool enabled);
346 
348  virtual void initOcclusionTexture();
349 
351  virtual void updateCameraFrustumPlanes( std::vector< DtVector4<double> >& planes );
352 
355  virtual void updateAcquisitionBoxFrustumPlanes(const int& boxCenterX, const int& boxCenterY,
356  const int& boxWidth, const int& boxHeight, std::vector< DtVector4<double> >& planes );
357 
359  virtual void setChannelSensor(DtOsgChannelSensor* extension);
360  virtual DtOsgChannelSensor* findChannelSensor() { return myChannelSensor; }
361 
364  virtual void releaseResources(osg::State* gcState);
365 
368  virtual void updateShowTracksUniform(bool value);
369 
370  protected:
371  //create observer to camera matricies both with and without
372  // channel offset applied.
373  // offsetObserverToCamera has channel offset applied and
374  // observerToCamera does not
375  virtual void makeObserverToCameraMatrix(osg::Vec3d& orient,
376  osg::Matrixd& offsetObserverToCamera, osg::Matrixd& observerToCamera);
377  virtual void makeObserverToCameraMatrix(osg::Quat& qObserverToWorld,
378  osg::Matrixd& offsetObserverToCamera, osg::Matrixd& observerToCamera);
379 
380 
382  virtual void calculateNearFar(double& zNear, double& zFar);
383 
387  virtual bool useAttachedForNearClip(double alt);
388 
390  virtual double calculateNearClip(double alt, double zFar);
391 
393  virtual double calculateFarClip(double alt);
394 
399  virtual double calculateNearClipMagClamp(double zNear, double zFar, float magLevel=2.);
400 
402  virtual void projectFor3D();
403 
405  virtual void projectFor2D();
406 
409  virtual void connectRttCameraToScene();
410 
414  virtual void stopUsingModelSet(int modelSet);
415 
419  virtual void startUsingModelSet(int modelSet);
420 
422  virtual void slot_visualizerRootAdded(int modelSet, int visualType);
423 
425  virtual void slot_shadowsRemoved();
426 
428  virtual void slot_observerModelSetChanged(DtObserverObject* observer,
429  int modelSet);
430 
432  virtual void slot_observerSettingChanged(DtObserverObject* observer,
433  int setting, bool value);
434 
436  virtual void slot_observerSettingRemoved(DtObserverObject* observer,
437  int setting);
438 
440  virtual void slot_projectionChanged(DtObserverObject* observer, bool is2D);
441 
443  virtual void slot_windowConfigurationModified(const std::string& deName,
444  const std::string& oldWindowName, const DtWindowConfiguration& config);
445 
447  virtual void slot_channelConfigurationModified(const std::string& deName,
448  const std::string& windowName, const std::string& oldChannelName,
449  const DtChannelConfiguration& channelConfig);
450 
452  virtual void slot_onCoordinateSystemChanged();
453 
456  virtual void slot_paperMapEnabledChanged(bool setting);
457 
459  virtual void observerRemoved(const std::string& observerName);
460 
462  virtual void updateMultiSampleOverrideSetting();
463 
464  protected:
465 
467  virtual void getRenderTextureAttachmentInfo(unsigned int& level, unsigned int& face, unsigned int& sampleBuffers, unsigned int& samples);
468 
470  virtual void initializeRenderTextureColor();
471 
473  virtual void initializeRenderTextureDepth();
474 
476  virtual void initializeRttCameraDepth();
477 
479  virtual void changedRttCameraFbo();
480 
481  virtual void enableLighting(osg::ref_ptr<osg::Camera> camera, bool enable);
482 
485  virtual void calculateAndSetFocusPointDistance(double zNear, double zFar);
486 
489  osgViewer::CompositeViewer* getOrCreateViewer();
490 
492  virtual void flipHorizontal(bool flip);
493 
494  protected:
495  typedef std::map< int, DtChannelSpecificGroup*> VisualTypeMap;
496 
500 
502 
504 
506 
508 
510 
512 
514 
515 
516  //The master 3D camera
518 
519  //The 2D camera in screen space(0,0 - w,h)
521 
522  //The 2D camera in normalize screen space (0,0 - 1,1)
524 
529 
531 
534 
539 
540  // ex. { "dof", "rainsplash", "oceanspray" }
541  // list of post processor effect names to enable on update
543 
544  osg::Node::NodeMask myOldSceneCameraNodeMask;
545 
547 
549 
550  //flag to use old (pre 2.1) channel offset calculation
551  // set by creating a signal_channelCreated callback and
552  // setting it in there
554 
556 
560 
562 
563  // For mirror mode (horizontal flip), we disable the feature in 2D (plan view)
564  // We have to keep track of the last value from the channel config so we
565  // can restore right the value when the user goes back to a 3D view
567 
568  // When NEAR_FAR_DYNAMIC_NEAR_CLIP_MAG_CLAMP policy is used, this value is cached. If the clamp
569  // intersector gets a sky shot and this value is > 0. it is used instead. When the policy is
570  // NOT NEAR_FAR_DYNAMIC_NEAR_CLIP_MAG_CLAMP it is set to 0., so old cache values don't get used.
572 
573  // used for a debug ability to override the number of multisamples used by the rtt camera
575 
576  std::vector<osg::Vec3d> myFocusPoints;
579 
581 
583 
584  DtIntersectorsContainer* myIntersectors = nullptr;
585 
589  static int theRunningCameraId;
590  private:
591 
593  DtOsgChannel();
594 
596  DtOsgChannel(const DtOsgChannel&);
597 
599  DtOsgChannel &operator=(const DtOsgChannel &);
600  };
601 
605  {
606  public:
608  virtual DtChannel* create(DtDe& de, DtWindow* window, DtChannelConfiguration& config);
609  };
610 }
bool myShadowState
Definition: DtOsgChannel.h:538
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:499
Abstract Base class.
Definition: DtWindow.h:25
bool myCoordinateSystemChanged
Definition: DtOsgChannel.h:536
std::vector< osg::Vec3d > myFocusPoints
Definition: DtOsgChannel.h:576
bool myLastFocusPointAttemptedOsgEarthFailed
Definition: DtOsgChannel.h:578
osg::ref_ptr< osg::DatabaseRequestHandlerCallback > myDatabasePagerCallback
Definition: DtOsgChannel.h:555
int myRenderTextureFormat
Definition: DtOsgChannel.h:501
DtOsgWindow * myOsgWindow
Definition: DtOsgChannel.h:498
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:589
#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:582
bool myFrameBufferNeedsClear
Definition: DtOsgChannel.h:561
The channel creator for the abstract channel class.
Definition: DtOsgChannel.h:604
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:36
bool mySensorInitialized
Definition: DtOsgChannel.h:509
int myLastNumMultiSamplesOverride
Definition: DtOsgChannel.h:574
Descriptor for a single intersection result.
Definition: DtIntersectorResult.h:21
Definition: DtOsgChannelSensor.h:22
PostProcessorEffectList myPostProcessorEffects
Definition: DtOsgChannel.h:542
The abstract channel creator for the abstract channel class.
Definition: DtChannel.h:180
This owns a list of channel configurations.
Definition: DtWindowConfiguration.h:28
This class provides the OSG-specific implementation of a DtChannel.
Definition: DtOsgChannel.h:52
osg::ref_ptr< osg::Texture > myRenderTexture
The textures the 3D scene renders into when post processing is on.
Definition: DtOsgChannel.h:526
osg::ref_ptr< osg::Texture > myOcclusionTexture
Definition: DtOsgChannel.h:528
bool myEnableHdrPassthrough
Definition: DtOsgChannel.h:557
This class encapsulates a mouse button event.
Definition: DtMouseEvent.h:19
bool myEnablePostProcessors
Definition: DtOsgChannel.h:548
bool myUseOldChannelOffsetCalcuation
Definition: DtOsgChannel.h:553
bool myChannelEnabled
Definition: DtOsgChannel.h:511
osg::ref_ptr< osgViewer::View > myView
Definition: DtOsgChannel.h:497
osg::ref_ptr< DtCameraNode > myNormalized2DCamera
Definition: DtOsgChannel.h:523
int myRenderTextureSourceType
Definition: DtOsgChannel.h:505
The abstract Channel Class.
Definition: DtChannel.h:35
Contains makVrv:DtIntersector class.
Contains makVrv::DtCameraNode declaration.
std::list< std::string > PostProcessorEffectList
Emitted when the channel&#39;s viewport changes dimensions.
Definition: DtOsgChannel.h:288
DtOsgChannelSensor * myChannelSensor
Definition: DtOsgChannel.h:580
This abstract base class defines the interface for OS-specific keyboard and mouse event listeners...
Definition: DtObserverObject.h:29
bool myRenderToTextureFlag
Definition: DtOsgChannel.h:537
float myHdrOutputScale
Definition: DtOsgChannel.h:559
The osg cull vistor parameters class provides additional culling and intersector parameters for choos...
Definition: DtOsgCullVisitorParameters.h:42
osg::Node::NodeMask myOldSceneCameraNodeMask
Definition: DtOsgChannel.h:544
osg::ref_ptr< osg::Group > myRoot
Definition: DtOsgChannel.h:513
Contains makVrv::DtChannel class.
bool myIsUsingTrackballManipulator
Definition: DtOsgChannel.h:535
bool myForceHdrLuminanceOverride
Definition: DtOsgChannel.h:558
VR-Vantage specific subclass of OSG camera.
Definition: DtCameraNode.h:29
ProjectionUnits
Definition: DtChannelConfiguration.h:39
osg::ref_ptr< DtCameraNode > mySceneCamera
Definition: DtOsgChannel.h:517
virtual DtOsgChannelSensor * findChannelSensor()
Definition: DtOsgChannel.h:360
boost::signalslib::signal< void(int, int, int, int)> signal_viewportChanged
Emitted when the channel&#39;s viewport changes dimensions.
Definition: DtOsgChannel.h:286
osg::ref_ptr< DtCameraNode > myRTTCamera
Slave camera configured to render to myRenderTexture.
Definition: DtOsgChannel.h:533
Configuration for a single channel Serialized and sent to remote displays as necessary to configure r...
Definition: DtChannelConfiguration.h:26
std::map< int, DtChannelSpecificGroup * > VisualTypeMap
Definition: DtOsgChannel.h:495
Class for generic lights This holds per-light data such as range, attenuation factors, colors, etc.
Definition: DtLight.h:48
bool myDepthTextureUsesStencilBuffer
Definition: DtOsgChannel.h:530
double myPreviousClampedNearClipDistance
Definition: DtOsgChannel.h:571
DtLight * myFlashlight
Definition: DtOsgChannel.h:546
bool myRenderTextureFormatDirty
Definition: DtOsgChannel.h:507
osg::ref_ptr< DtCameraNode > my2DCamera
Definition: DtOsgChannel.h:520
int myLastFocusPointAttempted
Definition: DtOsgChannel.h:577
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:70
int myRenderTextureSourceFormat
Definition: DtOsgChannel.h:503
Contains makVrv::DtOsgRenderer class.
Definition: DtIntersector.h:33
ProjectionResizePolicy
Definition: DtChannelConfiguration.h:46
This abstract base class defines the interface for OS-specific keyboard and mouse event listeners...
Definition: DtOsgObserverObject.h:48
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:527
bool myLastMirrorMode
Definition: DtOsgChannel.h:566

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)