经纬志
首页 / three.js / API 文档

Box3

先看结论

轴对齐包围盒。用两个对角点描述一块立方体空间, 用于快速排除、求整体范围、判断物体是否在视锥内。

最后验证 2026-11-03 · three.js 0.160.0 · 更新 2026-10-29 · 引用本文
new THREE.Box3(min, max)

构造参数

参数默认说明
min(+Infinity, +Infinity, +Infinity)最小角点
max(-Infinity, -Infinity, -Infinity)最大角点

默认值构成一个空盒:min 大于 max。 直接往空盒里 expandByPoint 会得到正确结果, 而手工赋值容易留下错误范围。

属性

属性说明
min最小角点,Vector3
max最大角点,Vector3
isBox3恒为 true

方法

方法说明
set(min, max)直接设置两个角点
makeEmpty()重置为空盒
isEmpty()是否为空盒
setFromArray(array)由顶点数组求范围
setFromBufferAttribute(attr)由位置属性求范围
setFromPoints(points)由点数组求范围
setFromObject(object, precise)按对象的几何与变换计算世界包围盒
setFromCenterAndSize(center, size)由中心与尺寸构造
expandByPoint(point)扩张到包含该点
expandByObject(object)扩张到包含该对象
expandByScalar(delta)各方向同时外扩
containsPoint(point)点是否在盒内
containsBox(box)是否完全包含另一个盒
intersectsBox(box)与另一个盒是否相交
intersectsSphere(sphere)与球是否相交
intersectsPlane(plane)与平面是否相交
clampPoint(point, target)把点夹到盒内最近的合法位置
distanceToPoint(point)到点的最短距离,点在内部时为 0
getBoundingSphere(target)转成包围球
getCenter(target)盒中心
getSize(target)盒尺寸
union(box)合并另一个盒
intersect(box)求交集,不相交时变为空盒
applyMatrix4(matrix)用变换矩阵改写盒,结果会重新轴对齐
translate(offset)整体平移
clone() / copy(box)复制

示例:求整个场景的范围

const box = new THREE.Box3();
box.setFromObject(scene);

const size = box.getSize(new THREE.Vector3());
const center = box.getCenter(new THREE.Vector3());
console.log('范围', size, '中心', center);

// 相机取景:按包围球自动定位
const sphere = box.getBoundingSphere(new THREE.Sphere());
const distance = sphere.radius / Math.tan(Math.PI * camera.fov / 360);
camera.position.copy(sphere.center).add(new THREE.Vector3(0, distance * 0.6, distance));
camera.lookAt(sphere.center);

setFromObject 的精确度

默认只累加对象与子对象的几何包围盒,几何本身是粗包围盒, 旋转后的模型范围会偏大。传 precise: true 改为遍历顶点,结果更准,但大模型上非常耗时。 只在导出、适配相机这类一次性计算里使用。

与视锥剔除的关系

Frustum.intersectsObject 内部取的是对象的包围球, 不是包围盒。包围球由几何体的 computeBoundingSphere 生成, 动态修改顶点后必须重新计算,否则剔除判断仍按旧范围, 物体会在屏幕边缘提前消失。

空盒参与运算会污染结果。union 与空盒合并后仍是原盒, 这通常没问题;但 intersect 遇到空盒立即变成空盒。 循环里求交前先用 isEmpty() 判断,能省掉大量无效计算。

引用本文

经纬志(2026)。《Box3》。https://www.jingweizhi.com/three/api/box3.html(访问日期 2026-11-03)。