VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtSpeedTreeForest.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 <vrvSt/vrvSt.h>
15 #include <vrvCore/DtTreeRecord.h>
16 #include <vrvCore/DtForestObject.h>
17 #include <osg/ref_ptr>
18 #include <osg/PositionAttitudeTransform>
19 #include <osg/Geode>
20 #include <osg/BoundingBox>
21 
22 #include <OsgST_Forest.h>
23 
24 #include <unordered_set>
25 
26 #include <tbb/mutex.h>
27 
28 namespace makOsgSpeedTree
29 {
30  class TreeInstance;
31  struct TreeInstanceDescriptor;
32 }
33 
34 namespace makVrv
35 {
36  class DtAgentUpdateResolverInterface;
37  class DtSpeedTreeModelInstance;
38  class DtSpeedTreeCore;
39  class DtEnvironmentInfo;
40  class DtOsgCullVisitorParameters;
41  class DtGlDebugGroup;
42  class DtCoordinateConverter;
43  class DtOsgRenderer;
44 
49  {
50  public:
51  friend class DtSpeedTreeForestClassesCreator;
53 
54  public:
55  //Destructor
56  virtual ~DtSpeedTreeForest();
57 
58  protected:
59 
63  DtSpeedTreeForest(DtDe& de, DtUniqueID id, const std::string& strVisManagerType);
64 
65  private:
71  DtSpeedTreeForest &operator=(const DtSpeedTreeForest &other);
72 
73  public:
74 
78  virtual void setVisible(bool isVisible);
79 
80  virtual void addUniqueTree(DtTreeRecord& record);
81  virtual void removeTree(DtUniqueID record);
82  virtual void removeAllTrees();
83 
84  virtual DtUniqueID addUniqueTreesToUniqueCell(DtVectorTreeRecords& records);
85  virtual void removeAllUniqueTreesAndUniqueCell(DtUniqueID cellID);
86 
87  virtual void setTreeClippingPlane(float fFar);
88  virtual void getTreeClippingPlane( float& fFar );
89 
90  virtual void setTree3DLodDistances(float fNear, float fFar);
91  virtual void getTree3DLodDistances( float& fNear, float& fFar );
92 
93  virtual void setTreeBillboardDistances(float fStart, float fEnd);
94  virtual void getTreeBillboardDistances(float& fStart, float& fEnd);
95 
97  virtual void setBillboardFadeOutRange(float fRange);
99  virtual void getBillboardFadeOutRange(float& fRange);
100 
101  virtual void enableBillboardRendering(bool enable);
102  virtual bool isBillboardRenderingEnabled() const;
103 
104  virtual void enable3DTreeRendering(bool enable);
105  virtual bool is3DTreeRenderingEnabled() const;
106 
107  virtual void enableReceiveShadows(bool enable);
108  virtual bool isReceiveShadowsEnabled() const { return myReceiveShadows; }
109 
110  void setBoundingBox(const osg::BoundingBox& box);
111  const osg::BoundingBox& getBoundingBox(void) const;
112 
115  osg::ref_ptr<osg::Node> getRootNode(void);
116 
119  void programBoundCallback(osg::ref_ptr<makOsgSpeedTree::Forest> pForest,
120  const makOsgSpeedTree::TreeType* pTreeType, uint32 programID);
121 
124  virtual void slot_reloadShaders();
125 
127  virtual void slot_treeProfilingChanged(bool active);
128 
130  virtual void slot_useGlobalAmbientChanged(bool enabled);
131 
133  virtual void slot_useGlobalDiffuseChanged(bool enabled);
134 
137  virtual void slot_perPixelLightingEnabledChanged(bool enabled);
138 
140  virtual void slot_planarReflectionsShowSpeedTreesChanged(bool enabled);
141 
143  virtual void processUnitialized();
144 
146  virtual bool initialized();
147 
149  virtual tbb::mutex& mergeDrawMutex();
150 
152  virtual tbb::mutex& mergeUpdateMutex();
153 
155  osg::ref_ptr<makOsgSpeedTree::Forest>& makSpeedTreeForest();
156 
159  virtual void preCullSetup(osg::ref_ptr<makOsgSpeedTree::Forest> forest, osg::Camera* camera);
160 
161  protected:
162 
163  void init(const std::string& strVisManagerType);
164 
165  // The tree scale from the .earth file and the terrain patch
166  // are applied in DtStreamedSpeedTreeThread::handleRequest
167  // However, the user could also set the model definition
168  // scale. Store model def scale when we store the ST file name
169  // so we can multiply it into the record.scale().
171  {
172  std::string strSRTFileName;
174  };
175 
176  protected:
177  void connectSignals(void);
178 
179  osg::Vec3f computeWindDirection(float fDirection);
180 
181  void setWindStrength(float fStrength);
182  void setWindDirection(float fDirection);
183 
185  bool preUpdateCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest);
186 
187  bool preRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
188  osg::RenderInfo& renderInfo);
189  void postRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
190  osg::RenderInfo& renderInfo);
191  void provideTimeCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
192  double& fTime);
193 
194  void pushGraphicsState(osg::RenderInfo& renderInfo);
195  void popGraphicsState(osg::RenderInfo& renderInfo);
196 
198  virtual DtModelDefinition* findModelDefinition(
199  const std::string& modelDef);
200 
202  bool createTree(DtTreeRecord& record);
203 
206  void initTreeDesc(makOsgSpeedTree::TreeInstanceDescriptor& desc,
207  DtTreeRecord& record, const DtVector& up, DtCoordinateConverter* converter);
210  void initTreeDesc(makOsgSpeedTree::TreeInstanceDescriptor& desc,
211  DtTreeRecord& record, DtCoordinateConverter* converter, bool setupTopoFrame=true);
212  void applyModelDefParameters(makOsgSpeedTree::TreeInstanceDescriptor& desc,
213  DtTreeRecord& record);
214 
223  virtual const bool bindLightingAttributes(const osg::Node* node,
224  const uint32 programID, DtOsgRenderer* osgRenderer,
225  const std::string& searchNodeName);
226 
227  protected:
228  static DtOsgCullVisitorParameters* getCullParameters(
229  osg::RenderInfo& renderInfo);
230 
231  static bool isCameraOrthographic(DtOsgCullVisitorParameters* params);
232 
234  static bool isReflectionCamera(osg::Camera *camera);
235 
236  static float getZoomFactor(DtOsgCullVisitorParameters* params, DtDe& de);
237 
238  protected:
239 
240  static const float myCellSize;
241 
242  //Static members used by imgui to keep track of the ImGui state.
243  static unsigned int theLastImGuiFrameNumber;
244  static bool theEnableAsyncUpdate;
245 
246  protected:
247  makOsgSpeedTree::TreeInstanceDescriptor myScratchTreeInstanceDesc;
248  makOsgSpeedTree::TreeInstanceDescriptorCollection
250  makOsgSpeedTree::TreeInstanceCollection myScratchInstanceCollection;
251 
252  typedef std::map<std::string, ModelDefParams> MapModelDefToSTFileName;
254 
256 
257  osg::Camera* myCamera;
258 
260 
261  std::unordered_map<int, bool> myShaderBoundMap;
262 
263  float myFarPlane;
264 
269  osg::BoundingBox myBoundingBox;
272 
273  typedef std::unordered_map<DtUniqueID,
274  makOsgSpeedTree::TreeInstanceCollection> MapCellsToTrees;
276 
277  typedef std::unordered_map<DtUniqueID, makOsgSpeedTree::TreeInstance*>
280 
282  unsigned int myLastShaderHash;
283 
286 
289 
291 
293 
294  // REMOVE POST UBO CHANGE:
296 
297  osg::GLExtensions * myExt;
299 
300  // Couple mutexes to avoid thread safety issues.
301  // The merge draw mutex should be moved down into the vis manager but this
302  // was the safer and lower risk option at the moment.
306 
309 
311 
313  };
314 
319  {
320  public:
323 
324  private:
329 
330  public:
332  virtual DtForestObject* create(DtDe& de, DtUniqueID id);
333 
335  virtual DtForestObject* create(DtDe& de, DtUniqueID id, const std::string& strVisManagerType);
336  };
337 }
DtSpeedTreeForestObjectCreator is the SpeedTree implementation of a DtForestObjectCreator.
Definition: DtSpeedTreeForest.h:318
const std::string mySpeedTreeMultiViewUserFuncsVertexShader
Definition: DtSpeedTreeForest.h:290
MapModelDefToSTFileName myMapModelDefToSTFileName
Definition: DtSpeedTreeForest.h:253
DT_DLL_EXAMPLESCENEROOTPLUGIN void init(DtDe &anIG)
osg::GLExtensions * myExt
Definition: DtSpeedTreeForest.h:297
static bool theEnableAsyncUpdate
Definition: DtSpeedTreeForest.h:244
static unsigned int theLastImGuiFrameNumber
Definition: DtSpeedTreeForest.h:243
The DtEnvironmentInfo class is responsible for holding data related to the environment such as sky li...
Definition: DtEnvironmentInfo.h:27
The DtOsgRenderer is the component responsible for rendering 3D images onto the screen via OpenSceneG...
Definition: DtOsgRenderer.h:87
float myFarPlane
Definition: DtSpeedTreeForest.h:263
bool myShouldUpdateThisFrame
Definition: DtSpeedTreeForest.h:310
#define DT_DLL_VRVST
Definition: vrvSt.h:20
std::unordered_map< int, bool > myShaderBoundMap
Definition: DtSpeedTreeForest.h:261
std::string strSRTFileName
Definition: DtSpeedTreeForest.h:172
DtCoordinateConverter is the base class for &#39;local (cig) to geocentric&#39; converters.
Definition: DtCoordinateConverter.h:25
bool myReloadShaders
Should we reload the SpeedTree shaders.
Definition: DtSpeedTreeForest.h:285
makOsgSpeedTree::TreeInstanceDescriptor myScratchTreeInstanceDesc
Definition: DtSpeedTreeForest.h:247
const std::string mySpeedTreeDefaultUserFuncsPixelShader
Definition: DtSpeedTreeForest.h:288
makOsgSpeedTree::TreeInstanceCollection myScratchInstanceCollection
Definition: DtSpeedTreeForest.h:250
Contains DLL export macros.
std::vector< DtTreeRecord * > DtVectorTreeRecords
Definition: DtTreeRecord.h:137
DtSpeedTreeCore & myCore
Definition: DtSpeedTreeForest.h:270
Contains makVrv::DtForestObject class.
DtForestObject provides a way to make lots of trees.
Definition: DtForestObject.h:26
osg::BoundingBox myBoundingBox
Definition: DtSpeedTreeForest.h:269
float modelDefScale
Definition: DtSpeedTreeForest.h:173
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:38
MapTreeIDToTree myMapTreeIDtoTree
Definition: DtSpeedTreeForest.h:279
DtSpeedTreeCore wraps and provides the interface to makOsgSpeedTree.
Definition: DtSpeedTreeCore.h:28
static const float myCellSize
Definition: DtSpeedTreeForest.h:240
const std::string mySpeedTreeDefaultUserFuncsVertexShader
Definition: DtSpeedTreeForest.h:287
virtual bool isReceiveShadowsEnabled() const
Definition: DtSpeedTreeForest.h:108
A DtTreeRecord holds the requisite information needed to create a tree in a forest.
Definition: DtTreeRecord.h:30
DtSpeedTreeForest is the SpeedTree implementation of a distributed DtForestObject.
Definition: DtSpeedTreeForest.h:48
DtEnvironmentInfo & myEnvInfo
Definition: DtSpeedTreeForest.h:271
bool myReceiveShadows
Definition: DtSpeedTreeForest.h:298
unsigned int myRestoreVisibilityNodeMask
Definition: DtSpeedTreeForest.h:312
osg::ref_ptr< osg::PositionAttitudeTransform > myPat
Definition: DtSpeedTreeForest.h:267
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
The osg cull vistor parameters class provides additional culling and intersector parameters for choos...
Definition: DtOsgCullVisitorParameters.h:42
DtCoordinateConverter * myMergeBackgroundConverter
Definition: DtSpeedTreeForest.h:308
std::unordered_map< DtUniqueID, makOsgSpeedTree::TreeInstanceCollection > MapCellsToTrees
Definition: DtSpeedTreeForest.h:274
DtCoordinateConverter * myMainThreadConverter
Definition: DtSpeedTreeForest.h:307
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
MapCellsToTrees myMapCellsToTrees
Definition: DtSpeedTreeForest.h:275
osg::ref_ptr< osg::Uniform > myNormalMatrixUniform
Definition: DtSpeedTreeForest.h:295
Base class to provide boost signal/slot management.
osg::Camera * myCamera
Definition: DtSpeedTreeForest.h:257
osg::ref_ptr< makOsgSpeedTree::Forest > myForest
Definition: DtSpeedTreeForest.h:268
makOsgSpeedTree::TreeInstanceDescriptorCollection myScratchTreeInstanceDescCollection
Definition: DtSpeedTreeForest.h:249
DtSignalConnectionManager myConnections
Definition: DtSpeedTreeForest.h:259
int myPreviousTU
Definition: DtSpeedTreeForest.h:255
unsigned int uint32
Definition: DtCommonTypes.h:28
The DtForestObjectCreator for the DtForestObject class.
Definition: DtForestObject.h:103
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
std::unordered_map< DtUniqueID, makOsgSpeedTree::TreeInstance * > MapTreeIDToTree
Definition: DtSpeedTreeForest.h:278
tbb::mutex myForestMergeDrawMutex
Definition: DtSpeedTreeForest.h:303
std::map< std::string, ModelDefParams > MapModelDefToSTFileName
Definition: DtSpeedTreeForest.h:252
Contains the DtCVMarkerSeries and DtCVMarkerSeries class declarations responsible for wrapping up to ...
osg::ref_ptr< osg::Uniform > myProjectionMatrixInverseUniform
Definition: DtSpeedTreeForest.h:292
Contains makVrv::DtTreeRecord class.
unsigned int myLastShaderHash
shader hash for the last shaders passed down to SpeedTree
Definition: DtSpeedTreeForest.h:282
osg::ref_ptr< osg::Group > myRoot
The forest is a collection of trees under a group node.
Definition: DtSpeedTreeForest.h:266
Definition: DtSpeedTreeForest.h:170
tbb::mutex myForestMergeUpdateMutex
Definition: DtSpeedTreeForest.h:305
tbb::mutex myForestAddRemoveMutex
Definition: DtSpeedTreeForest.h:304

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)