首页 / three.js / API 文档
SphereGeometry
先看结论
球体几何。按经纬度切片生成顶点,可以只取一部分经度或纬度范围, 得到半球、球冠或球带。
new THREE.SphereGeometry(radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength)
构造参数
| 参数 | 默认 | 说明 |
|---|---|---|
radius | 1 | 球半径 |
widthSegments | 32 | 经度方向分段数,最小 3 |
heightSegments | 16 | 纬度方向分段数,最小 2 |
phiStart | 0 | 起始经度,弧度 |
phiLength | 2π | 经度跨度,默认整圈 |
thetaStart | 0 | 起始纬度,0 为北极 |
thetaLength | π | 纬度跨度,π 为从北极到南极 |
示例:地球仪与半球
// 完整球体
const globe = new THREE.Mesh(
new THREE.SphereGeometry(100, 64, 32),
new THREE.MeshStandardMaterial({
map: earthTexture,
roughness: 0.9,
metalness: 0
})
);
scene.add(globe);
// 上半球,做穹顶
const dome = new THREE.Mesh(
new THREE.SphereGeometry(60, 48, 16, 0, Math.PI * 2, 0, Math.PI / 2),
new THREE.MeshBasicMaterial({
color: 0x6f9ed8,
side: THREE.DoubleSide,
transparent: true,
opacity: 0.35
})
);
dome.position.y = 0;
scene.add(dome);
UV 与贴图
widthSegments 沿经度展开 UV 的 U 方向,
heightSegments 对应 V 方向。经度分段越多,
东西方向的贴图越细腻;纬度分段决定南北方向的过渡。
球体两极的三角形会被压扁,贴图在极点附近出现收敛,这是等距柱状投影的固有现象。
分段数怎么定
| 用途 | 建议分段 |
|---|---|
| 远处的小球、标记 | 16 × 8 |
| 常规地球仪 | 48 × 24 到 64 × 32 |
| 近景、需要轮廓平滑 | 96 × 48 以上 |
顶点数按 widthSegments × heightSegments × 2 增长,
分段翻倍顶点数翻四倍。近景球体只占屏幕一小块时,提高分段收益很低。
半球的朝向
thetaStart: 0、thetaLength: π/2 得到的是上半球,
开口朝下。要得到朝上的碗形,把 thetaStart 设为
π/2、thetaLength 设为 π/2,
或者直接旋转整个网格。
球体内部要开双面。把相机放进球体内部时,默认的
FrontSide 会把球面剔除,看到的是透明背景。
材质设置 side: THREE.BackSide 才是正确的球幕做法。
经纬志(2026)。《SphereGeometry》。https://www.jingweizhi.com/three/api/sphere-geometry.html(访问日期 2026-11-03)。