Three.js 是一个基于原生WebGL封装的JavaScript 3D图形库,它让开发者在浏览器中创建和展示3D内容变得更加简单高效。
javascript
// Three.js 在技术栈中的位置
浏览器环境
↓
WebGL API (底层,复杂)
↓
Three.js (中层,简化)
↓
应用层 (业务逻辑)
跨平台:基于Web标准,支持所有现代浏览器
开源免费:MIT许可证,活跃的社区支持
功能丰富:内置几何体、材质、光照、相机等完整3D功能
易于学习:相比原生WebGL,API更加直观和友好
性能优秀:充分利用GPU加速,支持硬件渲染
javascript
// 最简单的Three.js应用结构
import * as THREE from 'three';
// 1. 创建场景(容器)
const scene = new THREE.Scene();
// 2. 创建相机(视角)
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
// 3. 创建渲染器(画布)
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// 4. 创建3D物体
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
// 5. 渲染循环
function animate() {
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();

完整的3D渲染管线封装
丰富的内置对象(100+种几何体、材质)
物理引擎集成(Cannon.js、Ammo.js)
后期处理效果(景深、光晕、SSAO等)
模型格式支持(glTF、FBX、OBJ、STL等)
动画系统(骨骼动画、变形动画)
VR/AR支持(WebXR API)
javascript
// Three.js的性能优化特性
// 1. 自动批处理
const mergedGeometry = THREE.BufferGeometryUtils.mergeBufferGeometries(geometries);
// 2. 实例化渲染
const instancedMesh = new THREE.InstancedMesh(geometry, material, count);
// 3. 细节层次(LOD)
const lod = new THREE.LOD();
lod.addLevel(meshHigh, 0);
lod.addLevel(meshMedium, 50);
lod.addLevel(meshLow, 100);
// 4. 视锥体剔除
frustumCulled: true // 默认开启
特点:将复杂数据以直观的3D形式展现
javascript
// 3D数据图表示例
class DataVisualization3D {
constructor() {
// 3D柱状图
this.create3DBarChart(data);
// 3D网络拓扑图
this.createNetworkTopology(nodes, edges);
// 地理数据可视化
this.create3DMap(geoData);
// 实时数据流
this.createRealTimeDataFlow();
}
}
实际应用:
金融交易数据实时展示
网络攻击态势感知系统
智慧城市交通流量可视化
医疗影像3D重建
特点:提供沉浸式产品浏览体验
javascript
class ProductViewer3D {
constructor(productModel) {
// 360度旋转查看
this.setupOrbitControls();
// 材质切换
this.setupMaterialSwitching();
// 产品拆解展示
this.setupExplodedView();
// AR预览
this.setupARView();
}
}
实际应用:
汽车配置器(颜色、轮毂、内饰切换)
家具AR摆放预览
珠宝360度展示
房地产虚拟看房
特点:浏览器中运行3D游戏和交互体验
javascript
class SimpleGameEngine {
constructor() {
// 物理系统
this.physicsWorld = new CANNON.World();
// 角色控制器
this.characterController = new FirstPersonController();
// 动画状态机
this.animationMixer = new THREE.AnimationMixer(model);
// 音效系统
this.audioListener = new THREE.AudioListener();
// UI系统
this.setupGameUI();
}
}
实际应用:
休闲网页游戏
互动式故事讲述
虚拟博物馆/展览
教育类游戏
特点:提供直观的3D学习环境
javascript
class EducationalSimulation {
constructor() {
// 分子结构可视化
this.createMoleculeViewer();
// 历史场景重建
this.createHistoricalScene();
// 机械原理演示
this.createMechanicalSimulation();
// 交互式实验
this.setupInteractiveExperiment();
}
}
实际应用:
化学分子模型
物理现象模拟
人体解剖学习
工程制图教学
特点:在浏览器中进行3D设计和预览
javascript
class IndustrialViewer {
constructor() {
// CAD模型查看
this.loadCADModel('assembly.stl');
// 尺寸标注
this.setupMeasurementTools();
// 装配动画
this.createAssemblyAnimation();
// 有限元分析可视化
this.visualizeFEAResults();
// 协同评审
this.setupCollaboration();
}
}
实际应用:
机械零件在线查看
建筑BIM模型展示
工厂布局规划
产品装配指导
特点:基于WebXR的跨平台沉浸式体验
javascript
class WebXRExperience {
constructor() {
// 检测XR支持
if ('xr' in navigator) {
// VR场景设置
this.setupVRScene();
// 手柄交互
this.setupControllerInteraction();
// AR标记识别
this.setupImageTracking();
// 空间锚点
this.setupAnchors();
}
}
}
实际应用:
虚拟展厅
远程协助AR
虚拟试衣间
室内导航AR
特点:3D建筑可视化和交互
javascript
class ArchitectureViewer {
constructor(buildingModel) {
// BIM模型加载
this.loadIFCModel();
// 楼层切换
this.setupFloorNavigation();
// 材质信息查询
this.setupMaterialInfo();
// 日照分析
this.setupSunStudy();
// 漫游模式
this.setupWalkthrough();
}
}
实际应用:
建筑方案展示
室内设计预览
施工进度模拟
房产营销虚拟样板间
Google Earth Studio - 基于Three.js的地理可视化
Autodesk Viewer - 在线CAD查看器
IKEA Place - AR家具摆放应用
NASA Eyes - 太空探索可视化
Bruno Simon Portfolio - 创意交互作品集
BMW Configurator - 汽车在线配置器
Sketchfab - 3D模型在线展示平台
text
典型Three.js应用性能指标:
- 移动端:30-60 FPS (中低复杂度场景)
- 桌面端:60-120 FPS (中高复杂度场景)
- 渲染延迟:< 16ms (60FPS目标)
- 内存使用:50-500MB (取决于场景复杂度)
- 加载时间:2-10秒 (包含模型加载)
✅ 适合使用Three.js的情况:
需要快速开发3D可视化应用
团队缺乏WebGL/OpenGL专家
需要跨平台兼容性
项目周期短,需要快速原型
已有JavaScript/前端开发经验
❌ 可能需要其他方案的情况:
超大规模工业级CAD应用(考虑Unity/Unreal)
需要物理模拟的复杂游戏(考虑专业游戏引擎)
对性能要求极高的专业可视化(考虑原生WebGL)
需要大量定制渲染管线

javascript
// 开发效率对比示例
// Three.js (约30行代码)
const scene = new THREE.Scene();
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
renderer.render(scene, camera);
// 原生WebGL (约300行代码)
// 需要手动:编译着色器、设置缓冲区、
// 绑定属性、设置uniform、绘制调用等
WebGPU集成:下一代图形API支持
AI增强:智能模型优化和生成
云渲染:复杂场景的云端计算
实时协同:多用户同时编辑和查看
物理引擎深度集成:更真实的模拟效果
元宇宙:基于Web的虚拟空间
数字孪生:物理世界的数字复制
Web3可视化:区块链数据3D展示
虚拟制作:影视和直播中的实时3D
远程协作:基于3D的远程工作空间
text
初学者路线:
1. Three.js官方文档和示例
2. 基础概念:场景、相机、渲染器
3. 核心对象:几何体、材质、光照
4. 交互与控制:控制器、射线检测
5. 性能优化:合并、实例化、LOD
6. 高级主题:着色器、后期处理