Three.js:如何确定一个点是否在一个盒子里?

46 阅读1分钟

通常一个点的坐标是在世界空间中,要判断它是否在盒子内,需要将点的坐标转换为和盒子一样的局部坐标,通过将点的世界坐标乘以盒子的逆变换矩阵来实现。

//得到盒子的逆变换矩阵
const inverseMatrix = new THREE.Matrix4().copy(box.matrixWorld()).invert();
//将世界坐标下的点转换为盒子的局部坐标内
const localPoint=point.clone().applyMatrix4(inverseMatrix);

经过此转换后,我们得到相对于盒子局部坐标的点坐标。接着只需判断点的局部坐标是否在盒子框的边界尺寸内(与框的最小值和最大值进行比较)。如果所有坐标(x,y,z)都在框的边界内,则点在盒子内。

//在局部空间中获取盒子的边界框
const boxGeometry=box.geometry;
boxGeometry.computeBoundingBox();
const bbox=boxGeometry.bindingBox;
//检查该点是否在界限内
bbox.containsPoint(point);