1

我玩过看起来相当不错的 JTS 拓扑套件。但是,我无法解决两个 Geometry 实例之间的冲突。我想在几何 A 和 B 之间进行墙壁滑动(见下面的截图)。 在此处输入图像描述

我尝试实施此评论中发布的解决方案(解决方案 2): https ://gamedev.stackexchange.com/questions/104099/how-to-go-about-an-intermediate-collision-resolution-system/104105#104105

但是,我无法计算光线投射,甚至无法计算 A 碰撞的 B 边界矢量的法线。

有人能给我一个如何使用 JTS 实现墙壁滑动的起点吗?

  • 如何沿运动矢量进行光线投射(计算两个 Geometry 实例的碰撞位置)?
  • 如何计算碰撞法线?

编辑:几何类提供了可能帮助我“相交”和“相交”的方法。如果参数几何与此几何相交,则“相交”返回 true。“intersection”返回一个几何图形,表示两个几何图形共有的点集。也许我可以使用“交叉点”来找到第一个碰撞点。

有人用 JTS 做过这个吗?也许该套件已经提供了执行此任务的算法。

提前致谢

4

1 回答 1

1

光线投射意味着您定义起点和方向并以无限长的矢量(射线)进行计算。然后你计算那条射线会在哪里击中一个物体。

在您的情况下,光线方向将是您的运动矢量,起点将取决于您的几何形状/边界形状的形状。在边界框的情况下,您可以从每个角落投射多条光线,并检查哪个首先击中障碍物。当然,如果盒子会撞到障碍物的角落等,这将无法正常工作。但这可能会提供一个起点。请注意,有效且正确的碰撞检测是一个非常复杂的主题。

至于你的第二个问题:IIRC 碰撞法线是运动矢量的平均值和运动矢量在碰撞表面上的投影。每个向量的权重将取决于移动速度和表面属性,例如弹性。又是一个相当复杂的话题,我的记忆可能会在这里欺骗我(碰撞法线也可能只是撞击点碰撞表面的法线)

让我尝试用一​​些 ascii 图来说明第二点:

O - moving object
 \ - motion vector
  \ 
   \    / - collision normal
    \  /
  ___\/__.___________ - collision surface ("average" of motion vector and vector between impact point and the "dot" projected onto the surface)
      \  |
       \ | - project motion vector from "inside" onto the collision surface (up in this case)
        \|

请注意,这可能会欺骗我的atm,这就是我的想法,如果我有时间,我会查找一些教程/描述。

一些可能帮助您入门的链接:

于 2015-09-22T10:01:55.440 回答