如何检测 JavaScript 和 Three.js 中两个对象之间的碰撞?

How to detect collision between two objects in JavaScript with Three.js?

碰撞检测有很多不错的东西,比如 threex.colliders 或这里的问题代码片段,但实际上大多数东西都是旧的(一些函数如 multiplyVector3 已更改,其他已删除。我有一个 Object3D (角色模型)和一个世界(3D 模型:汽车、树木、建筑物等)。我可以使用箭头键移动角色(在渲染循环中通过 translateX/Y 移动它。

我想要的是角色模型和其他一切(除了地面和其他一些)之间的碰撞检测。所以我需要在 Object3D(角色)和 WorldObjects[](所有对象)之间进行碰撞检测。

那么,现在可能有几种方法可以获得想要的结果,哪种方法最好(快速且可读)?现在的问题(也许)是否有效:当角色与其他任何东西发生碰撞时,我如何才能阻止他向这个方向移动但他可以向右或向左后退?

您可以使用对象的边界框来检测碰撞。边界框是 THREE.Box3 类型,并且具有 isIntersectionBoxcontainsBoxcontainsPoint 等有用的方法,这将满足您检测碰撞时的所有需求。

使用它们就这么简单:

var firstObject = ...your first object...

var secondObject = ...your second object...

firstBB = new THREE.Box3().setFromObject(firstObject);

secondBB = new THREE.Box3().setFromObject(secondObject);

var collision = firstBB.isIntersectionBox(secondBB);

collision 如果方框彼此 colliding/hitting 则为真。 这让您了解如何使用边界框。

您也可以查看 this example out。我想这对你很有用。

编辑:

您也许还应该检查 Physijs 库,它是 three.js.

的插件

您可能希望了解某人