
Three.js几何体核心 API
几何体学习笔记
通用说明(所有 *Geometry 都继承自 BufferGeometry)
共有重要属性 / 方法:
attributes: 顶点属性集合(常见:position: BufferAttribute顶点位置(必有);normal: BufferAttribute法线(光照用);uv: BufferAttribute贴图坐标;- 对索引几何体还会有
index: BufferAttribute)。
boundingBox: Box3 | null、boundingSphere: Sphere | null:包围体(computeBoundingBox()/computeBoundingSphere()生成)。- 变换:
translate(x,y,z)/rotateX|Y|Z(rad)/scale(x,y,z)/center()。 - 索引:
toNonIndexed()(把索引几何体展开为非索引)、setIndex()、setAttribute(name, attr)。 - 其它:
drawRange(只绘制一部分)、dispose()(释放 GPU 资源)。 - 每个具体几何体通常还带
.parameters,保存构造参数快照(便于调试/序列化)。
BoxGeometry
签名:new THREE.BoxGeometry(width, height, depth, widthSegments?, heightSegments?, depthSegments?)
参数
width/height/depth: 盒子尺寸。widthSegments/heightSegments/depthSegments: 各方向分段数,越大越细(默认 1)。
常见属性:.parameters = { width, height, depth, widthSegments, heightSegments, depthSegments }
用法建议:增加分段便于形变/顶点着色/法线更精细。
代码示例
CapsuleGeometry
签名:new THREE.CapsuleGeometry(radius?, length?, capSegments?, radialSegments?)
参数
radius: 半球帽和圆柱过渡的半径。length: 中间圆柱段长度(不含两端半球)。capSegments: 帽部(半球)分段。radialSegments: 周向分段。
属性:.parameters = { radius, length, capSegments, radialSegments }
建议:角色碰撞体/科幻胶囊造型常用。
示例
CircleGeometry
签名:new THREE.CircleGeometry(radius, segments?, thetaStart?, thetaLength?)
参数
radius: 半径。segments: 圆周细分(≥3)。thetaStart: 起始角(弧度)。thetaLength: 扫掠角(弧度,默认2π)。
属性:.parameters = { radius, segments, thetaStart, thetaLength }
示例
ConeGeometry
签名:new THREE.ConeGeometry(radius, height, radialSegments?, heightSegments?, openEnded?, thetaStart?, thetaLength?)
参数
radius: 底面半径。height: 高。radialSegments: 底面周向分段。heightSegments: 高度方向分段。openEnded: 是否开口(默认false,即有底面)。thetaStart/thetaLength: 切扇角范围。
属性:.parameters = {...}
示例
CylinderGeometry
签名:new THREE.CylinderGeometry(radiusTop, radiusBottom, height, radialSegments?, heightSegments?, openEnded?, thetaStart?, thetaLength?)
参数
radiusTop/radiusBottom: 上/下半径(上 0 即圆锥)。height、radialSegments、heightSegments:同上。openEnded: 是否两端开口。thetaStart/thetaLength: 角范围。
示例
DodecahedronGeometry(十二面体)
签名:new THREE.DodecahedronGeometry(radius?, detail?)
参数
radius: 外接球半径。detail: 细分层级(>0 会三角化并细分)。
示例
EdgesGeometry
签名:new THREE.EdgesGeometry(geometry, thresholdAngle?)
作用:从输入几何体抽取可见边线(相邻面的夹角大于阈值)。
参数
geometry: 源几何体。thresholdAngle: 阈值角度(度),默认 1。
产物:几何顶点线段,可配 LineSegments 使用。
示例
ExtrudeGeometry
签名:new THREE.ExtrudeGeometry(shapes, options)
作用:将 2D 形状沿法线方向拉伸为 3D。
核心参数(options)
steps: 沿拉伸方向的分段。depth: 拉伸深度(若无extrudePath)。bevelEnabled: 倒角开关。bevelThickness: 倒角厚度。bevelSize: 倒角大小(边向内收)。bevelOffset: 倒角偏移(有助于防止自交)。bevelSegments: 倒角分段。curveSegments: 形状曲线采样分段。extrudePath: 沿路径(Curve)挤出(取代depth)。UVGenerator: 自定义 UV 生成器。
示例:挤出一个“心形”并倒角
IcosahedronGeometry(二十面体)
签名:new THREE.IcosahedronGeometry(radius?, detail?)
参数同十二面体。
示例
LatheGeometry(车削体)
签名:new THREE.LatheGeometry(points, segments?, phiStart?, phiLength?)
作用:将一条 二维轮廓线(points: Vector2[]) 围绕 Y 轴 旋转生成实体。
参数
points: 轮廓从下到上的Vector2(x, y)点列(x 为半径)。segments: 周向分段。phiStart/phiLength: 旋转范围(弧度)。
示例:花瓶
OctahedronGeometry(八面体)
签名:new THREE.OctahedronGeometry(radius?, detail?)
示例
PlaneGeometry
签名:new THREE.PlaneGeometry(width, height, widthSegments?, heightSegments?)
参数
width/height: 平面尺寸。widthSegments/heightSegments: 细分(用于波浪/形变)。
示例
PolyhedronGeometry
签名:new THREE.PolyhedronGeometry(vertices, indices, radius?, detail?)
作用:用自定义顶点/面索引定义多面体,再按 radius 归一化到外接球,detail 细分。
参数
vertices: 扁平数组[x1,y1,z1, x2,y2,z2, ...]。indices: 扁平三元组数组[a,b,c, ...](顶点索引)。radius/detail: 同上。
示例:自定义金字塔(四角锥)
RingGeometry
签名:new THREE.RingGeometry(innerRadius, outerRadius, thetaSegments?, phiSegments?, thetaStart?, thetaLength?)
参数
innerRadius/outerRadius: 内/外半径。thetaSegments: 圆环周向分段。phiSegments: 径向分段(由内向外)。thetaStart/thetaLength: 扇形范围。
示例
ShapeGeometry
签名:new THREE.ShapeGeometry(shapes, curveSegments?)
作用:把 2D Shape 直接三角化成平面网格(与 ExtrudeGeometry 区别:不拉伸)。
参数
shapes:Shape | Shape[]。curveSegments: 采样密度。
示例
SphereGeometry
签名:new THREE.SphereGeometry(radius, widthSegments?, heightSegments?, phiStart?, phiLength?, thetaStart?, thetaLength?)
参数
radius:半径。widthSegments:经线(水平环)分段。heightSegments:纬线(垂直)分段。phiStart/phiLength:水平角范围(0→2π)。thetaStart/thetaLength:垂直角范围(0→π)。
示例
TetrahedronGeometry(四面体)
签名:new THREE.TetrahedronGeometry(radius?, detail?)
参数同其他正多面体。
示例
TorusGeometry(圆环)
签名:new THREE.TorusGeometry(radius, tube?, radialSegments?, tubularSegments?, arc?)
参数
radius: 圆环“中心圈”的半径。tube: 管道半径(截面半径)。radialSegments: 管道截面上的分段数。tubularSegments: 沿环方向的分段数。arc: 绘制弧度(默认2π,可绘半环)。
示例
TorusKnotGeometry(圆环结)
签名:new THREE.TorusKnotGeometry(radius?, tube?, tubularSegments?, radialSegments?, p?, q?)
参数
radius/tube/tubularSegments/radialSegments:同TorusGeometry。p、q:结的绕行参数(沿环与绕自身的次数,互素时形成漂亮结)。
示例
TubeGeometry
签名:new THREE.TubeGeometry(path, tubularSegments?, radius?, radialSegments?, closed?)
作用:沿三维曲线 path: Curve<Vector3> 拉出一条“管”。
参数
path: 任意THREE.Curve(常用CatmullRomCurve3)。tubularSegments: 沿曲线方向分段数。radius: 管半径。radialSegments: 管道截面分段。closed: 曲线是否闭合。
示例:Catmull-Rom 曲线管
WireframeGeometry
签名:new THREE.WireframeGeometry(geometry)
作用:把任意面的几何体转换为线框几何(所有三角边)。
对比 EdgesGeometry:
WireframeGeometry:把所有边都画出来;EdgesGeometry:只画明显的轮廓/锐边(按阈值角过滤)。
示例
额外示例:通用操作合集(背口诀)
快速择器(什么时候用哪一个?)
- 规则体:
Box / Sphere / Plane / Cylinder / Cone / Torus / TorusKnot / 各种 *hedron。 - 曲线/路径:
Tube (沿曲线)、Lathe (旋转生成)。 - 2D → 3D:
Shape (平面)、Extrude (拉伸/沿路挤出)、Ring / Circle。 - 线框/轮廓:
Wireframe / Edges。 - 自定义:
Polyhedron(顶点+索引自由)。

