10分钟Three.js基础教程:用threejs-skills吃透Scene、相机与Renderer

【免费下载链接】threejs-skills

项目地址:https://gitcode.com/gh_mirrors/th/threejs-skills
点击查看免费下载

学Three.js 基础总是卡在第一关?本文带你用开源项目threejs-skills这份"Three.js 技能包",在 10 分钟内吃透 3D 开发必备的三大核心:Scene(场景)、相机(Camera)与 Renderer(渲染器),从零搭出第一个会转的 3D 立方体。

为什么选 threejs-skills 学 Three.js 基础?

many 新手学 Three.js 的痛点是:官方文档很全,但不知道"先学什么、怎么写才规范"。threejs-skills 正是为此而生——它把 Three.js 的核心模块整理成 10 份精炼的SKILL.md 技能文档,每份都包含:

  • ✅ 最小可运行示例(Quick Start)
  • ✅ 准确的 API 说明与构造签名
  • ✅ 真实项目中的常见模式
  • ✅ 性能优化建议

其中与"场景、相机、渲染器"直接相关的就是 skills/threejs-fundamentals/SKILL.md,本文内容主要依据它整理。

一键获取 threejs-skills 技能包

整个仓库只有几份 Markdown 文件,clone 下来就能读,零依赖:

git clone https://gitcode.com/gh_mirrors/th/threejs-skills

如果你想让 AI 编程助手(如 Claude Code)自动加载这些技能,只需把skills/目录复制到~/.claude/skills/即可,详见 README.md 的 Installation 一节。

三大核心角色:Scene、相机与 Renderer

理解 Three.js,先记住一个类比:

核心类类比职责
THREE.Scene舞台装下所有 3D 对象、灯光、雾效
THREE.PerspectiveCamera观众的眼睛决定从哪个角度、多远、看多大范围
THREE.WebGLRenderer摄像机+投影幕把 Scene 用相机视角画成屏幕上的像素

三者缺一不可:渲染器拿着相机,去场景里"取景",最后输出画面。

Scene 场景:3D世界的"舞台"

Scene是所有 3D 对象的容器,创建它只要一行。除了放物体,它还管两件小事:

  • 背景:可以设纯色scene.background = new THREE.Color(0x000000),也可以换成天空盒纹理
  • 雾效:scene.fog = new THREE.Fog(0xffffff, 1, 100)能模拟远近遮挡,让大场景更有纵深感

这些细节都能在 skills/threejs-fundamentals/SKILL.md 的 Core Classes → Scene 小节找到完整写法。

相机 Camera:决定"怎么看"

最常用的是透视相机PerspectiveCamera,它模拟人眼"近大远小"的效果,有 4 个关键参数:

