Skip to main content

Bvh

Struct Bvh 

Source
pub struct Bvh { /* private fields */ }
Expand description

A flat-array AABB tree for spatial queries.

Implementations§

Source§

impl Bvh

Source

pub fn build(aabbs: &[(usize, Aabb3)]) -> Self

Build a BVH from a set of (primitive_id, aabb) pairs.

Uses SAH-based construction for good query performance. If aabbs is empty, returns an empty BVH.

Source

pub fn query_overlap(&self, test: &Aabb3) -> Vec<usize>

Query all primitives whose AABB overlaps test.

Source

pub fn query_overlap_into(&self, test: &Aabb3, results: &mut Vec<usize>)

Query primitives overlapping test, reusing caller-provided buffers.

results is cleared before use. This avoids per-call allocation when called in a tight loop (e.g. compound boolean inner loops).

Source

pub fn query_ray(&self, origin: Point3, dir: Vec3) -> Vec<usize>

Query all primitives whose AABB is intersected by a ray.

origin is the ray start, dir is the ray direction (need not be normalised). Only positive-t hits are returned.

Source

pub fn query_ray_into( &self, origin: Point3, dir: Vec3, results: &mut Vec<usize>, )

Query ray-intersecting primitives, reusing caller-provided buffers.

results is cleared before use. This avoids per-call allocation when called in a tight loop.

Source

pub fn query_closest(&self, point: Point3) -> Option<usize>

Find the primitive whose AABB is closest to point.

Note: This returns the primitive with the closest AABB, which is a lower bound on the actual distance. For exact closest-primitive queries, use Bvh::query_closest_with_distance with a callback that computes the true distance to each primitive.

Returns None if the BVH is empty.

Source

pub fn query_closest_with_distance( &self, point: Point3, distance_sq: &dyn Fn(usize) -> f64, ) -> Option<usize>

Find the closest primitive to point using an exact distance callback.

Unlike Bvh::query_closest, this uses the provided distance_sq callback to compute the actual squared distance from point to each candidate primitive, ensuring the true closest primitive is returned. The BVH AABB distances are used only for pruning, so distant subtrees are skipped efficiently.

Returns None if the BVH is empty.

Trait Implementations§

Source§

impl Clone for Bvh

Source§

fn clone(&self) -> Bvh

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Bvh

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Bvh

§

impl RefUnwindSafe for Bvh

§

impl Send for Bvh

§

impl Sync for Bvh

§

impl Unpin for Bvh

§

impl UnsafeUnpin for Bvh

§

impl UnwindSafe for Bvh

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.