X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FOctree.hh;h=774eece11c56cb34236a82d2b23ce6f501765351;hp=d896844f0379a4ab7ca1cebe32d52cb5a719a775;hb=fdfba4553433b9b2804c2772c7645211b828c2ea;hpb=5fa5f117f28922a7e539a432367960c1a61f837d diff --git a/src/Moof/Octree.hh b/src/Moof/Octree.hh index d896844..774eece 100644 --- a/src/Moof/Octree.hh +++ b/src/Moof/Octree.hh @@ -51,7 +51,7 @@ class Camera; struct OctreeNode : public Entity { - std::list objects; + std::list objects; OctreeNode() { @@ -69,28 +69,28 @@ struct OctreeNode : public Entity void draw(Scalar alpha) const { - std::list::const_iterator it; + std::list::const_iterator it; for (it = objects.begin(); it != objects.end(); ++it) { (*it)->draw(alpha); } - //if (!objects.empty()) - //aabb_.draw(); // temporary + if (!objects.empty()) + aabb_.draw(); // temporary } void drawIfVisible(Scalar alpha, const Camera& cam) const { - std::list::const_iterator it; + std::list::const_iterator it; for (it = objects.begin(); it != objects.end(); ++it) { (*it)->drawIfVisible(alpha, cam); } - //if (!objects.empty()) - //aabb_.draw(); + if (!objects.empty()) + aabb_.draw(); } @@ -105,7 +105,7 @@ struct OctreeNode : public Entity } - static bool compareZOrder(EntityPtr a, EntityPtr b) + static bool compareZOrder(EntityP a, EntityP b) { return a->getSphere().point[2] < b->getSphere().point[2]; } @@ -118,21 +118,40 @@ struct OctreeNode : public Entity }; +class Octree; +typedef boost::shared_ptr OctreeP; + class Octree { + stlplus::ntree::iterator + insert(stlplus::ntree::iterator node, EntityP entity); + + void addChild(stlplus::ntree::iterator node, int index); + + void draw(stlplus::ntree::iterator node, Scalar alpha); + void drawIfVisible(stlplus::ntree::iterator node, + Scalar alpha, const Camera& cam); + + stlplus::ntree tree_; + public: + inline static OctreeP alloc(const OctreeNode& rootNode) + { + return OctreeP(new Octree(rootNode)); + } + explicit Octree(const OctreeNode& rootNode) { tree_.insert(rootNode); } - stlplus::ntree::iterator insert(EntityPtr entity) + stlplus::ntree::iterator insert(EntityP entity) { return insert(tree_.root(), entity); } - stlplus::ntree::iterator reinsert(EntityPtr entity, + stlplus::ntree::iterator reinsert(EntityP entity, stlplus::ntree::iterator node); void drawIfVisible(Scalar alpha, const Camera& cam) @@ -141,21 +160,8 @@ public: } void sort(); - -private: - stlplus::ntree::iterator insert(stlplus::ntree::iterator node, EntityPtr entity); - - void addChild(stlplus::ntree::iterator node, int index); - - void draw(stlplus::ntree::iterator node, Scalar alpha); - void drawIfVisible(stlplus::ntree::iterator node, - Scalar alpha, const Camera& cam); - - stlplus::ntree tree_; }; -typedef boost::shared_ptr OctreePtr; - } // namespace Mf