当前位置: 首页 > news >正文

Three.js知识框架

一、Three.js 基础概念

1. Three.js 简介

  • 是什么?

    • 基于 WebGL 的 3D JavaScript 库,用于在浏览器中渲染 3D 场景。

  • 核心优势

    • 简化 WebGL 的复杂 API,提供高层封装。

    • 跨平台(支持桌面和移动端)。

  • 适用场景

    • 3D 可视化、游戏开发、VR/AR、产品展示等。

2. 核心三要素

  • 场景(Scene)

    • 3D 世界的容器,包含所有对象(模型、光源、相机等)。

  • 相机(Camera)

    • 定义视图的观察角度(透视相机 PerspectiveCamera / 正交相机 OrthographicCamera)。

  • 渲染器(Renderer)

    • 将场景和相机结合,输出到 HTML 画布(WebGLRenderer)。

3. 开发环境搭建

  • CDN 引入

    <script src="https://cdn.jsdelivr.net/npm/three@0.132.2/build/three.min.js"></script>

  • npm 安装

    npm install three

  • 基础代码结构

    // 1. 创建场景、相机、渲染器
    const scene = new THREE.Scene();
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
    const renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);// 2. 添加物体(立方体)
    const geometry = new THREE.BoxGeometry();
    const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
    const cube = new THREE.Mesh(geometry, material);
    scene.add(cube);// 3. 渲染循环
    function animate() {requestAnimationFrame(animate);cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render(scene, camera);
    }
    animate();


二、Three.js 核心模块

4. 几何体(Geometry)

  • 内置几何体

    • BoxGeometry(立方体)、SphereGeometry(球体)、CylinderGeometry(圆柱体)。

  • 自定义几何体

    • 使用 BufferGeometry 和顶点数据手动创建。

5. 材质(Material)

  • 常用材质

    • MeshBasicMaterial(基础材质,不受光照影响)。

    • MeshPhongMaterial(高光材质,受光照影响)。

    • MeshStandardMaterial(PBR 材质,支持金属度和粗糙度)。

  • 纹理贴图

    • TextureLoader 加载图片作为材质贴图:

      const texture = new THREE.TextureLoader().load('texture.jpg');
      const material = new THREE.MeshBasicMaterial({ map: texture });

6. 光源(Light)

  • 光源类型

    • AmbientLight(环境光,均匀照亮所有物体)。

    • DirectionalLight(平行光,模拟太阳光)。

    • PointLight(点光源,模拟灯泡)。

    • SpotLight(聚光灯,带锥形照射范围)。

7. 动画与交互

  • 动画循环

    • 使用 requestAnimationFrame 实现平滑动画。

  • 用户交互

    • 通过 Raycaster 实现物体点击检测:

      const raycaster = new THREE.Raycaster();
      const mouse = new THREE.Vector2();
      window.addEventListener('click', (event) => {mouse.x = (event.clientX / window.innerWidth) * 2 - 1;mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;raycaster.setFromCamera(mouse, camera);const intersects = raycaster.intersectObjects(scene.children);if (intersects.length > 0) console.log('点击了物体!');
      });


三、Three.js 进阶技术

8. 模型加载

  • 加载外部模型

    • 使用 GLTFLoader 加载 GLTF 格式(推荐):

      import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
      const loader = new GLTFLoader();
      loader.load('model.gltf', (gltf) => scene.add(gltf.scene));
    • 支持格式:GLTF、OBJ、FBX、STL 等。

9. 着色器(Shaders)

  • 自定义着色器

    • 通过 ShaderMaterial 编写 GLSL 代码:

      const material = new THREE.ShaderMaterial({vertexShader: `void main() { gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }`,fragmentShader: `void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }`
      });

10. 后期处理(Post-Processing)

  • 特效添加

    • 使用 EffectComposer 实现模糊、辉光等效果:

      import { EffectComposer, RenderPass, BloomEffect } from 'postprocessing';
      const composer = new EffectComposer(renderer);
      composer.addPass(new RenderPass(scene, camera));
      composer.addPass(new BloomEffect());

