我有一个看起来像另一个对象的对象。但是当我进行碰撞检测时。他看不到我希望使用LookAt进行轮换。但是他使用默认轮播。他为什么不使用我希望对LookAt进行的轮换?

这就是问题:

javascript - 三.JS外观-LMLPHP

蓝色是默认值。绿色的一个与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;
}

最佳答案

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

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

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

我认为您最好使用提供原始测试的碰撞检测库(Rectangle over Rectangle,Rectangle over Circle,...)

关于javascript - 三.JS外观,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42469565/

10-08 21:13