开源项目:Three.js 构建 3D 世界的工具库

🎮 1、简述

随着 Web 技术的发展,浏览器早已不再只是"展示文本和图片"的工具。
Three.js 让我们能够:

👉 直接在浏览器中构建 3D 场景、动画和交互体验。

从数据可视化、数字孪生,到 Web 游戏和 3D 展示,Three.js 已成为 Web 3D 的事实标准。


2、什么是 Three.js?

Three.js 是一个基于 WebGL 的开源 JavaScript 3D 引擎,它对底层 WebGL API 进行了高度封装,使开发者可以用更直观的方式创建 3D 内容。

📌 核心理念:

让 3D 编程像写普通前端代码一样简单。

2.1 Three.js 能做什么?

  • 🌍 3D 场景与动画
  • 📊 三维数据可视化
  • 🏗️ 数字孪生 / 工业可视化
  • 🎮 Web 游戏
  • 🧠 教学 / 科普交互

2.2 核心概念速览

在 Three.js 中,所有内容都围绕这 5 个核心对象展开:

概念 说明
Scene 场景(世界)
Camera 摄像机
Renderer 渲染器
Mesh 网格(几何体 + 材质)
Light 光源

📌 记住一句话:

Scene + Camera + Renderer = 可见的 3D 世界


3、安装 Three.js

方式一:使用 NPM(推荐)

bash 复制代码
npm install three

在项目中使用:

js 复制代码
import * as THREE from 'three';

方式二:使用 CDN(快速体验)

html 复制代码
<script src="https://unpkg.com/three@latest/build/three.min.js"></script>

适合 Demo / 教学场景。


4、基础引用

1️⃣ 基础 HTML

html 复制代码
<body>
  <script type="module" src="main.js"></script>
</body>

或者引用线上的Three.js模块库

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <title>Three.js Demo</title>
  <style>
    body { margin: 0; overflow: hidden; }
  </style>
</head>
<body>
<script type="module">
  import * as THREE from 'https://unpkg.com/three@0.160.0/build/three.module.js';

  // 1. 场景
  const scene = new THREE.Scene();

  // 2. 相机
  const camera = new THREE.PerspectiveCamera(
    75,
    window.innerWidth / window.innerHeight,
    0.1,
    1000
  );
  camera.position.z = 5;

  // 3. 渲染器
  const renderer = new THREE.WebGLRenderer();
  renderer.setSize(window.innerWidth, window.innerHeight);
  document.body.appendChild(renderer.domElement);

  // 4. 几何体 + 材质
  const geometry = new THREE.BoxGeometry();
  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();
</script>
</body>
</html>

2️⃣ main.js

js 复制代码
import * as THREE from 'three';

// 场景
const scene = new THREE.Scene();

// 摄像机
const camera = new THREE.PerspectiveCamera(
  75,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
);
camera.position.z = 5;

// 渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// 立方体
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

// 动画
function animate() {
  requestAnimationFrame(animate);
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.01;
  renderer.render(scene, camera);
}

animate();

🎉 打开浏览器即可看到一个旋转的 3D 立方体。


5、实践样例

5.1 添加光源与真实材质

使用标准材质(受光影响)
js 复制代码
const material = new THREE.MeshStandardMaterial({
  color: 0x2194ce,
  roughness: 0.4,
  metalness: 0.6
});
添加光源
js 复制代码
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(5, 5, 5);
scene.add(light);

📌 效果:

立方体出现真实的光照与阴影感。

5.2 加载 3D 模型(GLTF)

安装 Loader
js 复制代码
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
加载模型
js 复制代码
const loader = new GLTFLoader();

loader.load('/model/scene.gltf', (gltf) => {
  scene.add(gltf.scene);
});

📌 GLTF 是 Three.js 最推荐的模型格式。

5.3 添加控制器(OrbitControls)

让用户可以拖拽、缩放场景。

js 复制代码
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;

在动画中更新:

js 复制代码
controls.update();

📌 这是 90% Three.js 项目的标配组件。


6、应用场景

1️⃣ 数据可视化

  • 3D 地图
  • 网络拓扑
  • 时空数据展示

2️⃣ 数字孪生

  • 工厂 / 设备 3D 建模
  • 实时数据绑定
  • 状态可视化

3️⃣ Web 交互展示

  • 产品 3D 展示
  • 房屋 / 装修预览
  • 教育演示

7、总结

Three.js 让 Web 拥有了"第三维"。

👉 如果你会前端,就能写 3D

👉 如果你会 3D,就能上 Web

无论是数据可视化、数字孪生,还是创意交互,Three.js 都是最值得投入的 Web 3D 技术栈。

方案 适用场景
Three.js Web 3D 通用首选
Babylon.js 偏游戏
Unity WebGL 重型
Cesium 地理信息
相关推荐
Mahut1 小时前
我在 Mac 上做了个本地剪辑器
javascript·架构·产品
汉堡大王95271 小时前
GPT-6 上线 48 小时,我扒开了 Intelligent UI 的运行机制:DIL、沙箱 Worker 和一个 React 式协调器
前端·javascript·后端
hai_android1 小时前
Chat 聊天模块功能总结
前端·javascript·vue.js
独孤九剑打醒他2 小时前
【原创开源·修订版】源-栅-漏-栅-源横向双栅MOS:从“被误解的短路”到“电流路径多值逻辑与顶层供电架构”
前端·嵌入式硬件·架构·开源·硬件工程
创世虚拟世界2 小时前
我做了一个 3D 虚拟世界基底,基于这个再做 3D 虚拟世界或者元宇宙,会事半功倍
javascript·人工智能·3d·gitee·虚拟现实
Highcharts.js4 小时前
用Highcharts开发动态主从图表|双图联动的时间序列图表示例
javascript·数据库·信息可视化·highcharts·图表开发·动态图表
阿俊-全栈开发4 小时前
LikeShop 版本升级与备份:从旧版平滑迁移的完整步骤
jvm·数据库·oracle·开源·likeshop·likeshop开源商城
来自于狂人4 小时前
GitHub 开源趋势日报 | 2026年10月9日
开源·github
志尊宝4 小时前
Vue3 零基础每日笔记(076):防抖节流的正确使用——搜索框、按钮防重复提交、滚动监听
javascript·vue.js·笔记