11. 性能优化

  • 减少绘制调用

    • 合并几何体(BufferGeometryUtils.mergeBufferGeometries)。

  • 使用 InstancedMesh

    • 批量渲染相同几何体(适合大量重复物体)。

  • LOD(Level of Detail)

    • 根据距离切换不同精度的模型。


四、Three.js 高级应用

12. VR/AR 支持

  • WebXR

    • 通过 WebXRManager 实现 VR 渲染:

      import { VRButton } from 'three/examples/jsm/webxr/VRButton';
      renderer.xr.enabled = true;
      document.body.appendChild(VRButton.createButton(renderer));

13. 物理引擎集成

  • Cannon.js / Ammo.js

    • 添加重力、碰撞检测:

      import * as CANNON from 'cannon-es';
      const world = new CANNON.World({ gravity: new CANNON.Vec3(0, -9.82, 0) });

14. 与其他库结合

  • dat.GUI

    • 快速创建调试控制面板:

      import * as dat from 'dat.gui';
      const gui = new dat.GUI();
      gui.add(cube.position, 'x', -5, 5).name('X 轴位置');


五、学习路线建议

1. 初级阶段(1-2 周)

  • 掌握 Three.js 核心三要素(Scene、Camera、Renderer)。

  • 熟悉基础几何体和材质。

  • 实现简单动画(旋转、平移)。

2. 中级阶段(1-2 个月)

  • 加载外部 3D 模型(GLTF)。

  • 添加交互(点击、拖拽)。

  • 学习光照和阴影。

3. 高级阶段(2-3 个月)

  • 编写自定义着色器(GLSL)。

  • 集成物理引擎(Cannon.js)。

  • 优化性能(InstancedMesh、LOD)。

4. 实战项目

  • 初级:3D 旋转立方体 + 交互。

  • 中级:3D 产品展示页(模型加载 + 光照)。

  • 高级:第一人称视角游戏(物理碰撞 + 动画)。


六、资源推荐

  • 官方文档

    • Three.js Docs

  • 学习平台

    • Three.js Journey(付费系统课程)

    • YouTube 免费教程(Bruno Simon、SimonDev)。

  • 模型资源

    • Sketchfab、TurboSquid。

通过这个知识框架,你可以逐步掌握 Three.js 的核心技术,并进阶到复杂 3D 应用的开发!

相关文章:

  • rhel8.1 无法安装应用(提示需要注册系统)
  • 多线程与线程互斥
  • sip协议栈--sip结构分析
  • 一文理解扩散模型(生成式AI模型)(2)
  • 编程的本质, 就是创造工具
  • 架构设计不合理,如何优化系统结构
  • 【Linux】多路转接epoll、Linux高并发I/O多路复用
  • 【Linux】基础指令(Ⅱ)
  • 第十九次博客打卡
  • 可变形卷积简介(Deformable Convolution)
  • vLLM - SamplingParams 参数
  • Linux服务之lvs集群与dr模式部署
  • Mathematics-2025《Semi-Supervised Clustering via Constraints Self-Learning》
  • 线程同步机制
  • FlashInfer - 测试的GPU H100 SXM、A100 PCIe、RTX 6000 Ada、RTX 4090
  • Docker 介绍与使用
  • Mysql 存储引擎
  • 系统漏洞扫描服务:维护网络安全的关键与服务原理?
  • 打卡DAY25
  • [Vue3]语法变动
  • 美F-35险被胡塞武装击中,损失增大让行动成“烂尾仗”
  • 娃哈哈:调整产销布局致部分工厂停工,布局新产线可实现自主生产,不排除推新品牌
  • 沧州低空经济起飞:飞行汽车开启千亿赛道,通用机场布局文旅体验
  • 商务部新闻发言人就暂停17家美国实体不可靠实体清单措施答记者问
  • 为惩戒“工贼”,美国编剧工会“痛下杀手”
  • 教育部:启动实施县中头雁教师岗位计划,支撑县中全面振兴