VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtSpeedTreeForest.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvSt/vrvSt.h>
13 #include <vrvCore/DtForestObject.h>
15 #include <osg/ref_ptr>
16 #include <osg/PositionAttitudeTransform>
17 #include <osg/Geode>
18 #include <osg/BoundingBox>
19 
20 #include <vrvCore/DtTreeRecord.h>
21 
22 #include <OsgST_Forest.h>
23 
24 #include <boost/unordered_map.hpp>
25 
26 
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 
46  {
47  public:
48  friend class DtSpeedTreeForestClassesCreator;
50 
51  virtual ~DtSpeedTreeForest();
52 
53  virtual void addUniqueTree(DtTreeRecord& record);
54  virtual void removeTree(DtUniqueID record);
55  virtual void removeAllTrees();
56 
57  virtual DtUniqueID addUniqueTreesToUniqueCell(
58  DtVectorTreeRecords& records);
59  virtual void removeAllUniqueTreesAndUniqueCell(DtUniqueID cellID);
60 
61  virtual void setTreeClippingPlane(float fFar);
62  virtual void getTreeClippingPlane( float& fFar );
63 
64  virtual void setTree3DLodDistances(float fNear, float fFar);
65  virtual void getTree3DLodDistances( float& fNear, float& fFar );
66 
67  virtual void setTreeBillboardDistances(float fStart, float fEnd);
68  virtual void getTreeBillboardDistances(float& fStart, float& fEnd);
69 
70  void enableBillboardRendering(bool enable);
71  void enable3DTreeRendering(bool enable);
72 
73  void setBoundingBox(const osg::BoundingBox& box);
74  const osg::BoundingBox& getBoundingBox(void) const;
75 
78  osg::ref_ptr<osg::Node> getRootNode(void);
79 
82  void programBoundCallback(osg::ref_ptr<makOsgSpeedTree::Forest> pForest,
83  const makOsgSpeedTree::TreeType* pTreeType, uint32 programID);
84 
87  virtual void slot_reloadShaders();
88 
90  virtual void slot_useGlobalAmbientChanged(bool enabled);
91 
93  virtual void slot_useGlobalDiffuseChanged(bool enabled);
94 
97  virtual void slot_perPixelLightingEnabledChanged(bool enabled);
98 
99 
100 
101  protected:
102 
107  const std::string& strVisManagerType);
108 
109  void init(const std::string& strVisManagerType);
110 
111  // The tree scale from the .earth file and the terrain patch
112  // are applied in DtStreamedSpeedTreeThread::handleRequest
113  // However, the user could also set the model definition
114  // scale. Store model def scale when we store the ST file name
115  // so we can multiply it into the record.scale().
117  {
118  std::string strSRTFileName;
120  };
121 
122  protected:
123  void connectSignals(void);
124 
125  osg::Vec3f computeWindDirection(float fDirection);
126 
127  void setWindStrength(float fStrength);
128  void setWindDirection(float fDirection);
129 
130  bool preUpdateCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
131  osg::RenderInfo& renderInfo);
132  bool preRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
133  osg::RenderInfo& renderInfo);
134  void postUpdateCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
135  osg::RenderInfo& renderInfo);
136  void postRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
137  osg::RenderInfo& renderInfo);
138  void provideTimeCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
139  double& fTime);
140 
141  void pushGraphicsState(osg::RenderInfo& renderInfo);
142  void popGraphicsState(osg::RenderInfo& renderInfo);
143 
145  virtual DtModelDefinition* findModelDefinition(
146  const std::string& modelDef);
147 
149  bool createTree(DtTreeRecord& record);
150 
151  void initTreeDesc(makOsgSpeedTree::TreeInstanceDescriptor& desc,
152  DtTreeRecord& record, const DtVector& up);
153  void initTreeDesc(makOsgSpeedTree::TreeInstanceDescriptor& desc,
154  DtTreeRecord& record, bool setupTopoFrame=true);
155  void applyModelDefParameters(makOsgSpeedTree::TreeInstanceDescriptor& desc,
156  DtTreeRecord& record);
157 
158  protected:
159  static DtOsgCullVisitorParameters* getCullParameters(
160  osg::RenderInfo& renderInfo);
161 
162  static bool isCameraOrthographic(DtOsgCullVisitorParameters* params);
163 
164  static float getZoomFactor(DtOsgCullVisitorParameters* params, DtDe& de);
165 
166  protected:
167 
168  static const float myCellSize;
169 
170  protected:
171 
172  makOsgSpeedTree::TreeInstanceDescriptor myScratchTreeInstanceDesc;
173  makOsgSpeedTree::TreeInstanceDescriptorCollection
175  makOsgSpeedTree::TreeInstanceCollection myScratchInstanceCollection;
176 
177  typedef std::map<std::string, ModelDefParams> MapModelDefToSTFileName;
179 
181 
182  //keeps track of the current state of vrvVisualOverride so the
183  //programBoundCallback can apply it to the uniform
184  osg::Camera* myCamera;
185 
187 
188  boost::unordered_map<int, bool> myShaderBoundMap;
189 
190  float myFarPlane;
191 
193  osg::ref_ptr<osg::Group> myRoot;
194  osg::ref_ptr<osg::PositionAttitudeTransform> myPat;
195  osg::ref_ptr<makOsgSpeedTree::Forest> myForest;
196  osg::BoundingBox myBoundingBox;
199 
200  typedef boost::unordered_map<DtUniqueID,
201  makOsgSpeedTree::TreeInstanceCollection> MapCellsToTrees;
203 
204  typedef boost::unordered_map<DtUniqueID, makOsgSpeedTree::TreeInstance*>
207 
209  unsigned int myLastShaderHash;
210 
213 
216 
217 
218  };
219 
224  {
225  public:
227  virtual DtForestObject* create(DtDe& de, DtUniqueID id);
228  virtual DtForestObject* create(DtDe& de, DtUniqueID id,
229  const std::string& strVisManagerType);
230 
231  private:
232 
233  };
234 }

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)