Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
LodGrid.h
1 //
2 // LodGrid.h
3 //
4 // Copyright (c) 2001-2007 Virtual Terrain Project
5 // Free for all uses, see license.txt for details.
6 //
7 
8 #ifndef LODGRIDH
9 #define LODGRIDH
10 
11 class vtGeode;
12 class vtTransform;
13 class vtHeightField3d;
14 
17 
35 class vtLodGrid : public vtGroup
36 {
37 public:
38  vtLodGrid();
39  virtual void Setup(const FPoint3 &origin, const FPoint3 &size,
40  int iDimension, float fLODDistance, vtHeightField3d *pHF = NULL) = 0;
41 
42  // methods
43  bool AddToGrid(osg::Node *pNode);
44  void RemoveFromGrid(osg::Node *pNode);
45 
46  virtual void SetDistance(float fLODDistance) = 0;
47  float GetDistance() { return m_fLODDistance; }
48  int GetDimension() { return m_dim; }
49  FPoint3 GetCellSize() { return m_step; }
50 
51 protected:
52  FPoint3 m_origin;
53  FPoint3 m_size;
54  FPoint3 m_step;
55 
56  int m_dim;
57  float m_fLODDistance;
58  vtHeightField3d *m_pHeightField;
59 
60  virtual osg::Group *FindCellParent(const FPoint3 &point) = 0;
61  virtual void AllocateCell(int a, int b) = 0;
62  virtual osg::Group *GetCell(int a, int b) = 0;
63  void DetermineCell(const FPoint3 &pos, int &a, int &b);
64 };
65 
73 class vtSimpleLodGrid : public vtLodGrid
74 {
75 public:
77  ~vtSimpleLodGrid();
78 
79  void Setup(const FPoint3 &origin, const FPoint3 &size,
80  int iDimension, float fLODDistance, vtHeightField3d *pHF = NULL);
81 
82  // methods
83  void SetDistance(float fLODDistance);
84 
85 protected:
86  vtLOD **m_pCells;
87 
88  osg::Group *FindCellParent(const FPoint3 &point);
89  void AllocateCell(int a, int b);
90  osg::Group *GetCell(int a, int b);
91 };
92  // sg
94 
95 #endif // LODGRIDH
96