如何确定点是否在框内(three.js)?

时间:2017-09-20 13:06:52

标签: math three.js geometry collision-detection

如果我们有非轴对齐框,我们怎样才能最好地检查一个点是否位于其中? (我正在使用three.js,所以那里的任何实用程序都可以提供帮助.Tree.js包含边界框概念,但这是轴对齐的边界框)

1 个答案:

答案 0 :(得分:1)

如果您的框是旋转,平移和缩放的THREE.BoxGeometry,那么您可以使用其变换矩阵m来查找它是否与您的点v相交:

  • 转换v,方框与m
  • 相反
  • 检查变换后的v是否在变换后的框内(现在是轴对齐)

以下是代码:

var box = <Your non-aligned box>
var point = <Your point>

box.geometry.computeBoundingBox(); // This is only necessary if not allready computed
box.updateMatrixWorld(true); // This might be necessary if box is moved

var boxMatrixInverse = new THREE.Matrix4().getInverse(box.matrixWorld);

var inverseBox = box.clone();
var inversePoint = point.clone();

inverseBox.applyMatrix(boxMatrixInverse);
inversePoint.applyMatrix4(boxMatrixInverse);

var bb = new THREE.Box3().setFromObject(inverseBox);

var isInside = bb.containsPoint(inversePoint);

这是一个正在运行的演示:https://jsfiddle.net/holgerl/q0z979uy/