javascript - 使用boundingSphere进行碰撞检测

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

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

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

像这样:

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 );
<小时/>

一点小技巧。在开发过程中,很高兴看到场景中的边界框,为此您可以使用 the THREE.BoundingBoxHelper :

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

关于javascript - 使用boundingSphere进行碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005992/

相关文章:

Javascript Lossy PNG图像压缩库

javascript - three.js 中 STL 对象的边界框

java 两个旋转矩形之间的碰撞检测

javascript - 动画期间的 jQuery 碰撞检测

javascript - 两个 Canvas 作为 Three.js 中平面的纹理

java - 旋转像素完美碰撞检测

Javascript 打印脚本在 IE 中不起作用

javascript - React Native - 跨屏幕传递数据

HTML 无法识别 JavaScript

three.js - 如何使用 THREE.InstancedBufferGeometry 动态添加和删除对象?