VR-Forces 4.3 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) 2007 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 /******************************************************************************
6 ** $RCSfile: DtSpeedTreeForest.h,v $ $Revision: 1.26 $ $State: Exp $
7 ******************************************************************************/
8 
12 
13 #ifndef DtSpeedTreeForest_H_
14 #define DtSpeedTreeForest_H_
15 
16 #include <vrvSt/vrvSt.h>
17 #include <vrvOsg/DtOsgForest.h>
18 #include <osg/ref_ptr>
19 #include <osg/PositionAttitudeTransform>
20 #include <osg/Geode>
21 #include <osg/BoundingBox>
22 
23 #include <OsgST_Forest.h>
24 
25 #include <boost/unordered_map.hpp>
26 
27 namespace makOsgSpeedTree
28 {
29  class TreeInstance;
30 }
31 
32 namespace makVrv
33 {
34  class DtAgentUpdateResolverInterface;
35  class DtSpeedTreeModelInstance;
36  class DtSpeedTreeCore;
37 
39  {
40 
41  public:
42 
43  friend class DtSpeedTreeForestClassesCreator;
45 
46  virtual ~DtSpeedTreeForest();
47 
48  virtual void addUniqueTree(const DtTreeRecord& record);
49  virtual void removeTree(DtUniqueID record);
50 
51  virtual void setTreeClippingPlane(float fFar);
52  virtual void setTree3DLodDistances(float fNear, float fFar);
53  virtual void setTreeBillboardDistances(float fStart, float fEnd);
54 
56  virtual DtSpeedTreeModelInstance* findSpeedTreeModelInstance( const std::string& modelDef);
57 
58  void setBoundingBox(const osg::BoundingBox& box);
59  const osg::BoundingBox& getBoundingBox(void) const;
60 
62  osg::ref_ptr<osg::Node> getRootNode(void);
63 
65  void programBoundCallback(osg::ref_ptr<makOsgSpeedTree::Forest> pForest, const makOsgSpeedTree::TreeType* pTreeType, uint32 programID);
66 
67  protected:
68 
71 
73  virtual void slot_treeModelInstanceToBeDestroyed(const std::string& modelDef);
74 
76  virtual void slot_treeModelInstanceCreated(const std::string& modelDef);
77 
79  virtual DtTreeModel* castUpdaterToTreeModel( DtAgentUpdateResolverInterface* updater );
80 
82  virtual bool createTree(const DtTreeRecord& record);
83 
84  protected:
85 
86  osg::ref_ptr<osg::PositionAttitudeTransform> myPat;
87 
88  osg::ref_ptr<makOsgSpeedTree::Forest> myForest;
89 
90  osg::BoundingBox myBoundingBox;
91 
93 
94  private:
95  void connectSignals(void);
96  void disconnectSignals(void);
97 
98  osg::Vec3f computeWindDirection(float fDirection);
99 
100  void setWindStrength(float fStrength);
101  void setWindDirection(float fDirection);
102 
103  typedef boost::unordered_map<DtUniqueID, makOsgSpeedTree::TreeInstance*> MapIdsToTreeInstances;
105 
106  bool preUpdateCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest, osg::RenderInfo& renderInfo);
107  bool preRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest, osg::RenderInfo& renderInfo);
108  void postUpdateCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest, osg::RenderInfo& renderInfo);
109  void postRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest, osg::RenderInfo& renderInfo);
110  void provideTimeCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest, double& fTime);
111 
112  makOsgSpeedTree::TreeInstanceDescriptor myScratchTreeInstanceDesc;
113 
114  typedef std::map<const DtModelDefinition*, std::string> MapModelDefToSTFileName;
116 
117  static const float myCellSize;
118 
120  void pushGraphicsState(osg::RenderInfo& renderInfo);
121  void popGraphicsState(osg::RenderInfo& renderInfo);
122 
123  //keeps track of the current state of vrvVisualOverride so the programBoundCallback can apply it to the uniform
124  osg::Camera* myCamera;
125 
126  std::map<int, bool> myShaderBoundMap;
127 
128 
129  };
130 
133  {
134  public:
136  static DtSpeedTreeForestSignaler& instance(DtDe&);
137 
140 
142  boost::signal<void (DtSpeedTreeForest&)> signal_forestCreated;
143 
145  boost::signal<void (DtSpeedTreeForest&)> signal_forestToBeDestroyed;
146 
147  protected:
150 
151  private:
154  };
155 
157  {
158  public:
160  virtual DtForestObject* create(DtDe& de, DtUniqueID id);
161 
162  private:
163 
164  };
165 }
166 
167 #endif
168 

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)