标签: collision-detection

在运行时更新网格对撞机的替代方案?

我正在开发用户在运行时生成网格的游戏(所有时间),因此网格有很多顶点,同时有一个GameObject - 玩家需要在运行时网格中生成的区域中触发事件.

这个游戏中的相机是3D,但这个生成的网格是平的.在我附图中,我在顶视图中显示了这一点,以便更好地展示它的外观.

现在我每隔几秒就更新一次Mesh Collider,但是在生成的网格有越来越多的顶点之后,它会非常慢.

我相信这是一个非常简单的碰撞方法,所以也许还有其他任何方法来检测这个,而不是附加到动态生成网格的网格对撞机?

更新#1

我知道Mesh Collider非常慢,不应该在运行时更新.我也知道应该使用像盒子对撞机这样的原语.

但是在这种情况下,当这个平面网格每秒更新一次(并且它会增长)时,它将成千上万的盒子对撞机,并且每秒都需要添加新的.这种方法也行不通.

更新#2

我的第二个想法是为玩家找到最近的三角形并为它们创建碰撞器(盒子碰撞器应该是最快的).但我真的不知道从哪里开始,甚至可能?有人吗?

图2,作为@Hristo的答案

画画

c# mesh collision-detection unity-game-engine

15
推荐指数
1
解决办法
2200
查看次数

Java中两个图像之间的碰撞检测

我在写作的游戏中显示了两个角色,即玩家和敌人.定义如下:

public void player(Graphics g) {
    g.drawImage(plimg, x, y, this);
}

public void enemy(Graphics g) {
    g.drawImage(enemy, 200, 200, this);
}
Run Code Online (Sandbox Code Playgroud)

然后叫:

player(g);
enemy(g);
Run Code Online (Sandbox Code Playgroud)

我可以用键盘移动播放器(),但在尝试检测两者之间的碰撞时我感到很茫然.很多人都说使用矩形,但作为一个初学者,我看不出如何将它链接到我现有的代码中.谁能为我提供一些建议?

java collision-detection

14
推荐指数
2
解决办法
10万
查看次数

快速圆碰撞检测

我正在尝试编写一种方法来计算两个圆是否重叠.我想出了以下内容,我只是想知道是否有可能进一步优化.

