#碰撞检测 #边界体积 #BVH #体积 #AA-BB #边界 #SAH

不依赖 std bvh-arena

游戏中的粗略碰撞检测的边界体积层次结构

7 个版本 (稳定版)

1.1.3 2023年1月9日
1.1.2 2023年1月8日
1.1.1 2022年5月19日
1.0.0 2022年1月24日

#325 in 游戏开发

Download history 110/week @ 2024-03-11 122/week @ 2024-03-18 30/week @ 2024-03-25 35/week @ 2024-04-01 22/week @ 2024-04-08 73/week @ 2024-04-15 87/week @ 2024-04-22 87/week @ 2024-04-29 17/week @ 2024-05-06 18/week @ 2024-05-13 25/week @ 2024-05-20 30/week @ 2024-05-27 14/week @ 2024-06-03 24/week @ 2024-06-10 15/week @ 2024-06-17 23/week @ 2024-06-24

每月下载量 77
4 个工具箱中使用 (3 个直接使用)

无版权声明

22KB
377

bvh-arena

License Crates.io rustc Docs

Rust 中用于游戏中的粗略碰撞检测的边界体积层次结构

特性

  • 快速插入和删除
  • 快速遍历重叠对
  • 当体积被删除时高效地重用内存(由生成式存储支持)

非目标

此库不试图在以下方面实现最佳性能:

  • 光线追踪(尽管,基本的射线投射最终可能会得到支持)
  • 静态场景

使用示例

use bvh_arena::{Bvh, volumes::Aabb};
use glam::Vec2; // <-- You may use any math library, or even none.

// Create a bounding volume hierarchy
let mut bvh: Bvh<u8, Aabb<2>> = Bvh::default();

// Insert a bounding volume
let id = bvh.insert(1, Aabb::from_min_max(Vec2::ZERO, Vec2::new(1.0, 1.0)));

// Remove a bounding volume
bvh.remove(id);

// Iteration over overlaping pairs
bvh.for_each_overlaping_pair(|a, b| println!("{a} overlaps {b}"));

no_std 支持

此工具箱与 no_std 兼容,但需要 全局分配器

安装

添加到 Cargo.toml

bvh-arena = "1"

MSRV

当前最低支持的 Rust 版本为: 1.56

它可能会在次版本号发布时提升到较新的稳定版本。(但仅在需要时)

它将在主版本号发布时提升到最新稳定版本。(即使不需要)

动机

在构建自己的碰撞检测逻辑的背景下,我想在粗略阶段使用边界体积层次结构(BVH)。

但看起来大多数现有的 BVH 实现都偏向于光线追踪用例。这意味着,它们提供与我所寻找的不同的 API、算法和权衡。

无版权声明

这是一款免费且不受限制的软件,已发布到公共领域。

任何人都可以免费复制、修改、发布、使用、编译、销售或以任何方式分发此软件,无论是源代码形式还是编译后的二进制形式,用于任何目的,无论是商业目的还是非商业目的。

在承认版权法的司法管辖区,本软件的作者将软件的所有版权利益捐赠给公共领域。我们这样做是为了公众的利益,牺牲我们的继承人后继人的利益。我们意图此捐赠是永久放弃根据版权法对软件现有和未来所有权利的明确行为。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者都不应对任何索赔、损害或其他责任负责,无论是基于合同行为、侵权行为或其他行为,无论该索赔、损害或其他责任是否源于、产生于或与本软件的使用或其他相关事宜有关。

更多信息,请参阅http://unlicense.org/

依赖项

~280KB