[英]How to detect collisions between a cube and sphere in three.js?
我的场景中有2个简单的3D对象(球体和立方体),我想检测它们是否发生碰撞。
怎么能实现这一目标?
最简单的选择是使用Vector3的distanceTo()或distanceToSquared函数来使用两个对象之间的欧氏距离。
例如
console.log(yourCube.position.distanceToSquared(yourSphere.position));
如果两个物体之间的距离大于球体半径和立方体侧面之间的距离,那么这将是潜在的碰撞。 我也建议使用distanceToSquared,因为它更快(因为它没有调用sqrt),它仍然可用于检查冲突。
请注意 ,这种方法并不是非常精确 - 它实际上是检查两个球体之间的碰撞(将立方体估计为半径等于立方体一半的球体),但是我希望它对于你的设置来说非常接近/足够好,因为它是在我看来,最简单,最快速的实施。
您可能会注意到,在一定距离之前,立方体的角将发生碰撞而不会触发碰撞。 您可以通过传递不同的立方体比率来调整“阈值”。 想象一下你的立方体周围的球体,球体的比例应该有多大,以便为你的设置获得一个不错的估计碰撞。
想到的另一种方法是找到最接近立方体的球体上的点:
例如
var pointOnSphere = yourSphere.position.clone().sub(yourCube.position).normalize(). multiplyScalar(yourSphereRadius);
这个如果脱离我的头顶,所以我无法保证上面的代码片段能够正常工作,可能值得将一个粒子放在pointOnSphere的坐标上进行检查。
您可以在本书中查看其他更先进的3D碰撞检测算法,但最好尽量保持简单/快速。
不幸的是,three.js没有任何碰撞探测器: 碰撞检测? 。
我认为你需要使用插件库。 像这样:http: //yomotsu.github.com/threejs-examples/cannonjs_box/ 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.