Questions tagged «separating-axis-theorem»


3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

1
如何使用SAT解决复合形状的碰撞?
SAT是确定任意凸多边形之间的碰撞的一种不错的方法。您甚至可以获得解决冲突所需的向量。 为了解决复杂(非凸)形状之间的碰撞,我正在考虑某种由多个凸多边形组成的复合形状。如果在宽相中发生碰撞(例如,圆与圆或AABB与AABB),则可以通过检查复合形状中的每个多边形与其他复合形状中的每个多边形来解决冲突。 我想知道实际上分离对象的最佳方法是什么?幼稚的方法是仅取最大幅度的向量并将其用于分离。在下图中,这将是V 2 但是,如果分离向量指向不同的方向,则无法立即解决碰撞,可能需要多次迭代。因此,在下一张图片中,我们将使用V 1进行分离,并在另一个迭代中使用V 2(或接近V 2的形状,因为形状将移动V 1的量)。 这种方法将无法分离指向彼此相反方向的向量,或者在如下图所示的情况下: 在这里,我们将在左侧的状态和右侧的状态之间无休止地进行迭代。 因此,在这里提出一个实际的问题:解决这个问题的合理方法是什么?我想将复合多边形用于复杂形状是一个合理的想法,但我真的很想知道在这种情况下应如何解决碰撞?如第三张图片所示,如何检测死角?

3
与多个物体碰撞时的碰撞解决
我有静态对象和可移动对象。使用分离轴定理检测碰撞。 例如,在这种情况下,我有两个静态对象(红色): 以及介于两者之间的可移动对象: 我的算法能够计算出其中两个对象之间的碰撞,并且还为碰撞生成了一个完美的分辨率矢量(意味着最小位移矢量)。 因此,例如,当我检查绿色矩形和右红色矩形之间的碰撞时,该算法会吐出一个向量,该向量告诉我如何移动绿色矩形才能解决该碰撞: 请注意,我只是在MSPaint中快速绘制了此图像,因此在该图片中,实际上可能是最小平移矢量将绿色矩形推到顶部,但是在这里我将假定将其推到左侧/权利实际上更短。 解决此问题的一般方法是仅解决每帧一个冲突的冲突,而不是一次解决所有冲突。但就我而言,这将导致触发器: 首先,求解器检测到两个冲突,但仅解决右矩形和绿色矩形之间的冲突: 然后,在下一帧中,它仅检测到左红色矩形和绿色矩形之间的一个碰撞,并解决该碰撞: 如您所见,这实际上并不能解决冲突(例如,通过将绿色矩形推到顶部),而只是在两个状态之间无限地触发器。 我该如何解决?

3
2D游戏碰撞响应:SAT和沿给定轴的最小位移?
我正在尝试在自己制作的2D游戏中实现碰撞系统。分离轴定理(如metanet的碰撞教程所述)似乎是处理碰撞检测的一种有效且健壮的方法,但我不太喜欢它们使用的碰撞响应方法。通过沿最小重叠轴盲目移动,该算法仅忽略了运动对象的先前位置,这意味着它在进入静止物体并随后反弹时不会与静止物体发生太多碰撞。 这是一个很重要的情况的示例: 根据上述SAT方法,该矩形将简单地从垂直于其斜边的三角形中弹出: 但是,实际上,矩形应该停在三角形的右下角,因为如果矩形沿着其位移矢量连续移动,那将是第一个碰撞点: 现在,这在游戏过程中可能实际上并不重要,但是我很想知道是否存在一种以这种方式有效且普遍地获得准确位移的方法。在过去的几天里,我一直在为之绞尽脑汁,我还不想放弃! (从StackOverflow交叉发布,希望这不违反规则!)

4
用SAT查找接触点
分离轴定理(SAT)使确定最小平移向量(即可以分离两个碰撞对象的最短向量)变得简单。但是,我需要的是沿着穿透物体正在移动的向量(即接触点)将物体分开的向量。 我画了一幅画以帮助澄清。有一个框,从前面的位置移动到后面的位置。在其后位置,它与灰色多边形相交。SAT可以轻松返回MTV,这是红色矢量。我正在寻找计算蓝色向量。 我当前的解决方案在前后位置之间执行二进制搜索,直到已知蓝色矢量的长度达到某个阈值为止。它可以工作,但是这是一个非常昂贵的计算,因为需要在每个循环中重新计算形状之间的冲突。 有没有更简单和/或更有效的方法来找到接触点矢量?

3
窄相碰撞检测算法
冲突检测分为三个阶段。 Broadphase:在所有可以交互的对象之间循环,如果可以加快循环,则允许误报。 Narrowphase(窄相):确定它们是否碰撞,有时如何碰撞,没有误报 解决方法:解决冲突。 我要问的问题是关于窄相的。有多种算法,复杂度和准确性不同。 Hitbox交集:这是一种后验算法,具有最低的复杂度,但也不太准确, 颜色交集:每个像素的Hitbox交集,后验,像素完美,时间上不准确,复杂度更高 分离轴定理:更常用,对三角形准确,但是a后验,因为它找不到边,考虑到最后一帧,它更稳定 线性射线广播:A先验算法,对半逼真的物理学很有用,它可以找到相交点,甚至比SAT还要精确,但是复杂性更高 样条插值:先验,比线性射线更精确,更复杂。 我可能已经忘记了更多。问题是,何时使用SAT更好,何时使用射线,何时花键以及是否有更好的选择。

1
用多个多边形分隔轴定理?
我正在尝试在C#中实现分离轴定理。我有一个可以计算两个多边形之间的最小平移矢量的函数。但是,我似乎无法创建一个函数来计算一个多边形与多个其他多边形之间的最小平移矢量。老实说,我已经为此工作了几个月,距离解决方案还很近,也无法在线找到解决方案。总是有一些边缘情况无法返回正确的结果,从而导致游戏中出现高优先级的错误。 以下是无法正常工作的常见边缘情况: 是否有针对此问题的知名解决方案?我只能发现有人说“只对每个多边形执行SAT”,但这很少产生最小的平移向量。 任何帮助将不胜感激。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.