如何检测 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
类型,并且具有 isIntersectionBox
、containsBox
或 containsPoint
等有用的方法,这将满足您检测碰撞时的所有需求。
使用它们就这么简单:
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.
的插件
您可能希望了解某人 。
碰撞检测有很多不错的东西,比如 threex.colliders 或这里的问题代码片段,但实际上大多数东西都是旧的(一些函数如 multiplyVector3 已更改,其他已删除。我有一个 Object3D (角色模型)和一个世界(3D 模型:汽车、树木、建筑物等)。我可以使用箭头键移动角色(在渲染循环中通过 translateX/Y 移动它。
我想要的是角色模型和其他一切(除了地面和其他一些)之间的碰撞检测。所以我需要在 Object3D(角色)和 WorldObjects[](所有对象)之间进行碰撞检测。
那么,现在可能有几种方法可以获得想要的结果,哪种方法最好(快速且可读)?现在的问题(也许)是否有效:当角色与其他任何东西发生碰撞时,我如何才能阻止他向这个方向移动但他可以向右或向左后退?
您可以使用对象的边界框来检测碰撞。边界框是 THREE.Box3
类型,并且具有 isIntersectionBox
、containsBox
或 containsPoint
等有用的方法,这将满足您检测碰撞时的所有需求。
使用它们就这么简单:
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.
的插件您可能希望了解某人