低帧速下判断移动物体到达目标位置

昨天review一同事上传的代码,发现了其中的一个问题。其实蛮常见的,就是判断一个活动的物体是否移动到了目标位置点。其作法就是判断两点之间的距离,然后如果距离小于某个阈值的话就认为到达了目标点。这样判断的几何原理就是移动物体是否到达了目标点所在的一个圆形范围内。

这种方法通常情况下也没有什么问题,但是在mobile上,或者某些运行帧速比较低的情况下就会出现误判,也即通常物理引擎中所出现的“穿越”情形,因deltaTime比较大,直接导致移到物体在两帧之间的位置越过了该限定圆。

更好的方法是利用点与平面之间的有向距离来进行计算。这里的点就是目标点,基准平面就是以活动物体移动的方向为法向量、活动物体当前所在的位置为平面上的点所构成的平面。该平面与目标点之间会有三种有向位置关系:

  • 点在平面前:移动物体还未到达目标点;
  • 点在平面上:移动物体刚好到达目标点;
  • 点在平面后:移动物体已经越过目标点;
其中的后两种情况出现时都处理为达到目标点即可。另外,点到平面的有向距离这里也可以简化计算,只需要计算移动物体的前进方向与其到目标点之间的方向的点乘正负即可。
细微之中的差异即可决定不同的结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值