| Crates.io | bsp-tree |
| lib.rs | bsp-tree |
| version | 0.2.1 |
| created_at | 2025-12-27 18:03:22.555137+00 |
| updated_at | 2025-12-27 18:15:05.274669+00 |
| description | Binary Space Partitioning (BSP) tree useful for 3D rendering. Works with flat polygons (triangles, quads, etc.). |
| homepage | |
| repository | https://github.com/nielsgroen/bsp-tree |
| max_upload_size | |
| id | 2007575 |
| size | 111,256 |
A Binary Space Partitioning (BSP) tree implementation in Rust for 3D polygon management. The BSP tree works with flat polygons (triangles, quads, etc.).
BSP trees recursively subdivide space using planes, enabling efficient spatial queries and correct back-to-front rendering of overlapping geometry without a depth buffer.
Polygon, Triangle, RectangleCuttable trait for splitting geometry by planesBspVisitoruse bsp_tree::{BspTree, Polygon};
use nalgebra::Point3;
// Create polygons
let poly = Polygon::new(vec![
Point3::new(0.0, 0.0, 0.0),
Point3::new(1.0, 0.0, 0.0),
Point3::new(0.0, 1.0, 0.0),
]);
// Build the tree
let tree = BspTree::from_polygons(vec![poly]);
assert_eq!(tree.polygon_count(), 1);
use bsp_tree::{BspTree, BspVisitor, Polygon};
use nalgebra::Point3;
struct RenderVisitor;
impl BspVisitor for RenderVisitor {
fn visit(&mut self, polygon: &Polygon) {
// Render the polygon
}
}
let tree = BspTree::from_polygons(polygons);
let eye = Point3::new(0.0, 0.0, 10.0);
// Back-to-front for correct transparency rendering
tree.traverse_back_to_front(eye, &mut RenderVisitor);
See the GitHub repository for full documentation, screenshots, and visualization examples.
Apache-2.0 - See LICENSE for details.