如何使用Three.js检测JavaScript中两个对象之间的冲突?

时间:2015-02-11 12:03:52

标签: javascript three.js

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

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

那么,现在有几种方法可以获得想要的结果,这是最好的(快速和可读)方式来执行此操作?现在问题(可能)如果它起作用:当角色与其他任何东西发生碰撞时,我怎么能阻止他可以向这个方向移动但是他可以向后,向右或向左移动?

1 个答案:

答案 0 :(得分:11)

您可以使用对象的边界框来检测碰撞。边界框的类型为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将为真。 这可以让您了解如何使用边界框。

您还可以查看this example out。我认为这对你非常有用。

编辑:

您也可以查看Physijs库,这是一个插件为three.js。

有人可能想要跟踪similar question on Stackoverflow