使用boundingSphere进行碰撞检测

时间:2016-01-26 02:13:49

标签: javascript three.js collision-detection bounding-volume

对于每个网格(THREE.Object3D),Three.js提供了非常方便的属性 - boundingSphereboundingSphere具有intersectsSphereisIntersectionBox方法。

有了这一切,我想我可以将它用于简单的碰撞检测,但是当我尝试它时似乎碰撞一直发生,因为(我试过boundingSphere)boundingSphere.center始终在(0, 0, 0);所以如果我想检查2个网格之间的碰撞,我应该为每个对象 - 克隆boundingSphere对象,然后获取它的世界坐标,然后才使用intersectsSphere

类似的东西:

var bs = component.object.geometry.boundingSphere.clone();
bs.center.setFromMatrixPosition(component.object.matrixWorld);
...
if (_bs.intersectsSphere(bs)){

这是假设使用的方式,还是我遗漏了某些东西,还有更方便的基于boundingBox / boundingSphere进行碰撞检测的方法?

1 个答案:

答案 0 :(得分:1)

如果要使用边界框进行碰撞检测,则需要使用世界坐标系中的框。网格的intersectsSphereisIntersectionBox属性中的边界体积位于对象的局部坐标系中。

你可以这样做:克隆卷并将它们移动到世界坐标系中的正确位置,这是一个很好的解决方案。

否则,您也可以从网格中设置一个新框,并使用这些框进行碰撞。我们假设您有一个名为THREE.Mesh的{​​{1}},那么您可以这样做:

mesh

小小的提示。在开发过程中,可以很好地查看场景中的边界框,为此您可以使用the THREE.BoundingBoxHelper

sphere = new THREE.Sphere.setFromPoints( mesh.vertices );

box = new THREE.Box3.setFromObject( mesh );