|
ViewDesignEngine
3.1.0
高性能 CAD 计算几何引擎
|
包围盒层次结构 — 三角形网格加速结构 更多...
#include <bvh.h>


类 | |
| struct | HitResult |
| 射线最近命中查询结果 更多... | |
Public 成员函数 | |
| BVH (const BVHBuildOptions &opts={}) | |
| 构造 BVH 并指定构建选项 更多... | |
| void | build (const std::vector< Triangle3D > &tris) override |
| 清除已有数据并重建 BVH 更多... | |
| void | insert (const Triangle3D &tri) override |
| 插入单个三角形 更多... | |
| bool | remove (const Triangle3D &tri) override |
| 删除三角形 更多... | |
| std::vector< Triangle3D > | query_range (const AABB3D &range) const override |
| AABB 范围查询 更多... | |
| std::vector< Triangle3D > | query_knn (const Point3D &point, size_t k) const override |
| K 近邻查询 更多... | |
| std::vector< Triangle3D > | query_ray (const Ray3Dd &ray) const override |
| 射线查询:返回所有命中的三角形 更多... | |
| void | clear () override |
| 清空 BVH 树和所有三角形 更多... | |
| size_t | size () const override |
| 三角形数量 更多... | |
| std::optional< HitResult > | query_ray_nearest (const Ray3Dd &ray) const |
| 射线最近命中查询 更多... | |
Public 成员函数 继承自 vde::spatial::SpatialIndex< Triangle3D > | |
| virtual | ~SpatialIndex ()=default |
包围盒层次结构 — 三角形网格加速结构
BVH 将三角形集合递归划分为嵌套的包围盒树。 每个内部节点存储其子节点包围盒的并集, 叶节点包含不超过 leaf_size 个三角形的引用。
构建时间复杂度 O(n log n),空间 O(n)。 单条射线查询 O(log n),最近命中 O(log n)。
三种分裂策略:
|
inlineexplicit |
|
overridevirtual |
|
overridevirtual |
清空 BVH 树和所有三角形
|
overridevirtual |
插入单个三角形
当前实现:加入图元列表后全量重建。 如需增量插入,建议使用 RTree。
| tri | 要插入的三角形 |
|
overridevirtual |
K 近邻查询
使用最小堆遍历 BVH,按包围盒距离剪枝。
| point | 查询点 |
| k | 返回数量 |
|
overridevirtual |
AABB 范围查询
遍历与 range 相交的 BVH 节点,收集叶节点中重叠的三角形。 复杂度 O(log n + k),k 为结果数量。
| range | 查询包围盒 |
|
overridevirtual |
射线查询:返回所有命中的三角形
深度优先遍历,收集所有与射线相交的叶节点三角形。 复杂度 O(log n + k)。
| ray | 查询射线 |
| std::optional<HitResult> vde::spatial::BVH::query_ray_nearest | ( | const Ray3Dd & | ray | ) | const |
射线最近命中查询
遍历 BVH,维护当前最近 t 值进行剪枝, 返回射线方向上第一个命中的三角形。 典型复杂度 O(log n)。
| ray | 查询射线 |
|
overridevirtual |
|
inlineoverridevirtual |