const camera = new THREE.PerspectiveCamera( 75, // fov:视野角度(度),越大越"广角" innerWidth / innerHeight, // aspect:画布宽高比 0.1, // near:近裁剪面,太近的东西会被裁掉 1000, // far:远裁剪面,太远的内容不渲染 );

💡 新手常踩的坑:near和far差距过大(比如 0.001 到 100000)会导致深度精度下降、画面闪烁,保持一个合理的比例即可。

如果做等距游戏、2.5D 场景,则换成正交相机OrthographicCamera——它没有透视变形,物体大小不随距离变化。多相机还有ArrayCamera(分屏)、CubeCamera(实时反射环境贴图),skills/threejs-fundamentals/SKILL.md 的 Cameras 部分都有现成示例。

WebGLRenderer:把3D"渲染"成像素

渲染器负责最终出图,新手需要记住四件事:

  1. 创建:new THREE.WebGLRenderer({ antialias: true }),开启抗锯齿画面更平滑
  2. 贴到页面:document.body.appendChild(renderer.domElement)
  3. 匹配屏幕:setSize()设置尺寸,setPixelRatio(Math.min(devicePixelRatio, 2))避免高分屏发虚
  4. 出图:每帧调用renderer.render(scene, camera)

进阶配置(色调映射toneMapping、阴影shadowMap、输出色彩空间outputColorSpace)见同一文档的 WebGLRenderer 小节。

10分钟上手:从零到第一个旋转立方体

把三大核心串起来,一个完整可运行的场景骨架长这样(完整版本见 skills/threejs-fundamentals/SKILL.md 开头的 Quick Start):

import * as THREE from "three"; // 1. 舞台 + 眼睛 + 渲染器 const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, innerWidth / innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(innerWidth, innerHeight); document.body.appendChild(renderer.domElement); // 2. 摆上一个绿色立方体 const cube = new THREE.Mesh( new THREE.BoxGeometry(1, 1, 1), new THREE.MeshStandardMaterial({ color: 0x00ff00 }) ); scene.add(cube); // 3. 补一盏环境光 + 一盏平行光,否则物体是全黑的 scene.add(new THREE.AmbientLight(0xffffff, 0.5)); const dirLight = new THREE.DirectionalLight(0xffffff, 1); dirLight.position.set(5, 5, 5); scene.add(dirLight); camera.position.z = 5; // 相机往后拉,让立方体进入视野 // 4. 动画循环 + 窗口缩放自适应 function animate() { requestAnimationFrame(animate); cube.rotation.x += 0.01; cube.rotation.y += 0.01; renderer.render(scene, camera); } animate(); window.addEventListener("resize", () => { camera.aspect = innerWidth / innerHeight; camera.updateProjectionMatrix(); // 改了 aspect 必须调用 renderer.setSize(innerWidth, innerHeight); });

⚠️ 两个高频坑:

  • 画面全黑→ 忘了加灯光。MeshStandardMaterial等标准材质必须靠光照才有颜色,快速排查可临时换MeshBasicMaterial。
  • 窗口一拉就变形→ 改camera.aspect后漏掉了camera.updateProjectionMatrix()。

坐标系与对象层级:少走弯路的两个知识

右手坐标系:X 向右、Y 向上、Z 朝向你

Three.js 使用右手坐标系:+X 向右、+Y 向上、+Z 朝向观察者(屏幕外)。拿不准方向时,加一个坐标轴辅助线一目了然:

scene.add(new THREE.AxesHelper(5)); // 红=X 绿=Y 蓝=Z

Object3D:万物皆可"父子"

Mesh、Light、Camera都继承自Object3D,统一拥有position、rotation、scale三个变换属性。利用父子层级可以把一组对象打包成整体:

const group = new THREE.Group(); group.add(头, 身体, 脚); group.rotation.y = Math.PI / 4; // 旋转整体,而不是逐个转 scene.add(group);

这套"舞台→层级→变换"的思路在 skills/threejs-fundamentals/SKILL.md 的 Object3D 与 Group 小节有完整 API 说明。

常见新手问题清单

症状大概率原因解决思路
黑屏/什么都看不到相机没看向物体、或没加光用camera.lookAt(0,0,0);先加AmbientLight
物体变形拉伸窗口缩放后没更新相机updateProjectionMatrix()不能省
高分屏画面发虚没设置像素比setPixelRatio(Math.min(devicePixelRatio, 2))
物体旋转忽快忽慢用帧数而非时间做增量用THREE.Clock的getDelta()
切换场景后内存涨几何体/材质没释放调用geometry.dispose()、material.dispose()

清理资源的正确姿势(Proper Cleanup)在 fundamentals 文档的 Common Patterns 一节,建议养成"加进场景就要会拆"的习惯。

下一步:threejs-skills 全家桶

基础打通后,这个仓库还有 9 份技能文档等你解锁:

模块内容路径
几何体内置形状、BufferGeometry、实例化渲染skills/threejs-geometry/SKILL.md
材质PBR 材质、Phong/Basic、ShaderMaterialskills/threejs-materials/SKILL.md
灯光六种光源对比、阴影、环境光skills/threejs-lighting/SKILL.md
纹理UV 映射、环境贴图、渲染目标skills/threejs-textures/SKILL.md
动画关键帧、骨骼动画、混合skills/threejs-animation/SKILL.md
加载器GLTF/GLB、异步加载与缓存skills/threejs-loaders/SKILL.md
着色器GLSL 基础、自定义特效skills/threejs-shaders/SKILL.md
后期处理EffectComposer、Bloom、景深skills/threejs-postprocessing/SKILL.md
交互射线检测、OrbitControls、点选skills/threejs-interaction/SKILL.md

🎯小结:Scene 搭舞台、Camera 定视角、Renderer 出画面——三件套跑通,Three.js 的基础框架就立住了。配合 threejs-skills 里已审计(r160+)的规范示例,你的第一个 3D 项目可以从"能跑"直接走向"跑得稳"。

【免费下载链接】threejs-skills

项目地址:https://gitcode.com/gh_mirrors/th/threejs-skills
点击查看免费下载

相关推荐

上一篇:botbuilder-js与Azure无缝集成:Blob Storage与Cosmos DB数据持久化方案
下一篇:使用 AWS SDK for Rust 与 Amazon Textract 构建文档问答分析:analyze-document 实战指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

如何快速上手 swinv2_large_window12to24_192to384.ms_in22k_ft_in1k:从下载 timm 预训练模型到跑通第一次图像识别(新手教程)

如何快速上手 swinv2_large_window12to24_192to384.ms_in22k_ft_in1k:从下载 timm 预训练模型到跑通第一次图像识别(新手教程)

【免费下载链接】swinv2_large_window12to24_192to384.ms_in22k_ft_in1k 项目地址: https://ai.gitcode.com/hf_mirrors/timm/swinv2_large_window12to24_192to384.ms_in22k_ft_in1k 点击查看 免费下载 想体验强大的图像识别能力?本教程带你 10 分钟上手…

2026/10/20 1:29:00 阅读更多 →
SIMP拓扑优化实战:人工髋关节疲劳约束的Python实现与避坑指南

SIMP拓扑优化实战:人工髋关节疲劳约束的Python实现与避坑指南

简介:本资源面向生物力学与机械工程领域的研究者和技术开发者,聚焦人工髋关节的轻量化与耐疲劳设计问题。内容基于SIMP拓扑优化方法,以柔度最小为目标、体积为约束,并进一步引入疲劳约束条件,材料采用Ti6Al4V&#xff…

2026/10/20 1:29:00 阅读更多 →
低压变频器EMC整改实战:滤波、屏蔽与接地工程指南

低压变频器EMC整改实战:滤波、屏蔽与接地工程指南

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

2026/10/20 1:29:00 阅读更多 →

最新新闻

2026 年青州口碑好的汽车贴膜选哪家? 青州汽车贴膜哪家好?哪家靠谱?量子膜 1 号车酷青州形象店值得推荐

2026 年青州口碑好的汽车贴膜选哪家? 青州汽车贴膜哪家好?哪家靠谱?量子膜 1 号车酷青州形象店值得推荐

青州汽车贴膜哪家好?哪家靠谱?不少青州车主准备贴太阳膜、隐形车衣或者改色膜时,都会在网上搜索青州量子膜哪家好、青州量子膜哪家靠谱、青州量子膜哪家专业、青州隐形车衣哪家好、青州隐形车衣哪家靠谱、青州汽车贴膜哪家靠谱、青州汽车贴膜…

2026/10/20 2:14:25 阅读更多 →
口腔导航研发02:法规、标准与指导原则,如何建立适用性矩阵

口腔导航研发02:法规、标准与指导原则,如何建立适用性矩阵

研发团队常在立项时收集一页标准编号,送检前再交给检验机构。问题是:这张清单是否对应真实产品,列出的版本是否有效,哪些条款需要设计输入,哪些试验需要特定附件?标准管理应贯穿研发,而不是送检…

2026/10/20 2:14:25 阅读更多 →
STM32学习——传感器

STM32学习——传感器

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

2026/10/20 2:14:25 阅读更多 →
基金风控 AI 建设,2026年如何挑选数据不出域AI Agent搭建厂商?

基金风控 AI 建设,2026年如何挑选数据不出域AI Agent搭建厂商?

基金风控AI的选型,核心矛盾在于数据敏感性与智能体能力之间的平衡。2026年,市场上可供基金管理机构评估的产品已不止一类:以私有化部署见长的速X综合智能体系统1.0、以桌面交付见长的腾讯WorkBuddy、以真操作与多端协同见长的百度搭子&#x…

2026/10/20 2:14:25 阅读更多 →
小白程序员必看:企业AI转型方法论与落地实践,从入门到精通

小白程序员必看:企业AI转型方法论与落地实践,从入门到精通

本文探讨了企业AI转型的核心方法论与实践步骤,从顶层设计、场景规划、路径选择、人才机制、数据治理到技术实现等层面,详细阐述了如何将AI融入企业运营,实现降本增效、增长转型。文章强调了AI转型需跨越业务流程重塑、认知思维转变、个人应用…

2026/10/20 2:14:25 阅读更多 →
企业IM接入AI的架构设计:从消息通信到业务调用与人机协同

企业IM接入AI的架构设计:从消息通信到业务调用与人机协同

企业IM接入AI后,技术变化涉及三条链路的衔接:人员之间的消息通信、人员与业务系统之间的数据和操作,以及AI辅助理解、工具调用与人工确认。我们可以将连接对象的演进归纳为:人↔人→人↔系统→人↔系统↔AI。 小天互连已经具备企业…

2026/10/20 2:13:24 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →