Files
three-demos/README_3.md
2025-11-21 13:56:24 +08:00

86 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Three.js 图元 (Primitives) 核心知识点总结
**来源文档**: [Three.js Manual - Primitives](https://threejs.org/manual/#zh/primitives)
---
## 1. 什么是图元 (Primitives)
图元是 Three.js 内置的几何体形状库。
* **核心定义**:它们是预先定义好的几何体对象,不需要加载外部 3D 模型文件即可直接使用。
* **底层原理**:所有图元本质上都是 `BufferGeometry` 的子类。它们通过特定的数学算法和参数(如半径、长宽、分段数等)动态生成顶点数据。
* **主要用途**
* 快速搭建 3D 场景原型。
* 用于学习和测试 Three.js 功能。
* 构建不需要高精度建模的物体(如低多边形风格游戏)。
* 作为复杂组合物体的基础组件。
---
## 2. 图元分类详解
Three.js 提供了极其丰富的图元库,主要可以分为以下几类:
### A. 基础立体几何 (Basic 3D Shapes)
这是最常用的构建块:
* **BoxGeometry (立方体)**:定义长、宽、高。最基础的形状。
* **SphereGeometry (球体)**:通过经纬度分段数控制平滑度。
* **ConeGeometry (圆锥)**:支持定义底面半径和高度。
* **CylinderGeometry (圆柱)**:支持顶部和底部半径不同(可做成台形),支持顶部/底部开口或闭合。
* **TorusGeometry (圆环体)**:类似甜甜圈,由管道半径和圆环整体半径定义。
* **TorusKnotGeometry (环形结)**:一种复杂的扭结管状结构,常用于测试光照和材质效果。
### B. 平面几何 (2D Shapes)
虽然是 3D 引擎,但也常需要 2D 元素:
* **PlaneGeometry (平面)**:简单的矩形平面,常用于制作地面、墙壁或背景。
* **CircleGeometry (圆形)**:平面的圆。支持通过参数仅绘制扇形。
* **RingGeometry (圆环平面)**:中间有孔的平面圆环(类似垫圈)。
### C. 多面体 (Polyhedrons)
基于数学定义的正多面体,常用于特殊的几何风格设计:
* **TetrahedronGeometry (四面体)**由4个三角形组成的金字塔形。
* **OctahedronGeometry (八面体)**由8个三角形组成形似两个底对底的金字塔。
* **DodecahedronGeometry (十二面体)**由12个五边形组成。
* **IcosahedronGeometry (二十面体)**由20个三角形组成常用于近似模拟球体。
### D. 生成式/路径几何 (Generated Geometries)
基于路径或 2D 形状生成的复杂 3D 物体:
* **ExtrudeGeometry (挤压)**:将一个 2D 形状沿 Z 轴“拉伸”成 3D 物体支持倒角Beveling
* **LatheGeometry (车削)**:将一条曲线绕 Y 轴旋转生成物体(类似制作花瓶或酒杯)。
* **TubeGeometry (管道)**:让管道沿着一条指定的 3D 曲线路径生成。
* **ShapeGeometry**:将 2D 形状路径直接转换为三角网格平面(不进行挤压)。
* **EdgesGeometry**:仅显示几何体的边缘线框(辅助用)。
* **WireframeGeometry**:显示几何体的线框结构(比 Edges 更详细,包含所有三角形边)。
### E. 文本 (Text)
* **TextGeometry**根据字体文件JSON格式和字符串生成 3D 立体文字。
---
## 3. 关键属性与概念
在使用图元时,理解以下通用参数对于控制性能和外观至关重要:
**1. Segments (分段数)**
* **定义**:构成几何体的三角形数量密度。
* **影响**
* **高分段数** = 表面圆滑,看起来更像完美的圆/球,但内存占用高,渲染计算量大。
* **低分段数** = 棱角分明,呈现“低多边形 (Low-poly)” 风格,性能极佳。
**2. ThetaStart / ThetaLength (切片属性)**
* **定义**:用于圆形、圆柱、球体等旋转体。
* **用途**:控制绘制的起始角度和跨越角度。
* **应用**:可以用来制作扇形、半球、切开的蛋糕等形状,而不是完整的闭合体。
**3. RadiusTop / RadiusBottom (半径控制)**
* **定义**:主要用于圆柱体 (CylinderGeometry)。
* **用途**:分别控制顶部和底部的粗细。
* **应用**:如果将其中一个半径设为 0圆柱体就会变成圆锥体。
---
## 4. 总结
* Three.js 的图元系统非常灵活,通过简单的参数调整(特别是分段数),同一个图元可以表现出完全不同的视觉风格(从极简几何风到平滑写实风)。
* 在开发初期,建议优先使用这些图元代替复杂的外部模型,以提高开发效率。