-
Notifications
You must be signed in to change notification settings - Fork 3
voctopus.util
This module contains an assortment of export functions used internally in Voctopus, as well as some export functions for analyzing octree properties for experimental purposes (they help find "sweet spots" for initial octree memory allocations)
#Functions
Provide a 24 bit int implementation for DataViews. Note this causes two reads/writes per call, meaning it's going to be around half as fast as the native implementations.
Setter for Uint24.
Sum of powers of 8 up to n. Used in various calculations.
Parameters
name | type | description |
---|---|---|
n | int |
highest power of 8, up to 24 (after which precision errors become a problem) |
Returns: Float64
Find the cardinal identity (0-7) of an octant. Octets contain 8 octants, so in x,y,z order they live at identities 0-7.
Parameters
name | type | description |
---|---|---|
vector | vector |
representing the absolute coordinate of a voxel at max depth |
dc | int |
current depth (zero-indexed) |
dm | int |
maximum depth |
Returns: int
identity
Figures out the maximum size of a voctopus octree, assuming it's 100% dense (e.g. filled with random noise).
Parameters
name | type | description |
---|---|---|
octantSize | int |
size of a single octant in the tree |
depth | int |
octree depth |
Returns: int
Discover the maximum addressable depth for an octree schema at 100% density. Note that this is not very useful on its own because ArrayBuffers have a hard limit of 2gb, and this can produce buffers sized in EXABYTES if used naively!
Parameters
name | type | description |
---|---|---|
octantSize | int |
(in bytes) |
Returns: int
depth
Find the maximum density factor of an octree given an octantSize, depth, and memory limit. Voctopus figures out how much memory to allocate based on its octant size, depth and density factor.
Parameters
name | type | description |
---|---|---|
octantSize | int |
size of a single octant in bytes |
depth | int |
octree depth |
limit | int |
memory limit in bytes |
Find the nearest power of two greater than a number.
Parameters
name | type | description |
---|---|---|
n | int |
number to test against |
Returns: int
Used to loop through every voxel in an octree and run callbacks. Used for Voctopus testing. Three nested loops of X, Y, and Z axis, supporting a callback for each iteration of each loop as supplied in the cbs parameter.
Parameters
name | type | description |
---|---|---|
size | int |
size of a volume |
cbs | Object |
callback object {x:f(vector),y:f(vector),z:f(vector)} |
Returns: undefined
Find the coordinate space (size of a single octree axis) for a given depth.
Parameters
name | type | description |
---|---|---|
depth | int |
octree depth |
Check the ray - box intersection of a voxel (which is an axis-aligned bounding box)
Parameters
name | type | description |
---|---|---|
bs | vector |
box start (top, left, back) |
be | vector |
box end (bottom, right, front) |
ro | vector |
ray origin |
rd | vector |
inverse of ray direction (inverse should be precalculated) |
Returns: bool true if there was a hit, otherwise false