VR-Forces Development_Version 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 DtOsgCullVisitorParameters;
40 
45  {
46  public:
47  friend class DtSpeedTreeForestClassesCreator;
49 
50  virtual ~DtSpeedTreeForest();
51 
52  virtual void addUniqueTree(DtTreeRecord& record);
53  virtual void removeTree(DtUniqueID record);
54  virtual void removeAllTrees();
55 
56  virtual DtUniqueID addUniqueTreesToUniqueCell(
57  DtVectorTreeRecords& records);
58  virtual void removeAllUniqueTreesAndUniqueCell(DtUniqueID cellID);
59 
60  virtual void setTreeClippingPlane(float fFar);
61  virtual void getTreeClippingPlane( float& fFar );
62 
63  virtual void setTree3DLodDistances(float fNear, float fFar);
64  virtual void getTree3DLodDistances( float& fNear, float& fFar );
65 
66  virtual void setTreeBillboardDistances(float fStart, float fEnd);
67  virtual void getTreeBillboardDistances(float& fStart, float& fEnd);
68 
69  void enableBillboardRendering(bool enable);
70  void enable3DTreeRendering(bool enable);
71 
72  void setBoundingBox(const osg::BoundingBox& box);
73  const osg::BoundingBox& getBoundingBox(void) const;
74 
77  osg::ref_ptr<osg::Node> getRootNode(void);
78 
81  void programBoundCallback(osg::ref_ptr<makOsgSpeedTree::Forest> pForest,
82  const makOsgSpeedTree::TreeType* pTreeType, uint32 programID);
83 
86  virtual void slot_reloadShaders();
87 
89  virtual void slot_useGlobalAmbientChanged(bool enabled);
90 
92  virtual void slot_useGlobalDiffuseChanged(bool enabled);
93 
96  virtual void slot_perPixelLightingEnabledChanged(bool enabled);
97 
98 
99 
100  protected:
101 
106  const std::string& strVisManagerType);
107 
108  void init(const std::string& strVisManagerType);
109 
110  // The tree scale from the .earth file and the terrain patch
111  // are applied in DtStreamedSpeedTreeThread::handleRequest
112  // However, the user could also set the model definition
113  // scale. Store model def scale when we store the ST file name
114  // so we can multiply it into the record.scale().
116  {
117  std::string strSRTFileName;
119  };
120 
121  protected:
122  void connectSignals(void);
123 
124  osg::Vec3f computeWindDirection(float fDirection);
125 
126  void setWindStrength(float fStrength);
127  void setWindDirection(float fDirection);
128 
129  bool preUpdateCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
130  osg::RenderInfo& renderInfo);
131  bool preRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
132  osg::RenderInfo& renderInfo);
133  void postUpdateCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
134  osg::RenderInfo& renderInfo);
135  void postRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
136  osg::RenderInfo& renderInfo);
137  void provideTimeCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
138  double& fTime);
139 
140  void pushGraphicsState(osg::RenderInfo& renderInfo);
141  void popGraphicsState(osg::RenderInfo& renderInfo);
142 
144  virtual DtModelDefinition* findModelDefinition(
145  const std::string& modelDef);
146 
148  bool createTree(DtTreeRecord& record);
149 
150  void initTreeDesc(makOsgSpeedTree::TreeInstanceDescriptor& desc,
151  DtTreeRecord& record, const DtVector& up);
152  void initTreeDesc(makOsgSpeedTree::TreeInstanceDescriptor& desc,
153  DtTreeRecord& record, bool setupTopoFrame=true);
154  void applyModelDefParameters(makOsgSpeedTree::TreeInstanceDescriptor& desc,
155  DtTreeRecord& record);
156 
157  protected:
158  static DtOsgCullVisitorParameters* getCullParameters(
159  osg::RenderInfo& renderInfo);
160 
161  static bool isCameraOrthographic(DtOsgCullVisitorParameters* params);
162 
163  static float getZoomFactor(DtOsgCullVisitorParameters* params, DtDe& de);
164 
165  protected:
166 
167  static const float myCellSize;
168 
169  protected:
170 
171  makOsgSpeedTree::TreeInstanceDescriptor myScratchTreeInstanceDesc;
172  makOsgSpeedTree::TreeInstanceDescriptorCollection
174  makOsgSpeedTree::TreeInstanceCollection myScratchInstanceCollection;
175 
176  typedef std::map<std::string, ModelDefParams> MapModelDefToSTFileName;
178 
180 
181  //keeps track of the current state of vrvVisualOverride so the
182  //programBoundCallback can apply it to the uniform
183  osg::Camera* myCamera;
184 
186 
187  std::map<int, bool> myShaderBoundMap;
188 
189  float myFarPlane;
190 
192  osg::ref_ptr<osg::Group> myRoot;
193  osg::ref_ptr<osg::PositionAttitudeTransform> myPat;
194  osg::ref_ptr<makOsgSpeedTree::Forest> myForest;
195  osg::BoundingBox myBoundingBox;
197 
198  typedef boost::unordered_map<DtUniqueID,
199  makOsgSpeedTree::TreeInstanceCollection> MapCellsToTrees;
201 
202  typedef boost::unordered_map<DtUniqueID, makOsgSpeedTree::TreeInstance*>
205 
207  unsigned int myLastShaderHash;
208 
211 
217  };
218 
223  {
224  public:
226  virtual DtForestObject* create(DtDe& de, DtUniqueID id);
227  virtual DtForestObject* create(DtDe& de, DtUniqueID id,
228  const std::string& strVisManagerType);
229 
230  private:
231 
232  };
233 }

Document ID: Generated on Tue Mar 8 22:13:38 EST 2016 from SVN revision 162938
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)