Linear Octree

A sparse, linear octree data structure. For a pointer-based implementation see sparse-octree.
Demo · Documentation
Installation
This library requires the peer dependency three.
npm install three linear-octree
Usage
import { KeyDesign, Octree } from "linear-octree";
import { Box3, Vector3 } from "three";
const keyDesign = new KeyDesign(4, 4, 4);
const bounds = new Box3();
bounds.min.set(-1, -1, -1);
bounds.max.set(1, 1, 1);
const cellSize = new Vector3(1, 1, 1);
const bounds = keyDesign.calculateBounds(cellSize, new Box3());
const octree = new Octree<string>(bounds, keyDesign);
const keyCoordinates = new Vector3();
const worldPosition = new Vector3(0.5, 0.5, 0.5);
octree.calculateKeyCoordinates(worldPosition, keyCoordinates);
const level = 0;
octree.set(keyCoordinates, level, "my data");
octree.get(keyCoordinates, level);
octree.delete(keyCoordinates, level);
octree.get(keyCoordinates, level);
Key Design
const keyDesign = new KeyDesign(17, 17, 17);
const keyDesign = new KeyDesign(21, 11, 21);
const keyDesign = new KeyDesign(26, 0, 26);
Features
- Linear structure
- Packs positional data into numeric keys
- Constant time access to octants, parents and neighbors at any depth level
- Low memory usage (no explicit positional data stored in octants)
- Adheres to a common octant layout
- Supports raycasting
- Supports culling
- Can be extended to manage any data
- Fully customizable 3-dimensional subdivisions
Contributing
Maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.