private static boolean isCollision(Point2D p1, float r1, Point2D p2, float r2)
{
    float a,dx, dy;
    a = (r1+r2) * (r1+r2);
    dx = (float) (p1.getX() - p2.getX());
    dy = (float) (p1.getY() - p2.getY());

    if (a > (dx*dx) + (dy*dy))
    {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

java optimization performance geometry collision-detection

14
推荐指数
3
解决办法
2万
查看次数

如何细分2D游戏世界以获得更好的碰撞检测

我正在开发一款具有相当大的正方形2D游戏区域的游戏.游戏区域是无框的,有边界(没有缠绕).我试图找出如何最好地划分这个世界以提高碰撞检测的性能.我不想检查每个实体是否与所有其他实体发生碰撞,而只是检查附近的实体是否存在碰撞和避障.

我对这个游戏世界有一些特别关注......

  • 我希望能够同时在游戏世界中使用大量实体.但是,%的实体不会与相同类型的实体发生冲突.例如,射弹不会与其他射弹碰撞.

  • 我希望能够使用大量的实体大小.我希望最小实体和最大实体之间存在非常大的差异.

  • 游戏世界中很少有静态或非移动实体.

我有兴趣使用类似于答案中描述的内容:Qualeree vs Red-Black树用于C++游戏?

我担心的是,世界的树细分能够处理实体中的大尺寸差异吗?为了让较小的实体足够分裂世界,较大的实体需要占据大量的区域,我担心这将如何影响系统的性能.

我的另一个主要问题是如何正确地保持被占领区列表的最新状态.由于存在大量移动实体和一些非常大的移动实体,看起来分割世界将产生大量开销以跟踪哪些实体占据哪些区域.

我主要寻找任何有助于减少碰撞检测次数和避障计算的好算法或想法.

collision-detection data-structures

14
推荐指数
2
解决办法
8053
查看次数

什么是一个好的,简单的,仅2D矩形的碰撞检测算法?

我正在为年轻人设计一个碰撞检测游戏教程,所以我希望它尽可能简单,以便更容易解释.

要求非常简单.世界是2D,只包含矩形(任意大小).BSP甚至四叉树似乎都是过度杀戮(同样,重点在于简单性)但是我想要比通过所有n(n-1)/ 2个可能的碰撞强制执行更有效的东西.

2D,仅矩形,简单.

任何人都可以指出我可以查找的算法吗?是我正在寻找的四叉树算法吗?

编辑:此外,矩形永远不会旋转(我保持简单).为了让您了解我正在工作的规模,将在您使用Pygame在Python中实现的典型用户的笔记本电脑/台式机(不到5年)上运行几百个矩形.

algorithm 2d collision-detection rectangles

14
推荐指数
2
解决办法
8209
查看次数

开源,纯Java物理/动态库

我正在寻找一个轻量级的纯Java物理引擎来为机器人运动控制做一些模拟.

我的要求:

  • 刚体物理学
  • 联合约束和力量
  • 凸面物体碰撞检测
  • 轻量级,纯Java,因此可以嵌入我的应用程序中
  • 能够快速运行模拟
  • 舒适地处理50-100个物体
  • 开源

您是否可以推荐任何适合该法案的现有库,而不是重新发明轮子?

ps我已经使用Google搜索了 - 我只是希望得到已经使用或实施此类内容的人的诚实意见!

java simulation open-source physics collision-detection

14
推荐指数
1
解决办法
1977
查看次数

如何计算包围其他边界球的最小边界球

我正在寻找一个有人可以访问的算法,它将计算包含一组其他边界球体的最小边界球体.我已经考虑了一段时间,并提出了一些初步的解决方案,但我不相信这些必然是最准确或最少计算的(最快).

第一个想法

我的第一个解决方案是最简单的天真解决方案,即平均球形中心以获得中心点,然后计算从计算中心到每个球体中心的最大距离加上其半径,作为半径.所以伪代码如下:

function containing_sphere_1(spheres)
  center = sum(spheres.center) / count(spheres)
  radius = max(distance(center, spheres.center) + radius)
  return Sphere(center, radius)
end
Run Code Online (Sandbox Code Playgroud)

然而,我觉得它不是那么计算上便宜,也不是很准确,因为产生的球体可能比它需要的大得多.

第二个想法

我的第二个想法是使用迭代算法来计算最小边界球.它是通过连续测试另一个球体来计算的,如果测试的球体在边界内,则不做任何事情,否则从可用的两个球体计算新的边界球体.新的边界球体的中心位于两个中心之间的矢量之间,如果它延伸到球体表面,半径是该线条长度的一半(从新中心到球体表面).

function containing_sphere_2(spheres)
  bounds = first(spheres)
  for each sphere in spheres
    if bounds does not contain sphere
      line = vector(bounds.center, sphere.center)
      extend(line, bounds.radius)
      extend(line, sphere.radius)
      center = midpoint(line)
      radius = length(line) / 2
      bounds = Sphere(center, radius)
    end
  end
  return bounds
end
Run Code Online (Sandbox Code Playgroud)

最初我认为这将是要走的路,因为它是迭代的并且看起来相当逻辑上一致,但是在做了一些阅读后,最值得注意的是文章"最小的封闭盘(球和椭圆体)"由Emo Welzl我不是不是这么肯定.

Welzl的算法

据我所知,该算法的基础是3维中一组点上的最小边界球可以由最多4个点(在封闭球体的表面上)确定.因此,该算法通过选择4个点进行迭代,然后测试其他点以查看它们是否在内部,如果它们不是新的边界球,则构造特征为新点.

现在算法严格处理点,但我认为它可以应用于处理球体,主要的复杂因素是在构造封闭球体时对半径进行处理.

回到问题

那么,对于一组给定的球体,创建最小边界球的"最佳"算法是什么,至少是计算成本最高的算法?

我在这里描述了其中一个答案吗?一些伪代码或算法会很棒.

math collision-detection

14
推荐指数
2
解决办法
1万
查看次数

CRC32碰撞

我试图找到两个消息之间的冲突,这将导致相同的CRC哈希.考虑到我使用CRC32,有什么方法可以缩短我在进行暴力攻击时必须尝试的消息列表?

任何带有相关提示的网站链接都会有所帮助.我已经有了一个强力算法,它会做到这一点,但它只是增加整数,看它是否会匹配其他哈希值.

crc collision-detection

13
推荐指数
2
解决办法
2万
查看次数

检测碰撞方向

方形瓷砖与另一个方形瓷砖碰撞.酒保说......

我有:

  • 两个瓷砖的高度,宽度,x和y.
  • 导致碰撞的运动的2D矢量.

我需要知道发生碰撞的情况(例如,顶部,底部,左侧,右侧),以便适当地重置位置.

我会给那些能回答这个问题的人一个精神上的好奇心,因为我已经尝试了太多时间,这似乎是根本的.

collision-detection

13
推荐指数
1
解决办法
1万
查看次数

Pixel-Perfect Collision Detection Android

好的,我正在开发一款Android游戏.我需要实现像素完美碰撞检测.我已经在每个图像周围设置了边界框,每个边界框都被转换为匹配图像的当前旋转.一切都很好.我还将每个位图的像素数据存储在一个数组中.有人可以帮我找出检测像素是否重叠的最有效方法吗?在此先感谢您的帮助!

java android bitmap collision-detection

13
推荐指数
3
解决办法
2万
查看次数