in reply to Re^2: octtree using hashes
in thread octtree using hashes

Why do you "concatenate" objects?

I would assume that you keep a list of nodes, which is not done with the string concatenation operator ".", but by using push on an array(ref).

Also, the idea behind an octree is to have a hierarchical organisation (a tree), so that you don't have to check all octants but ideally only the top-level octant and not even all octants that actually contain the object(s) you want to check for collision.

Replies are listed 'Best First'.
Re^4: octtree using hashes
by holyghost (Beadle) on Nov 09, 2017 at 12:01 UTC
    Indeed, I needed the push operator to push a world object onto the key $level of the hash of levels. My system is not a general octtree but using octants which have world objects contained on their crossings. My level 0 in the hash of $self->{rootnodes} is the topmost octant. if there are any world objects in it such as a non-player character it has to switch octants for which walking around just diminishes the $self->{rootnodes}{$level} then should put it in a larger octant and so on. Now when you are walking around a low level (so bigger octants) you can turn off collision detection by measuring the corners contained in the rootnodes hash. This calculation can be done in a thread e.g. on a sorted list of world objects walking around in octants. The fact is if you are on a level within the rootnodes hash it might be that there are no objects within that octant as the values array of the $level key is empty, and so the thread can work further on. My octant subdivisor now goes to pixel level, it stops at e.g. $middlex <= 1, you can also stop at the intersection multiplicity where you cross a world object contained in 9 upper level cubes.