问题标签 [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 投票
2 回答
317 浏览

c# - 否定导致 5 倍减速的布尔评估的真实性?

我正在尝试实现一个八叉树,为此,我需要一个快速的 AABB 射线相交算法。经过一番搜索,我发现了这篇似乎提供了这一点的论文。从这里提供的源代码中,我将pluecker_cls_cff函数翻译为 C#,如下所示:

这似乎工作正常,但对我来说似乎相当慢(250 毫秒来做 1000 万次相交)所以我尝试了一些不同品种的微基准测试。一方面,我删除了return声明之后的否定并反转了所有比较(>反之亦然<)。

下雪了:

这应该给出相同的结果,对吧?看起来是这样,因为它返回与带有几个测试用例的否定版本相同的结果。然而,在基准测试中,它快了 5 倍(50 毫秒完成 1000 万次相交)!我确定它没有被优化,我的基准看起来像这样:

什么可以解释这种巨大的差异?我在 x86 上运行 .NET 4.0。

0 投票
1 回答
4422 浏览

geometry - Collision test between a triangle and a rectangle (AABB) in 2D

I've spent a good amount of time getting intersections working correctly between various 2D shapes (circle-circle, circle-tri, circle-rect, rect-rect - a huge thanks to those who've solved such problems from which I drew my solutions from) for a simple project and am now in the process of trying to implement an triangle-AABB intersection test.

I'm a bit stuck however. I've tried searching online and thinking it through however I've been unable to get any ideas. The thing that's given me the biggest issue at the moment is checking whether the edges of triangle (which is an isosceles btw) intersect the rectangle when no vertexes lie within the rectangle.

Any ideas how I could get this working?

EDIT: To give a bit more insight as to stages as I think they should occur:

1 - Check to see if any vertexes lie with in the rectangle (this part is easy). If yes, collision, otherwise continue.

2 - Check to see if any edges are intersecting the rectangle. This is where I'm stuck. I have little idea how to implement this.

0 投票
2 回答
2582 浏览

collision-detection - AABB 在具有可移动和可旋转角色/对象/等的游戏中

我正在创建我的第一个 3D 游戏,但遇到了一些问题。

我读到了AABB相交以及从中构建树的想法,但我无法理解的一件事是,如果我的“角色”在游戏中旋转,轴对齐的概念就不会被保留!

我检查了几个库(如 oz-collide、OPCODE 等),并且我看到这些实现是为静态对象制作的,因为它使用没有来源的盒子(对于非静态,所有节点每次移动后都应更新树中的内容)。

那些库应该是超快的,我可能在某个地方弄错了。

解释是什么?

0 投票
2 回答
2202 浏览

c++ - 计算 AABB(轴对齐边界框)碰撞

我应该检查两个金字塔之间的 AABB 碰撞。我查了AABB,简单到可以查。我得到了两个金字塔的顶点,以及 4 个世界位置。我应该计算我已经完成的 AABB 碰撞框,然后看看它们的金字塔是否碰撞。我感到困惑的部分是世界坐标是什么?每个金字塔有 4 个,所以它们不是顶点。我可以根据顶点判断它们是否发生碰撞,那么世界位置有什么用?

0 投票
4 回答
3340 浏览

graphics - 计算变换球体的 AABB

我有一个由中心点和半径在对象空间中表示的球体。球体通过一个可能包括缩放、旋转和平移的变换矩阵被变换到世界空间。我需要为世界空间中的球体构建一个轴对齐的边界框,但我不知道该怎么做。

这是我目前的方法,适用于某些情况:

但是,我怀疑这是否总是有效。它不应该因非均匀缩放而失败吗?

0 投票
1 回答
4367 浏览

c++ - 轴对齐边界框碰撞:哪些边发生碰撞

我正在尝试制作类似打砖块的游戏,但现在我面临着碰撞问题。像往常一样,砖块是矩形(在我的例子中是正方形),而球是一个圆形,所以它都是关于轴对齐的边界框。

到目前为止,我已经掌握了简单的碰撞检测算法,但我需要知道球击中每块砖的哪一面。例如: 碰撞案例

到目前为止,我有一个算法可以检查每一侧是否被击中:

但是在靠近角落的碰撞中,比如图像中的第三个,两个标志(例如,左和下)设置为 1,所以我不知道如何决定。

在这些情况下通常会做什么?

0 投票
3 回答
597 浏览

graphics - 计算贝塞尔曲线 AABB

我想计算二次曲线或贝塞尔曲线的 AABB(轴对齐边界框)。

我知道如何做到这一点的唯一方法是评估贝塞尔曲线上的大量点,然后使用这些点来计算 AABB。

有没有更好的办法?

0 投票
5 回答
23791 浏览

c++ - 如何在平移/旋转后重新计算轴对齐的边界框

当我第一次加载我的对象时,我用最大和最小 (x,y,z) 点计算初始 AABB。但这是在物体空间中,物体在世界各地移动,更重要的是,它在旋转。

每次平移/旋转对象时如何重新计算新的 AABB?这基本上发生在每一帧。每帧重新计算新的 AABB 是否会是一项非常密集的操作?如果是这样,有什么替代方案?

我知道 AABB 会使我的碰撞检测不那么准确,但是实现碰撞检测代码比 OBB 更容易,我想一次迈出这一步。

在从以下答案中获得一些见解后,这是我当前的代码:

但它不能正常工作......我做错了什么?

0 投票
1 回答
2019 浏览

collision-detection - 如何确定轴对齐边界框碰撞中的碰撞法线?

我有一个 3d 移动框和一个固定框。我可以检测到碰撞,但现在我想将移动框滑动到静止框作为碰撞响应。为此,我需要与移动框碰撞的面部法线。有谁知道我如何解决这个问题?碰撞测试似乎没有给我这个信息。任何帮助表示赞赏。

0 投票
3 回答
1111 浏览

c# - AABB 碰撞导致的平台跳跃问题

图表

当我的 AABB 物理引擎解析交叉点时,它会通过找到穿透较小的轴,然后“推出”该轴上的实体来实现。

考虑“向左跳跃”的例子:

  • 如果velocityX 大于velocityY,AABB 将实体在Y 轴上推出,有效地停止跳跃(结果:玩家停在半空中)。
  • 如果velocityX 小于velocitY(图中未显示),则程序按预期工作,因为AABB 在X 轴上将实体推出。

我怎么解决这个问题?

源代码: