Three.js 入门实战(一):基础知识附带基础演示代码
一、简单理解什么是 Three.js简单来说Three.js 是WebGL 的高层封装 3D 图形引擎。原生 WebGL 需要编写大量底层着色器代码、处理复杂的图形底层逻辑入门门槛极高。而 Three.js 帮我们封装好了所有底层操作让我们只用简单的 JS 代码就能在浏览器中快速搭建 3D 场景、模型、动画和交互效果是目前网页 3D 开发的主流工具。二、Three.js 核心基石万能三件套所有 Three.js 项目无论简单还是复杂核心骨架永远由场景、相机、渲染器三部分组成也是我们入门必须掌握的第一个知识点。1. 场景 Scene舞台可以把场景理解为一个3D 容器、虚拟舞台我们创建的所有模型、灯光、辅助线等元素都需要添加到场景中才会被渲染显示。2. 相机 Camera眼睛相机相当于我们的眼睛决定了我们以什么角度、什么视野观看 3D 场景。没有相机我们就看不到场景里的任何内容。3. 渲染器 Renderer画师渲染器的作用是将 3D 场景和相机视角转化为浏览器可识别的 2D 画面绘制在画布上展示给用户。这是所有 Three.js 项目的通用起步代码// 1. 创建场景 const scene new THREE.Scene() // 2. 创建透视相机 const camera new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000) camera.position.set(4.25, 1.4, -4.5) // 3. 创建渲染器开启抗锯齿 const renderer new THREE.WebGLRenderer({ antialias: true }) renderer.setSize(window.innerWidth, window.innerHeight) document.body.appendChild(renderer.domElement) // 渲染画面 renderer.render(scene, camera)三、相机详解两种主流相机用法Three.js 最常用的只有两种相机适配不同的开发场景1. 透视相机 PerspectiveCamera3D 场景首选模拟人眼视觉效果具备近大远小的透视感所有 3D 展厅、模型展示、3D 游戏场景都用这款相机。参数说明视野角度、画布宽高比、近裁剪面、远裁剪面控制场景渲染范围2. 正交相机 OrthographicCamera2D 场景首选无透视效果物体远近大小一致没有近大远小主要用于 2D 绘图、UI 界面、平面图展示等场景。四、灯光系统3D 场景的氛围感核心Three.js 中没有灯光场景就是一片漆黑物体无法展示材质和立体效果。入门掌握四种常用光源即可1. 环境光 AmbientLight均匀照亮整个场景无方向、不产生阴影主要用于提亮场景暗部避免画面死黑一般作为基础打底光源。2. 平行光 DirectionalLight模拟太阳光效果光线平行照射方向固定可产生阴影适合户外、自然光场景。3. 点光源 PointLight模拟灯泡、烛火从一个点向四周全方位发散光线可设置照射距离、亮度。4. 聚光灯 SpotLight模拟舞台射灯、展厅顶灯呈圆锥形光束照射支持边缘柔化、阴影虚化是 3D 展厅、产品展示的首选主光源。//环境光均匀照亮全场 const ambient new THREE.AmbientLight(0xffffff,0.4) scene.add(ambient) //平行光模拟太阳光 const dirLight new THREE.DirectionalLight(0xffffff,0.6) dirLight.position.set(5,10,5) dirLight.castShadow true scene.add(dirLight) //点光源灯泡式发散光源 const pointLight new THREE.PointLight(0xffffff,0.5) pointLight.position.set(3,3,3) scene.add(pointLight) //聚光灯锥形定向光束展厅展品打光首选 const spotLight new THREE.SpotLight(0xffffff,0.8) spotLight.position.set(0,8,0) spotLight.castShadow true scene.add(spotLight)五、3D 物体核心几何体 材质 纹理所有 3D 模型物体都是由几何体 材质组合而成纹理是物体的表层贴图决定最终视觉效果。1. 几何体 Geometry决定物体的形状结构Three.js 内置了立方体、球体、平面、圆柱体等基础几何体也支持自定义模型几何体外部导入 GLB/GLTF 模型。2. 材质 Material决定物体的外观质感、颜色、反光、透光效果入门常用材质从基础到写实排序MeshBasicMaterial基础材质无光影不受灯光影响MeshLambertMaterial漫反射材质有基础光影无高光MeshPhongMaterial高光材质可模拟金属、塑料高光效果MeshStandardMaterial标准物理材质支持金属度、粗糙度写实效果更好MeshPhysicalMaterial高阶物理材质支持清漆、透光、折射可模拟车漆、玻璃、玉石等真实质感3. 纹理 Texture就是贴在物体表面的图片素材用来丰富物体细节比如车身纹理、地面纹理、墙面贴图等通过 TextureLoader 加载使用。//基础纯色材质 const baseMat new THREE.MeshBasicMaterial({color:0x2288ff}) //标准物理材质金属、粗糙度配置 const metalMat new THREE.MeshPhysicalMaterial({ color:0xcccccc, metalness:1, roughness:0.2, clearcoat:1, transmission:0 }) //玻璃透光材质 const glassMat new THREE.MeshPhysicalMaterial({ color:0xffffff, metalness:0, roughness:0, transmission:1 }) //纹理贴图加载 import {TextureLoader} from three const textureLoader new TextureLoader() const wallTexture textureLoader.load(./wall.jpg)六、实用辅助工具开发调试必备这些工具不影响最终线上效果但能极大提升开发调试效率是 Three.js 开发的常用标配OrbitControls 轨道控制器支持鼠标拖拽旋转视角、滚轮缩放场景自由查看 3D 模型lil-gui 调试面板可视化实时修改模型颜色、灯光强度、位置等参数不用反复改代码刷新AxesHelper 坐标轴辅助线展示 X/Y/Z 三轴方向快速定位物体位置GridHelper 网格辅助线展示地面网格方便对齐物体位置七、动画与交互核心知识点1. 渲染循环静态场景只需渲染一次动画、动态交互场景需要通过 requestAnimationFrame 开启循环渲染实时更新画面。2. Tween.js 补间动画原生 JS 动画书写繁琐、效果生硬Tween.js 是专业的补间动画库可实现位置、旋转、大小的平滑过渡动画适配 Three.js 所有动态效果。3. Raycaster 射线检测3D 场景交互核心通过鼠标点击位置发射射线检测命中的 3D 物体实现点击选中、点击触发动画等交互效果。八、适配与优化基础1. 窗口响应式浏览器窗口大小变化时需要实时更新相机宽高比和渲染器尺寸避免 3D 画面拉伸变形。2. 阴影优化Three.js 阴影默认精度较低可通过调整阴影分辨率、偏移参数解决阴影模糊、条纹失真问题提升场景质感。九、学习总结以上就是 Three.js 入门阶段的全部核心理论知识整体逻辑非常清晰三件套搭建基础场景 → 灯光材质塑造视觉质感 → 辅助工具优化开发体验 → 动画射线实现交互 → 响应式适配页面。单纯看理论很难彻底掌握下一篇我会分享完整的 3D 兰博基尼汽车展厅实战项目把这篇所有知识点全部落地手把手实现模型加载、材质调试、灯光氛围、开关门动画、视角切换、点击交互等完整功能感兴趣的小伙伴可以持续关注参考资源Three.js 官方文档https://threejs.org/docs/Tween.js 动画库https://github.com/tweenjs/tween.js免费 3D 模型资源https://sketchfab.com/

相关新闻

3分钟解锁视频硬字幕提取:videocr让你的视频文字“活“起来

3分钟解锁视频硬字幕提取:videocr让你的视频文字“活“起来

3分钟解锁视频硬字幕提取:videocr让你的视频文字"活"起来 【免费下载链接】videocr Extract hardcoded subtitles from videos using machine learning 项目地址: https://gitcode.com/gh_mirrors/vi/videocr 还在为视频中的硬编码字幕无法编辑而烦…

2026/10/14 11:59:48 阅读更多 →
CDA一级认证备考指南:数据分析师入门攻略

CDA一级认证备考指南:数据分析师入门攻略

1. 项目概述 作为一名数据科学与大数据技术专业的大二学生,我在上学期成功通过了CDA数据分析师一级认证考试。这个证书在业内认可度颇高,对于在校生来说是个不错的加分项。记得当时备考过程中踩了不少坑,也积累了一些实战经验,今天…

2026/10/13 21:00:32 阅读更多 →
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据

Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据

使用 Codex 编写列表接口时,分页几乎是最常见的需求之一。 刚开始数据只有几百条时,下面这种写法通常没有明显问题: SELECT * FROM orders ORDER BY created_at DESC LIMIT 20 OFFSET 0;第二页: LIMIT 20 OFFSET 20;第三页&…

2026/10/10 13:27:37 阅读更多 →

最新新闻

Photoshop移动UI设计从入门到精通:画布搭建、控件绘制与切图导出全流程

Photoshop移动UI设计从入门到精通:画布搭建、控件绘制与切图导出全流程

简介:这份PPT讲义面向移动UI设计初学者与希望系统提升的设计师,围绕Photoshop在移动端界面设计中的应用展开,帮助读者从零建立移动UI设计认知并逐步进阶。内容按模块递进:新手导航讲解手机与平板界面差异、iOS/Android/Windows Ph…

2026/10/14 12:58:58 阅读更多 →
MCP Python SDK:模型上下文协议的高效实现与应用

MCP Python SDK:模型上下文协议的高效实现与应用

1. 项目概述:MCP Python SDK 是什么? 在当今数据驱动的技术环境中,模型上下文协议(Model Context Protocol,简称MCP)正逐渐成为连接机器学习模型与实际业务场景的关键桥梁。作为一名长期从事AI工程化的开发…

2026/10/14 12:58:58 阅读更多 →
PyInstaller 3.2.1实战:老版本打包器解决Python旧工程分发难题

PyInstaller 3.2.1实战:老版本打包器解决Python旧工程分发难题

简介:PyInstaller 3.2.1是一份面向Python开发者的跨平台打包工具资源,旨在解决Python程序在无解释器环境下的分发难题,适合需要将脚本封装为独立可执行文件的入门及进阶用户。压缩包内含790个文件,约3.01MB,以py源码、…

2026/10/14 12:58:58 阅读更多 →
微信小程序在线选课系统开发实战

微信小程序在线选课系统开发实战

1. 项目背景与核心价值微信小程序在线选课系统是当前教育信息化领域的热门解决方案。作为一名参与过多个校园信息化项目的开发者,我发现传统选课系统存在几个痛点:学生需要在特定时间段挤爆机房电脑、移动端适配差、高峰期服务器容易崩溃。而基于微信小程…

2026/10/14 12:58:58 阅读更多 →
一次数据建模返工,彻底理解资源-事件-参与者(REA)模型

一次数据建模返工,彻底理解资源-事件-参与者(REA)模型

从 REA 说起:一次数据建模的“返工”让我彻底理解了资源-事件-参与者模型去年年中,团队接手了一个库存管理的小型系统改造。起初我看了一眼旧数据库结构,订单表、商品表、库存表、支付表,各自挂着外键,看似井井有条。业…

2026/10/14 12:58:58 阅读更多 →
贷款违约预测实战入门:从数据处理到评分卡全流程解析

贷款违约预测实战入门:从数据处理到评分卡全流程解析

简介:面向零基础金融风控学习者,提供一份基于 Python 的贷款违约预测完整项目,聚焦个人信贷场景中的违约风险识别,适合作为课程设计或期末大作业提交。项目已获导师指导,并得到 97 分高分评价,代码与说明材…

2026/10/14 12:57:57 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →