使用边界球体进行碰撞检测



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

有了这一切,我认为我可以使用它进行简单的碰撞检测,但是当我尝试时,似乎冲突一直在发生,因为(我尝试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 进行碰撞检测?

如果要

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

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

否则,您也可以从网格中设置一个新框,并使用这些框进行碰撞。假设您有一个名为meshTHREE.Mesh,那么您可以执行以下操作:

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

一个小提示。在开发过程中,很高兴看到场景中的边界框,为此您可以使用THREE.BoundingBoxHelper

var helper = new THREE.BoundingBoxHelper( mesh );
scene.add( helper );

相关内容

  • 没有找到相关文章

最新更新