问题标签 [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 回答
84 浏览

unity3d - 创建具有不准确阈值的简化边界

给定一组非旋转的 AABB 边界,我希望从原始集创建一组更简单的边界,允许指定数量的不准确性。

一些例子: 解决方案示例

我在 Unity with Bounds中使用它,但这只是基本的 AABB 比较东西,没有特定于 Unity 的东西。我想过去一定有人为此制定了一个系统,但我没有运气四处寻找。封装边界很容易,但这更难,因为你不能一个接一个地遍历每个边界。有时,更简单的解决方案只能通过查看整个事物来看到。

快速的性能并不重要,但会很好。不准确在两个方向上都是可以的(即边界可能实际尺寸小一点或多一点)。如果它有帮助,我可以期望原始集合中的所有边界都连接到某个地方 - 一个单独的组中没有自由浮动的部分。

我不指望任何人编写一个完整的系统来解决这个问题,我更希望它已经解决了,或者可能有一个我还没有想到的明显过程来实现它。

0 投票
1 回答
164 浏览

c++ - 使用多个按键时 AABB 碰撞检测故障

目前我正在设计一个 2d 平台游戏,我已经实现了碰撞检测,我的代码如下:

ETC...

ETC...

ETC...

这一切似乎都很好,但是当与物体水平碰撞时,如果我一直按住右键并按下向上键,该功能会识别出物体仍在碰撞,然后施加相同的力,如果物体在-游戏在上方跳跃并碰撞,因此即使没有向上的力量,游戏中的物体也会被推下。

我尝试在 X 和 Y 中为碰撞实现单独的布尔值,但这并没有影响结果。

我发现的唯一解决方法是,如果在处理密钥时,我使用 else if's 而不是 if's。然而,这会导致非常线性的移动,并且对象不能沿对角线移动。

有什么建议么?

0 投票
1 回答
227 浏览

language-agnostic - 碰撞检测 - 排序 - 哪个碰撞先发生?

所以我正在制作一个只使用矩形(轴对齐的边界框)作为形状的物理引擎。我已经实现了克里斯特爱立信书中的一个方法,该方法返回两个移动 aabbs 的碰撞时间和法线。我还提出了另一种方法,它采用两个 aabbs 速度、位置和一个响应碰撞并赋予 aabbs 新速度的法线。

现在的实际问题是,我不知道检查所有 aabbs 之间的冲突并响应它们的循环应该是什么样子。只是我不明白如何按撞击时间排序碰撞,以及我应该响应哪个碰撞。

用伪代码编写的循环显示如何对所有冲突进行排序将非常有帮助。

我提到的另一件事是,如果一个移动的盒子在一个帧中可能会在两个静态盒子之间反弹数百次,如果它的速度真的很高,你如何处理呢?

0 投票
0 回答
728 浏览

collision-detection - AABB 与 AABB 碰撞检测和响应

在 C++ 中,我在我的小型体素游戏中实现了一个小型碰撞检测和响应系统。现在只有AABB vs Voxel(体素是一个立方体,所以它也是一个AABB)。

实际上,除了一个特殊的例外,如果玩家 (AABB) 以 45 度角精确地移动到体素的边缘,则所有的工作都很好,那么玩家就会快速进出。在下面的图像中,您可以看到它。

现在我想知道是什么导致了这个问题,但我找不到任何逻辑错误!?所以这里我目前如何在伪代码中做到这一点:

编辑:

Z 轴,而不是屏幕截图上的 Y 轴。我的错。

截图示例 示例图

0 投票
1 回答
59 浏览

c# - 检查鼠标是否在控制范围内的意外输出

我正在使用 winForm 按钮实现自定义拖放界面,并且在查看了几个关于如何获取鼠标位置并检查它是否与控件绑定的解决方案后,我无法让它工作。

我试过了:

这两种方法都没有奏效。检查鼠标边界似乎是一个简单的操作,但我真的很难过。

我对意外值的推测是:

  1. 获取光标位置的过程可能在光标图像的错误角落
  2. 由于某种原因,方法/功能在按钮上不起作用
0 投票
1 回答
906 浏览

performance - Box2d 光线投射与 AABB 查询性能

我目前正在尝试提高使用 box2d 物理(实际上是 box2dlights)的游戏的性能。

我有一种方法可以在已知区域内制作多个(比如说大约 16 到 64 个)光线投射。我想知道在第一步中对该区域进行 AABB 查询是否是个好主意,以检查光线投射是否可以报告某些内容。如果没有,我可以跳过光线投射。但是,如果 AABB 查询找到了一些东西,我必须进行光线投射,并且查询是多余的。AABB 查询与 raycast 相比有多快(尤其是在 box2d 中)?如果我可以依次跳过一些光线投射,那么进行通常多余的 AABB 查询是否是个好主意?

0 投票
1 回答
199 浏览

c++ - 对象似乎没有使用 AABB 碰撞方法发生碰撞

我是opengl的新手。我正在做一个简单的 2D 射击游戏,并使用 AABB 碰撞来做物体和子弹之间的碰撞。我为我的飞机和广场进行了碰撞,但它似乎不起作用。可以帮我检查一下我的问题吗?

0 投票
0 回答
347 浏览

java - AABB 碰撞 - 在某些墙壁上移动时卡住

我正在尝试实现一个简单的 AABB 系统,其中边界框从玩家的最后一个位置和下一个位置获取玩家的边界框。应该修改下一个边界框以防止任何非法移动(即穿过墙壁)。

目前,我的代码在一定程度上有效。例如,当我只向一个方向移动(键盘控制)时,我会停在正确的点:

碰撞截图

请注意,白色方块是实际的边界框,红色边框是专有的右下角坐标(因此红线进入地形内部是正确的)。

真正的问题出现在尝试同时移动两个轴时。例如,每当我在拥抱顶墙时向左移动(按住W),玩家就会以 16*16 的固定间隔卡住(在每个瓷砖的边缘)。一旦我解决了这个问题,我将创建某种贪心算法来对边界框进行分组,但目前BoundingBox地图中每个填充的图块只有一个:int i, j; boxes.add(new BoundingBox(new Vec2(i = x * 16, j = y * 16), new Vec2(i + 16, j + 16)));在 GIF 中显示正在发生的事情可能更容易:

解释碰撞卡住的 GIF

为每个边界框调用该collide函数,其中包含玩家的最后一个位置和最后一个框的修改位置,从左上角开始并首先增加 X。这是边界框的代码:

也许这个问题与操作顺序有关?这似乎不太可能,但似乎颠倒两个if语句的顺序会collide改变行为 - 我卡住的墙壁发生了变化。

据我所知,第一次发生碰撞时,合成向量应该在墙外,所以它不再碰撞 - 对吧?这里一定有某种逻辑错误,但我自己无法发现。

根据要求,此 pastebin 中提供了额外代码:http: //pastebin.com/ueBAKJ9C

0 投票
1 回答
1693 浏览

raytracing - 计算 Bbox/Cube 的法线

我正在研究光线追踪,并决定使用边界框(轴对齐的 bbox)作为对象(立方体),并对它们进行着色。我能够找到正确的t值和交点;但是,我找不到计算表面法线的方法,因为我只有bbox 的ray directionray originintersection point、 和t valuemin-max值。

有没有办法用我拥有的信息计算交点处的法线(或决定立方体光线的哪个面相交)?

我正在使用 Williams 等人的“An Efficientand Robust Ray-Box Intersection Algorithm”。

0 投票
1 回答
527 浏览

lua - 游戏开发 - 在跳跃过程中遇到 AABB 碰撞检测问题

我的碰撞检测通过获取矩形之间的交集并反转效果来工作。这发生在每一帧中。除了玩家坐在角落顶部并跳跃的情况外,它的效果很好。每隔一段时间,垂直交叉点大于水平交叉点,这使我的播放器从平台的一侧滑下。有什么建议么?

在此处输入图像描述