209 int delta_x = vol.
Max[0] - vol.
Min[0];
213 for (k=vol.
Min[2]; k<vol.
Max[2]; k++) {
214 for (j=vol.
Min[1]; j<vol.
Max[1]; j++) {
215 for (i=vol.
Min[0]; i<vol.
Max[0]; i++) {
256 int delta_x = vol.
Max[0] - vol.
Min[0];
260 for (k=vol.
Min[2]; k<vol.
Max[2]; k++) {
261 for (j=vol.
Min[1]; j<vol.
Max[1]; j++) {
262 for (i=vol.
Min[0]; i<vol.
Max[0]; i++) {
303 int delta_x = vol.
Max[0] - vol.
Min[0];
307 for (k=vol.
Min[2]; k<vol.
Max[2]; k++) {
308 for (j=vol.
Min[1]; j<vol.
Max[1]; j++) {
309 for (i=vol.
Min[0]; i<vol.
Max[0]; i++) {
350 int delta_x = vol.
Max[0] - vol.
Min[0];
354 for (k=vol.
Min[2]; k<vol.
Max[2]; k++) {
355 for (j=vol.
Min[1]; j<vol.
Max[1]; j++) {
356 for (i=vol.
Min[0]; i<vol.
Max[0]; i++) {
407 if (
max.X -
min.X < 1.0f) {
411 if (
max.Y -
min.Y < 1.0f) {
415 if (
max.Z -
min.Z < 1.0f) {
598 cload.
Read(&version,
sizeof(version));
605 memset(¶ms,0,
sizeof(params));
608 cload.
Read(¶ms,
sizeof(params));
629 Origin.X = params.Origin.X;
630 Origin.Y = params.Origin.Y;
631 Origin.Z = params.Origin.Z;
677 csave.
Write(&version,
sizeof(version));
684 memset(¶ms,0,
sizeof(params));
695 params.Origin.X =
Origin.X;
696 params.Origin.Y =
Origin.Y;
697 params.Origin.Z =
Origin.Z;
700 csave.
Write(¶ms,
sizeof(params));
721 Stats.NodesAccepted = 0;
722 Stats.NodesTriviallyAccepted = 0;
723 Stats.NodesRejected = 0;
902 next_link->
Prev = obj;
933 while (tmp && !found) {
934 if (tmp == obj) found =
true;
WWINLINE bool Contains(const Vector3 &point) const
uint32 Read(void *buf, uint32 nbytes)
uint32 Write(const void *buf, uint32 nbytes)
bool Begin_Chunk(uint32 id)
static OverlapType Overlap_Test(const AAPlaneClass &plane, const Vector3 &point)
WWINLINE CullLinkClass(CullSystemClass *system)
WWINLINE void Set_Culling_System(CullSystemClass *sys)
CullableClass * Get_Next_Collected_Object_Internal(CullableClass *obj)
void Reset_Collection(void)
CullableClass * Get_First_Collected_Object_Internal(void)
friend class CullableClass
void Add_To_Collection(CullableClass *obj)
WWINLINE CullLinkClass * Get_Cull_Link(void) const
WWINLINE const AABoxClass & Get_Cull_Box(void) const
WWINLINE void Set_Cull_Link(CullLinkClass *c)
CullSystemClass * Get_Culling_System(void) const
void unlink_object_from_list(CullableClass **head, CullableClass *obj)
void Reset_Statistics(void)
void link_object_to_list(CullableClass **head, CullableClass *obj)
void link_object(CullableClass *obj)
bool map_point_to_address(const Vector3 &pt, int &set_address)
void Add_Object_Internal(CullableClass *obj)
CullableClass * NoGridList
void Collect_And_Unlink_All(void)
void collect_objects_in_leaf(const Vector3 &point, CullableClass *head)
virtual void Save(ChunkSaveClass &csave)
void Remove_Object_Internal(CullableClass *obj)
const StatsStruct & Get_Statistics(void)
int total_cell_count(void)
void init_volume(const Vector3 &bound_min, const Vector3 &bound_max, VolumeStruct *set_volume)
void unlink_object(CullableClass *obj)
virtual void Load(ChunkLoadClass &cload)
virtual void Collect_Objects(const Vector3 &point)
WWINLINE int map_indices_to_address(int i, int j, int k)
virtual void Re_Partition(const Vector3 &min, const Vector3 &max, float objdim)
~GridCullSystemClass(void)
virtual void Update_Culling(CullableClass *obj)
GridCullSystemClass(void)
virtual ~GridLinkClass(void)
GridLinkClass(GridCullSystemClass *system)
CullableClass * Peek_Obj(void)
WWINLINE void Release_Ref(void) const
const uint32 GRID_CURRENT_VERSION
#define GRIDCULL_NODE_TRIVIALLY_ACCEPTED
#define DEFINE_AUTO_POOL(T, BLOCKSIZE)
bool Is_Empty(void) const
IOVector3Struct MinCellSize