pub struct SpatialHashGrid3D { /* private fields */ }Expand description
A uniform-grid spatial hash for broad-phase collision culling in 3D.
Bodies are inserted by their world-space axis-aligned bounding box. A query returns all candidate indices whose AABBs overlap the query region, dramatically reducing narrow-phase collision checks from O(n²) to near O(n).
Implementations§
Source§impl SpatialHashGrid3D
Implements construction, insertion, and querying for SpatialHashGrid3D.
impl SpatialHashGrid3D
Implements construction, insertion, and querying for SpatialHashGrid3D.
Sourcepub fn create(cell_size: f64) -> SpatialHashGrid3D
pub fn create(cell_size: f64) -> SpatialHashGrid3D
Creates a new 3D spatial hash grid with the given cell size.
A cell size that is not finite and strictly positive is rejected in
favour of [SPATIAL_DEFAULT_CELL_SIZE_3D], for the same reason as
SpatialHashGrid2D::create: a near-zero cell size makes the column
range of an ordinary body span millions of cells.
§Arguments
f64- The world-space size of each grid cell.
§Returns
SpatialHashGrid3D- The new grid.
Sourcepub fn with_default_size() -> SpatialHashGrid3D
pub fn with_default_size() -> SpatialHashGrid3D
Creates a new 3D spatial hash grid with the default cell size.
§Returns
SpatialHashGrid3D- The new grid.
Sourcepub fn insert(&mut self, index: usize, min: Vector3D, max: Vector3D)
pub fn insert(&mut self, index: usize, min: Vector3D, max: Vector3D)
Inserts a body index into all cells overlapping the given 3D bounding box.
§Arguments
usize- The body index to insert.Vector3D- The minimum corner of the bounding box.Vector3D- The maximum corner of the bounding box.
Sourcepub fn query(&self, min: Vector3D, max: Vector3D) -> Vec<usize>
pub fn query(&self, min: Vector3D, max: Vector3D) -> Vec<usize>
Returns all candidate body indices whose cells overlap the given 3D bounding box.
Deduplicates indices so each candidate appears at most once.
§Arguments
Vector3D- The minimum corner of the query box.Vector3D- The maximum corner of the query box.
§Returns
Vec<usize>- The list of candidate body indices.
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Removes all entries from the grid, preparing it for a fresh insertion pass.
Cells that held bodies during the just-finished pass keep their key and
their underlying Vec buffer, so a body that stays put pays no
allocation on the next tick. Cells that ended the pass empty are dropped
outright: without that, a scene whose bodies roam across a large world
accumulates one permanent map entry per cell ever visited, and both the
map and the per-tick clear below it grow without bound for the lifetime
of the process. Dropping on empty bounds the map to the cells the
current pass actually populates, at the cost of one small Vec
allocation for a cell a body leaves and then re-enters.
Sourcepub fn query_into(
&self,
min: Vector3D,
max: Vector3D,
out: &mut Vec<usize>,
seen: &mut HashSet<usize>,
)
pub fn query_into( &self, min: Vector3D, max: Vector3D, out: &mut Vec<usize>, seen: &mut HashSet<usize>, )
Appends all candidate body indices overlapping the query box into out,
deduplicating via the caller-provided seen set.
Both out and seen are cleared first, so the caller can reuse the same
buffers across all queries in a step without any per-query allocation.
§Arguments
Vector3D- The minimum corner of the query box.Vector3D- The maximum corner of the query box.&mut Vec<usize>- The output buffer, cleared then filled with candidates.&mut HashSet<usize>- The dedup scratch set, cleared then reused.
Source§impl SpatialHashGrid3D
impl SpatialHashGrid3D
pub fn get_cell_size(&self) -> f64
pub fn get_inverse_cell_size(&self) -> f64
pub fn get_cells(&self) -> &SpatialCellMap3D
pub fn set_cells(&mut self, val: SpatialCellMap3D) -> &mut Self
Trait Implementations§
Source§impl Clone for SpatialHashGrid3D
impl Clone for SpatialHashGrid3D
Source§impl Debug for SpatialHashGrid3D
impl Debug for SpatialHashGrid3D
Source§impl Default for SpatialHashGrid3D
Implements Default for SpatialHashGrid3D with the default cell size.
impl Default for SpatialHashGrid3D
Implements Default for SpatialHashGrid3D with the default cell size.
Source§fn default() -> SpatialHashGrid3D
fn default() -> SpatialHashGrid3D
Constructs a default SpatialHashGrid3D value.
§Returns
SpatialHashGrid3D- A default-constructed instance with the documented initial state.