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

BoxGeometry

先看结论

立方体几何。由宽、高、深三个尺寸生成,是建筑体块、设备外壳、 占位模型最常用的基础几何。

最后验证 2026-11-03 · three.js 0.160.0 · 更新 2026-10-29 · 引用本文
new THREE.BoxGeometry(width, height, depth, widthSegments, heightSegments, depthSegments)

构造参数

参数默认说明
width1X 方向尺寸
height1Y 方向尺寸
depth1Z 方向尺寸
widthSegments1X 方向分段数,最小 1
heightSegments1Y 方向分段数,最小 1
depthSegments1Z 方向分段数,最小 1

生成的属性

属性说明
position顶点位置,每面独立顶点,便于法线与 UV 分离
normal面法线,六个方向各自朝外
uv每面覆盖完整的 0 到 1 UV 区间
groups六个材质分组,顺序为右、左、上、下、前、后
index三角形索引

示例:带屋顶的建筑体块

const geometry = new THREE.BoxGeometry(16, 36, 12);

const wall = new THREE.MeshStandardMaterial({ color: 0xa8b2bd, roughness: 0.85 });
const roof = new THREE.MeshStandardMaterial({ color: 0x3f4a55, roughness: 0.6 });

// 六个面分别指定材质,未列出的位置沿用同一个
const mesh = new THREE.Mesh(geometry, [wall, wall, roof, wall, wall, wall]);
mesh.position.set(80, 18, -20);
mesh.castShadow = true;
mesh.receiveShadow = true;
scene.add(mesh);

分段数的用途

分段数大于 1 时,每个面被切成多块格子。单纯做直角体块不需要分段, 增加只会提高顶点数。需要以下效果时才调高:

  • 顶点位移或波浪动画:顶面需要足够多的顶点才能起伏。
  • 顶点色渐变:分段越多,颜色过渡越平滑。
  • 顶点着色器里按高度变形:分段决定了变形是否连续。

中心在几何中心

BoxGeometry 的原点在体块中心,不是底面。 想让建筑坐在地面上,位置高度要设为 height / 2, 否则会有一半埋进地里。需要原点在底面时, 创建后调用 geometry.translate(0, height / 2, 0)。

体块数量多时改用实例化。上千个尺寸相近的建筑用 InstancedMesh 共享一份 BoxGeometry, 通过矩阵控制每个实例的尺寸,比逐个创建网格省一个数量级的绘制调用。

引用本文

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