【问题标题】:Three.JS lookat三.JS看看
【发布时间】:2017-07-17 02:39:49
【问题描述】:

我有一个看向另一个对象的对象。但是当我进行碰撞检测时。他没有看到我对LookAt 所做的轮换。但他使用他的默认轮换。为什么他不使用我对LookAt 所做的轮换愿望?

这就是问题所在:

蓝色是默认的。绿色的显示蓝色的带有LookAt

为什么 LookAt 不影响碰撞检测?

我的碰撞检测:(我制作了一款 RTS 游戏,所以我只使用 X 和 Z)

function collisionXZ(o1, o2) {
    if (Math.abs(o1.position.x - o2.position.x) > (o1.geometry.parameters.width + o2.geometry.parameters.width) / 2)
        return false;
    if (Math.abs(o1.position.z - o2.position.z) > (o1.geometry.parameters.depth + o2.geometry.parameters.depth) / 2)
        return false;
    return true;
}

【问题讨论】:

  • LookAt 是什么意思?您正在使用THREE.Object3D.lookAt() 方法旋转对象,是这样吗? 碰撞检测是什么意思?您的碰撞检测算法是否使用matrixWorld 来测试对象?
  • @neeh 感谢您的回答。是的,我用LookAt() 旋转了一个 3D 对象。不,我的碰撞检测不使用 matrixWorld。我需要那个吗?我用我的碰撞检测更新了我的帖子。也许你有一些反馈..?非常感谢

标签: javascript three.js collision-detection


【解决方案1】:

THREE.Object3D.lookAt() 更改对象的rotation,而不是其position

因此,如果要测试这两个矩形是否碰撞,则必须将rotation 考虑在内。

您的函数看起来像一个AABB test,它(在大多数情况下)仅在碰撞检测系统的广泛阶段中使用。基本上,这个测试的目的是检测哪个对象可能发生碰撞,以避免不必要的贪婪碰撞测试,但它本身不是真正的碰撞测试

我认为您最好使用提供原始测试的碰撞检测库(矩形上的矩形,矩形上的矩形,...)

【讨论】:

  • 感谢您的出色回答。你有什么建议让图书馆和三个 JS 做碰撞拘留?
  • 看看this question 或者physi.js
猜你喜欢
  • 2016-03-25
  • 2019-10-05
  • 2013-05-19
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
相关资源
最近更新 更多