问题标签 [aabb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
492 浏览

cgal - CGAL terrain triangulation & extracting iso-contours

I chose to use CGAL to attain a 3-D Delaunay triangulation of a terrain file (.xyz). The triangulation is complete but now I need a method to extract contours at desired z-height values. The method I am considering is to get an AABB tree from the facets of the triangulation, and then take an intersection of a plane (at desired z-height value) against the tree.

The issues:

  1. I do not know how to take the triangulation facets and get an AABB tree from them. I've read the documentation and other forums, but the process is still not clear.

  2. When the intersection of the plane and tree returns, I suspect the intersection yields a set of segments, I do need these segments to be ordered form a closed set. Can the ordering be enforced or determined?

  3. How to detect that there are multiple closed sets, for example, if the plane intersection cuts two separate/individual mountain tops, I need two individual contours around the mountain peaks. Can this be identified via the returned intersection segments?

0 投票
1 回答
1373 浏览

c++ - Ray-AABB 交叉口

所以,我需要做 Ray-AABB 交叉这是我的代码,取自一本书

但是,它对我不起作用。上面的交集在应该返回真时返回假(因为 tminY > tmin 但小于 tmax)(在没有 AABB 边界的情况下测试)

观察:

任何帮助将不胜感激

0 投票
0 回答
811 浏览

distance - 如何计算两个 AABB(矢量形式)之间的最近距离?

如何计算两个 AABB(矢量形式)之间的最近距离?我在这里找到了解决方案。是否可以提取此向量形式?我知道AABB的向量形式——点距离。

候选人:

0 投票
1 回答
71 浏览

algorithm - 我有错误的算法来测试重叠的矩形(?)

给出一个 rects1 = {x, y, w, h}和另一个 rectss2 = {x, y, w, h}和一个 vector v = {x, y}。并假设s1已根据 移动v,我想检查它是否重叠。

我有这个算法:

但它似乎不能正常工作,但我什至不能说它有什么问题,因为我根本不明白。而且由于它的性质,我什至无法将其分解成更小的部分。

这意味着只要 s1 在一个边缘上与 s2 重叠,它们就不会重叠......什么?

奇怪的是,在我的程序中,只有当 s1 试图在 s2 下移动时,它才不起作用。其他一切都有效。

所以我的问题是:测试两个移动框是否相互重叠(AABB)的正确算法是什么,我在这里有什么样的算法?我知道我从某个地方得到它,但我再也找不到我的来源了。我刚刚添加了额外的运动矢量。

0 投票
1 回答
658 浏览

c++ - 如何找到射线相交的三角形的法线向量(或手柄)?

我有一条射线和多个 3D 点,我对其进行三角剖分并输入 AABBtree,这使我能够找到射线与网格的交点。现在我还想知道射线相交的三角形的法线向量。

我将点投影到 xy 平面并应用 Delaunay 网格划分。然后我将 3D 点输入到 AABBtree 结构中。理想情况下,我不想更改这部分。

使用 first_intersection() 查找交集很简单。
如何找到相交三角形的法线?

编辑:问题是,boost::get<KernelSCD::Point_3>(&(intersection->first))这只给了我实际的交点。为了找到相交三角形的法线向量,我需要相交三角形的句柄。我怎么得到这个?

这是我的代码:

0 投票
0 回答
143 浏览

matlab - AABB 与空间分区的交叉点,示例代码的性能和可靠性

我最初编写了以下 Matlab 代码来查找一组轴对齐边界框 (AABB) 和空间分区(这里是 8 个分区)之间的交集。我相信它本身是可读的,此外,为了更加清晰,我添加了一些评论。

关注点:

  • 在我的测试中,似乎很少有交叉点丢失,比如 10 个或更多设置的 10 个左右。因此,如果您能帮助找出代码中的任何有问题的部分,我会很高兴。

  • 我也担心使用global F. 我更喜欢摆脱它。

  • 任何其他在速度方面更好的解决方案都会受到喜爱。

注意代码是完整的。您可以通过以下设置轻松尝试。

0 投票
2 回答
1651 浏览

collision-detection - 计算轴对齐边界框的大小

我目前正在关注 ThinMatrix 的使用 LWJGL 和 OpenGL 的 3d 游戏开发教程。我正在尝试在我的游戏中实现碰撞检测。我已经准备好检测 AABB 与 AABB 碰撞的代码,但似乎无法弄清楚如何获取实体周围边界框的大小。有人可以指导我计算 AABB 的大小吗?这是 OBJFileLoader 类 -

0 投票
1 回答
210 浏览

c++ - 如何针对一组紧密的 OOBB 快速测试射线交叉点?

我在 3d 空间中有数千个 OOBB(面向对象的边界框),其中包含简单的细长 3d 网格。它们紧紧地挤在一起。

我想向它们发射光线并找出哪些 OOBB 被击中。由于我需要执行的光线相交测试的数量(数百万),针对所有 OOBB 的蛮力方法是不够的。

最初我认为使用某种空间分区系统来快速缩小潜在结果很容易,但是像 BVHs 或 KDTrees 这样的系统依赖于 AABBs(轴对齐的边界框)来加速查询,在我的情况下,这些将非常低效(因为我的许多紧密包装的 OOBB 具有大致相同的 AABB,因为它们包含的网格的对角线性质)。

我在 RAPID 库中阅读了有关 OBBTrees 的信息,但它们似乎是自上而下构建的(从多边形汤开始并细分为逐渐更小的 OOBB 组以形成树),而不是自下而上(从大量 OOBB 开始并用它们建造一棵树)。

是否有任何其他数据结构可以用来加速我的交叉测试?

这是我的 OOBB 的照片。如您所见,它们非常紧凑,如果您可以想象它们的 AABB 会是什么样子,您会发现它们会重叠到基于 AABB 的树不会真正提高性能的程度(因为几乎所有会被穿过人群中心的射线击中)。

值得注意的是,我需要查询所有被射线击中的 OOBB,而不仅仅是第一个/最近的。

OOBB

0 投票
1 回答
1613 浏览

c++ - 在 OpenGL 中的 3D 模型上创建 AABB

我正在尝试在 OpenGL 中的 3D 模型上创建 AABB。当我使用顶点均为 1.0 的 3D box.obj 时,检测模型之间的碰撞没有问题。然而,当我使用具有不同顶点值的更复杂的 3D 模型时,问题就出现了。复杂模型比 box.obj 小,并且具有 .18 和 .06 之类的顶点值,因此它们上的边界框非常大,我的引擎在它们不接触时检测到对象之间的碰撞。这个问题的一个解决方案是在将模型读入我的游戏时跟踪每个 x、y 和 z 轴的最大/最小值,但我在这样做时遇到了麻烦。

以下是我在模型中阅读的代码:

}

注释掉的部分 /**/ 是我最近添加的部分,试图获取最小/最大顶点值并使模型居中,但现在场景甚至无法加载。

0 投票
0 回答
127 浏览

cgal - CGAL AABB 树 do_intersect 浮点错误

我正在为我的一个项目使用 CGAL。我从网格文件 (.off) 中创建了一个 AABB 树。首先,我从网格中提取多面体,然后得到三角形,最后将它们插入树中。这一切都很顺利。

问题是当我使用树的do_intersect函数时。给定两点 A 和 B,我想知道连接这两个点的射线或线段是否与某物相交。

大多数情况下这都能正常工作,有时我会得到浮点错误。“有时”意味着很少的点子集。

是否有一个原因?

这是我的代码片段:

在有人问pointB是网格表面上的一个特定点之前,它对大多数点没有任何问题,所以我认为错误与它无关。相反, pointA在空间中的某个地方。

谢谢你的回答。