OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
quadtreenode.hpp
Go to the documentation of this file.
1 #ifndef OPENMW_COMPONENTS_TERRAIN_QUADTREENODE_H
2 #define OPENMW_COMPONENTS_TERRAIN_QUADTREENODE_H
3 
4 #include <osg/Group>
5 
6 #include "defs.hpp"
7 
8 namespace Terrain
9 {
10 
12  {
13  NW = 0,
14  NE = 1,
15  SW = 2,
16  SE = 3,
18  };
19 
20  class QuadTreeNode;
21  class LodCallback : public osg::Referenced
22  {
23  public:
24  virtual ~LodCallback() {}
25 
26  virtual bool isSufficientDetail(QuadTreeNode *node, const osg::Vec3f& eyePoint) = 0;
27  };
28 
29  class ViewDataMap;
30  class ViewData;
31 
32  class QuadTreeNode : public osg::Group
33  {
34  public:
35  QuadTreeNode(QuadTreeNode* parent, ChildDirection dir, float size, const osg::Vec2f& center);
36  virtual ~QuadTreeNode();
37 
39 
40  QuadTreeNode* getChild(unsigned int i);
41  using osg::Group::getNumChildren;
42 
45 
48 
50  void initNeighbours();
51 
52  void setBoundingBox(const osg::BoundingBox& boundingBox);
53  const osg::BoundingBox& getBoundingBox() const;
54  bool hasValidBounds() const { return mValidBounds; }
55 
56  virtual osg::BoundingSphere computeBound() const;
57 
59  float getSize() const;
60 
62  const osg::Vec2f& getCenter() const;
63 
64  virtual void traverse(osg::NodeVisitor& nv);
65 
67  void setLodCallback(LodCallback* lodCallback);
68 
70 
72  void setViewDataMap(ViewDataMap* map);
73 
75 
77  ViewData* getView(osg::NodeVisitor& nv);
78 
79  private:
81 
83 
85 
86  osg::BoundingBox mBoundingBox;
88  float mSize;
89  osg::Vec2f mCenter;
90 
91  osg::ref_ptr<LodCallback> mLodCallback;
92 
94  };
95 
96 }
97 
98 #endif
ViewDataMap * getViewDataMap()
Definition: quadtreenode.cpp:126
virtual bool isSufficientDetail(QuadTreeNode *node, const osg::Vec3f &eyePoint)=0
ViewData * getView(osg::NodeVisitor &nv)
Create or retrieve a view for the given traversal.
Definition: quadtreenode.cpp:131
void setBoundingBox(const osg::BoundingBox &boundingBox)
Definition: quadtreenode.cpp:153
QuadTreeNode(QuadTreeNode *parent, ChildDirection dir, float size, const osg::Vec2f &center)
Definition: quadtreenode.cpp:58
bool mValidBounds
Definition: quadtreenode.hpp:87
const osg::Vec2f & getCenter() const
center in cell coordinates
Definition: quadtreenode.cpp:176
osg::Vec2f mCenter
Definition: quadtreenode.hpp:89
osg::BoundingBox mBoundingBox
Definition: quadtreenode.hpp:86
Definition: quadtreenode.hpp:21
const osg::BoundingBox & getBoundingBox() const
Definition: quadtreenode.cpp:161
ViewDataMap * mViewDataMap
Definition: quadtreenode.hpp:93
Definition: quadtreenode.hpp:14
QuadTreeNode * mNeighbours[4]
Definition: quadtreenode.hpp:82
QuadTreeNode * mParent
Definition: quadtreenode.hpp:80
virtual ~LodCallback()
Definition: quadtreenode.hpp:24
Definition: viewdata.hpp:16
QuadTreeNode * getParent()
Definition: quadtreenode.cpp:74
bool hasValidBounds() const
Definition: quadtreenode.hpp:54
Definition: quadtreenode.hpp:13
Definition: viewdata.hpp:70
float getSize() const
size in cell coordinates
Definition: quadtreenode.cpp:171
virtual void traverse(osg::NodeVisitor &nv)
Definition: quadtreenode.cpp:98
void setViewDataMap(ViewDataMap *map)
Set the view data map that the finally used nodes for a given camera/intersection are pushed onto...
Definition: quadtreenode.cpp:121
float mSize
Definition: quadtreenode.hpp:88
Definition: quadtreenode.hpp:15
ChildDirection mDirection
Definition: quadtreenode.hpp:84
QuadTreeNode * getChild(unsigned int i)
Definition: quadtreenode.cpp:79
void initNeighbours()
Initialize neighbours - do this after the quadtree is built.
Definition: quadtreenode.cpp:89
QuadTreeNode * getNeighbour(Direction dir)
Get neighbour node in this direction.
Definition: quadtreenode.cpp:84
Definition: quadtreenode.hpp:32
ChildDirection getDirection()
Returns our direction relative to the parent node, or Root if we are the root node.
Definition: quadtreenode.hpp:44
virtual ~QuadTreeNode()
Definition: quadtreenode.cpp:70
Direction
Definition: defs.hpp:9
LodCallback * getLodCallback()
Definition: quadtreenode.cpp:116
Definition: quadtreenode.hpp:16
osg::ref_ptr< LodCallback > mLodCallback
Definition: quadtreenode.hpp:91
virtual osg::BoundingSphere computeBound() const
Definition: quadtreenode.cpp:166
void setLodCallback(LodCallback *lodCallback)
Set the Lod callback to use for determining when to stop traversing further down the quad tree...
Definition: quadtreenode.cpp:111
Definition: quadtreenode.hpp:17
ChildDirection
Definition: quadtreenode.hpp:11