@ -30,10 +30,10 @@
|
||||
#ifndef OCTREE_H
|
||||
#define OCTREE_H
|
||||
|
||||
#include "aabb.h"
|
||||
#include "list.h"
|
||||
#include "map.h"
|
||||
#include "print_string.h"
|
||||
#include "rect3.h"
|
||||
#include "variant.h"
|
||||
#include "vector3.h"
|
||||
|
||||
@ -106,7 +106,7 @@ private:
|
||||
struct Octant {
|
||||
|
||||
// cached for FAST plane check
|
||||
Rect3 aabb;
|
||||
AABB aabb;
|
||||
|
||||
uint64_t last_pass;
|
||||
Octant *parent;
|
||||
@ -152,8 +152,8 @@ private:
|
||||
OctreeElementID _id;
|
||||
Octant *common_parent;
|
||||
|
||||
Rect3 aabb;
|
||||
Rect3 container_aabb;
|
||||
AABB aabb;
|
||||
AABB container_aabb;
|
||||
|
||||
List<PairData *, AL> pair_list;
|
||||
|
||||
@ -334,7 +334,7 @@ private:
|
||||
}
|
||||
|
||||
void _insert_element(Element *p_element, Octant *p_octant);
|
||||
void _ensure_valid_root(const Rect3 &p_aabb);
|
||||
void _ensure_valid_root(const AABB &p_aabb);
|
||||
bool _remove_element_from_octant(Element *p_element, Octant *p_octant, Octant *p_limit = NULL);
|
||||
void _remove_element(Element *p_element);
|
||||
void _pair_element(Element *p_element, Octant *p_octant);
|
||||
@ -351,7 +351,7 @@ private:
|
||||
};
|
||||
|
||||
void _cull_convex(Octant *p_octant, _CullConvexData *p_cull);
|
||||
void _cull_aabb(Octant *p_octant, const Rect3 &p_aabb, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask);
|
||||
void _cull_aabb(Octant *p_octant, const AABB &p_aabb, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask);
|
||||
void _cull_segment(Octant *p_octant, const Vector3 &p_from, const Vector3 &p_to, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask);
|
||||
void _cull_point(Octant *p_octant, const Vector3 &p_point, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask);
|
||||
|
||||
@ -370,8 +370,8 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
OctreeElementID create(T *p_userdata, const Rect3 &p_aabb = Rect3(), int p_subindex = 0, bool p_pairable = false, uint32_t p_pairable_type = 0, uint32_t pairable_mask = 1);
|
||||
void move(OctreeElementID p_id, const Rect3 &p_aabb);
|
||||
OctreeElementID create(T *p_userdata, const AABB &p_aabb = AABB(), int p_subindex = 0, bool p_pairable = false, uint32_t p_pairable_type = 0, uint32_t pairable_mask = 1);
|
||||
void move(OctreeElementID p_id, const AABB &p_aabb);
|
||||
void set_pairable(OctreeElementID p_id, bool p_pairable = false, uint32_t p_pairable_type = 0, uint32_t pairable_mask = 1);
|
||||
void erase(OctreeElementID p_id);
|
||||
|
||||
@ -380,7 +380,7 @@ public:
|
||||
int get_subindex(OctreeElementID p_id) const;
|
||||
|
||||
int cull_convex(const Vector<Plane> &p_convex, T **p_result_array, int p_result_max, uint32_t p_mask = 0xFFFFFFFF);
|
||||
int cull_aabb(const Rect3 &p_aabb, T **p_result_array, int p_result_max, int *p_subindex_array = NULL, uint32_t p_mask = 0xFFFFFFFF);
|
||||
int cull_aabb(const AABB &p_aabb, T **p_result_array, int p_result_max, int *p_subindex_array = NULL, uint32_t p_mask = 0xFFFFFFFF);
|
||||
int cull_segment(const Vector3 &p_from, const Vector3 &p_to, T **p_result_array, int p_result_max, int *p_subindex_array = NULL, uint32_t p_mask = 0xFFFFFFFF);
|
||||
|
||||
int cull_point(const Vector3 &p_point, T **p_result_array, int p_result_max, int *p_subindex_array = NULL, uint32_t p_mask = 0xFFFFFFFF);
|
||||
@ -479,7 +479,7 @@ void Octree<T, use_pairs, AL>::_insert_element(Element *p_element, Octant *p_oct
|
||||
} else {
|
||||
/* check againt AABB where child should be */
|
||||
|
||||
Rect3 aabb = p_octant->aabb;
|
||||
AABB aabb = p_octant->aabb;
|
||||
aabb.size *= 0.5;
|
||||
|
||||
if (i & 1)
|
||||
@ -535,12 +535,12 @@ void Octree<T, use_pairs, AL>::_insert_element(Element *p_element, Octant *p_oct
|
||||
}
|
||||
|
||||
template <class T, bool use_pairs, class AL>
|
||||
void Octree<T, use_pairs, AL>::_ensure_valid_root(const Rect3 &p_aabb) {
|
||||
void Octree<T, use_pairs, AL>::_ensure_valid_root(const AABB &p_aabb) {
|
||||
|
||||
if (!root) {
|
||||
// octre is empty
|
||||
|
||||
Rect3 base(Vector3(), Vector3(1.0, 1.0, 1.0) * unit_size);
|
||||
AABB base(Vector3(), Vector3(1.0, 1.0, 1.0) * unit_size);
|
||||
|
||||
while (!base.encloses(p_aabb)) {
|
||||
|
||||
@ -563,7 +563,7 @@ void Octree<T, use_pairs, AL>::_ensure_valid_root(const Rect3 &p_aabb) {
|
||||
|
||||
} else {
|
||||
|
||||
Rect3 base = root->aabb;
|
||||
AABB base = root->aabb;
|
||||
|
||||
while (!base.encloses(p_aabb)) {
|
||||
|
||||
@ -793,7 +793,7 @@ void Octree<T, use_pairs, AL>::_remove_element(Element *p_element) {
|
||||
}
|
||||
|
||||
template <class T, bool use_pairs, class AL>
|
||||
OctreeElementID Octree<T, use_pairs, AL>::create(T *p_userdata, const Rect3 &p_aabb, int p_subindex, bool p_pairable, uint32_t p_pairable_type, uint32_t p_pairable_mask) {
|
||||
OctreeElementID Octree<T, use_pairs, AL>::create(T *p_userdata, const AABB &p_aabb, int p_subindex, bool p_pairable, uint32_t p_pairable_type, uint32_t p_pairable_mask) {
|
||||
|
||||
// check for AABB validity
|
||||
#ifdef DEBUG_ENABLED
|
||||
@ -833,7 +833,7 @@ OctreeElementID Octree<T, use_pairs, AL>::create(T *p_userdata, const Rect3 &p_a
|
||||
}
|
||||
|
||||
template <class T, bool use_pairs, class AL>
|
||||
void Octree<T, use_pairs, AL>::move(OctreeElementID p_id, const Rect3 &p_aabb) {
|
||||
void Octree<T, use_pairs, AL>::move(OctreeElementID p_id, const AABB &p_aabb) {
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
// check for AABB validity
|
||||
@ -859,7 +859,7 @@ void Octree<T, use_pairs, AL>::move(OctreeElementID p_id, const Rect3 &p_aabb) {
|
||||
if (old_has_surf) {
|
||||
_remove_element(&e); // removing
|
||||
e.common_parent = NULL;
|
||||
e.aabb = Rect3();
|
||||
e.aabb = AABB();
|
||||
_optimize();
|
||||
} else {
|
||||
_ensure_valid_root(p_aabb); // inserting
|
||||
@ -886,7 +886,7 @@ void Octree<T, use_pairs, AL>::move(OctreeElementID p_id, const Rect3 &p_aabb) {
|
||||
return;
|
||||
}
|
||||
|
||||
Rect3 combined = e.aabb;
|
||||
AABB combined = e.aabb;
|
||||
combined.merge_with(p_aabb);
|
||||
_ensure_valid_root(combined);
|
||||
|
||||
@ -1072,7 +1072,7 @@ void Octree<T, use_pairs, AL>::_cull_convex(Octant *p_octant, _CullConvexData *p
|
||||
}
|
||||
|
||||
template <class T, bool use_pairs, class AL>
|
||||
void Octree<T, use_pairs, AL>::_cull_aabb(Octant *p_octant, const Rect3 &p_aabb, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask) {
|
||||
void Octree<T, use_pairs, AL>::_cull_aabb(Octant *p_octant, const AABB &p_aabb, T **p_result_array, int *p_result_idx, int p_result_max, int *p_subindex_array, uint32_t p_mask) {
|
||||
|
||||
if (*p_result_idx == p_result_max)
|
||||
return; //pointless
|
||||
@ -1313,7 +1313,7 @@ int Octree<T, use_pairs, AL>::cull_convex(const Vector<Plane> &p_convex, T **p_r
|
||||
}
|
||||
|
||||
template <class T, bool use_pairs, class AL>
|
||||
int Octree<T, use_pairs, AL>::cull_aabb(const Rect3 &p_aabb, T **p_result_array, int p_result_max, int *p_subindex_array, uint32_t p_mask) {
|
||||
int Octree<T, use_pairs, AL>::cull_aabb(const AABB &p_aabb, T **p_result_array, int p_result_max, int *p_subindex_array, uint32_t p_mask) {
|
||||
|
||||
if (!root)
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user