00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 template<typename Item> inline
00024 OctreeNode<Item>::OctreeNode() :
00025 m_is_leaf(true) {}
00026
00027 template<typename Item> inline
00028 OctreeNode<Item>::OctreeNode(const AABB3 &voxel) :
00029 m_voxel(voxel),
00030 m_center(voxel.GetCenter()),
00031 m_is_leaf(true) {}
00032
00033 template<typename Item> inline
00034 OctreeNode<Item>::~OctreeNode() {
00035 if(!m_is_leaf) {
00036 for(int i = 0; i < 8; ++i)
00037 delete m_children[i];
00038 }
00039 }
00040
00041 template<typename Item> inline
00042 Octree<Item>::Octree() {
00043 m_root = new OctreeNode<Item>();
00044 }
00045
00046 template<typename Item> inline
00047 Octree<Item>::~Octree() {
00048 delete m_root;
00049 }
00050
00051 template<typename Item> inline
00052 void Octree<Item>::Insert(const Item &item, const AABB3 &aabb) {
00053 assert(m_root);
00054 m_root->m_items.push_back(item);
00055 m_root->m_voxel.Include(aabb);
00056 }
00057
00058 template<typename Item> inline
00059 const AABB3 &Octree<Item>::GetAABB() const {
00060 assert(m_root);
00061 return m_root->m_voxel;
00062 }