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

threejs基础教程:从零开始构建你的第一个3D旋转立方体

1. 为什么选择Three.js入门3D开发第一次接触3D开发时我被各种专业术语吓到了——顶点着色器、光线追踪、法线贴图...直到发现Three.js这个宝藏库。它就像给WebGL套了个友好外壳让普通前端开发者也能轻松创建3D效果。记得我最早用Three.js做的项目是个电商平台的商品展示页当那个3D模型在网页上旋转起来时团队里所有人都惊呼原来网页还能这样玩Three.js最大的优势在于隐藏了WebGL的复杂性。你不用理解图形学矩阵运算也能通过简单的API创建场景。比如要画个立方体传统WebGL可能需要上百行代码而Three.js只要三行const geometry new THREE.BoxGeometry() const material new THREE.MeshBasicMaterial({color: 0x00ff00}) const cube new THREE.Mesh(geometry, material)这个库特别适合以下场景网页中的3D产品展示比如汽车配置器数据可视化中的立体图表简单的网页游戏开发教育类交互演示我建议初学者从旋转立方体开始因为立方体包含3D开发所有核心概念几何体、材质、网格调试方便六个面颜色不同更容易观察旋转动画能立即验证3D坐标系理解是否正确2. 五分钟搭建开发环境新手常在这里卡壳其实Three.js对环境要求非常宽松。最近帮同事调试时发现现代浏览器基本都支持连手机浏览器都能运行。下面分享两种最常用的配置方式2.1 纯HTML方案最快上手创建空白HTML文件直接引入CDN版本的Three.js!DOCTYPE html html head meta charsetutf-8 title我的第一个3D立方体/title stylebody { margin: 0; }/style /head body script srchttps://cdn.jsdelivr.net/npm/three0.132.2/build/three.min.js/script script // 代码将写在这里 /script /body /html注意生产环境建议下载three.min.js到本地避免CDN不可用导致项目瘫痪2.2 工程化方案推荐如果用Vue/React等框架通过npm安装更规范npm install three # TypeScript项目额外安装类型声明 npm install types/three --save-dev实测发现工程化方案在以下场景更有优势需要代码提示和类型检查项目体积较大需要tree-shaking要配合其他3D相关库使用3. 构建3D场景的核心三要素第一次创建场景时我总记不住这三个对象的顺序。后来发现可以用拍电影来类比场景(Scene)- 相当于拍摄场地相机(Camera)- 导演的取景器渲染器(Renderer)- 负责最终成像的摄影机3.1 创建基础场景const scene new THREE.Scene() scene.background new THREE.Color(0xf0f0f0) // 设置浅灰色背景Scene就像个透明容器默认没有背景色。我习惯先设置背景色这样调试时更容易区分场景边界。3.2 配置透视相机相机类型中最常用的是PerspectiveCamera透视相机模拟人眼视角const camera new THREE.PerspectiveCamera( 75, // 视野角度(FOV) window.innerWidth / window.innerHeight, // 宽高比 0.1, // 近裁面(near) 1000 // 远裁面(far) ) camera.position.z 5 // 相机向后移动5个单位这四个参数新手最容易搞混FOV值越小视野越窄类似长焦镜头效果宽高比一定要用窗口实际宽高比否则图像会变形近/远裁面超出这个范围的物体不会被渲染3.3 初始化WebGL渲染器const renderer new THREE.WebGLRenderer({ antialias: true }) renderer.setSize(window.innerWidth, window.innerHeight) document.body.appendChild(renderer.domElement) // 处理窗口大小变化 window.addEventListener(resize, () { camera.aspect window.innerWidth / window.innerHeight camera.updateProjectionMatrix() renderer.setSize(window.innerWidth, window.innerHeight) })这里有个实用技巧添加antialias: true参数可以消除模型边缘锯齿。记得要处理resize事件否则浏览器窗口变化会导致场景变形。4. 创建会旋转的彩色立方体4.1 几何体与材质立方体需要两个核心组件// 创建立方体几何体(长宽高各为1) const geometry new THREE.BoxGeometry(1, 1, 1) // 创建基础材质显示为绿色 const material new THREE.MeshBasicMaterial({ color: 0x00ff00, wireframe: false // 是否显示线框 }) // 将两者组合成网格(Mesh) const cube new THREE.Mesh(geometry, material) scene.add(cube)常见踩坑点忘记将mesh添加到scene中材质颜色值要用十六进制格式0x开头相机位置太近导致立方体显示不全4.2 添加旋转动画动画原理是利用requestAnimationFrame实现循环渲染function animate() { requestAnimationFrame(animate) // 旋转立方体 cube.rotation.x 0.01 cube.rotation.y 0.01 renderer.render(scene, camera) } animate()想让旋转更平滑可以改用时间增量控制转速let clock new THREE.Clock() function animate() { const delta clock.getDelta() // 获取上一帧耗时 cube.rotation.x delta * Math.PI / 2 // 每秒转90度 cube.rotation.y delta * Math.PI / 2 renderer.render(scene, camera) requestAnimationFrame(animate) }4.3 进阶美化技巧想让立方体更生动试试这些修改// 使用标准材质并添加光照 const material new THREE.MeshStandardMaterial({ color: 0x00ff00, roughness: 0.4, metalness: 0.7 }) // 添加平行光 const light new THREE.DirectionalLight(0xffffff, 1) light.position.set(1, 1, 1) scene.add(light) // 添加环境光 scene.add(new THREE.AmbientLight(0x404040))5. 调试与性能优化5.1 实用调试技巧初学者常遇到这些问题立方体不显示检查相机位置和朝向画面卡顿降低渲染分辨率试试颜色异常确认材质类型与灯光匹配推荐安装Three.js官方调试工具import { OrbitControls } from three/examples/jsm/controls/OrbitControls const controls new OrbitControls(camera, renderer.domElement) controls.enableDamping true // 添加阻尼效果5.2 性能优化建议当场景变复杂时需要注意重用几何体和材质对静态物体使用matrixAutoUpdate false合理设置相机裁面距离使用dispose()方法释放资源// 性能对比示例 const lowResRenderer new THREE.WebGLRenderer({ powerPreference: low-power }) lowResRenderer.setSize(window.innerWidth/2, window.innerHeight/2, false)6. 完整代码与扩展学习最终完整代码如下!DOCTYPE html html head title3D旋转立方体/title stylebody { margin: 0; }/style /head body script srchttps://cdn.jsdelivr.net/npm/three0.132.2/build/three.min.js/script script // 初始化场景 const scene new THREE.Scene() scene.background new THREE.Color(0xf0f0f0) // 设置相机 const camera new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000) camera.position.z 5 // 创建渲染器 const renderer new THREE.WebGLRenderer({ antialias: true }) renderer.setSize(window.innerWidth, window.innerHeight) document.body.appendChild(renderer.domElement) // 创建立方体 const geometry new THREE.BoxGeometry(1, 1, 1) const material new THREE.MeshStandardMaterial({ color: 0x00ff00, roughness: 0.4 }) const cube new THREE.Mesh(geometry, material) scene.add(cube) // 添加光照 const light new THREE.DirectionalLight(0xffffff, 1) light.position.set(1, 1, 1) scene.add(light) scene.add(new THREE.AmbientLight(0x404040)) // 动画循环 function animate() { requestAnimationFrame(animate) cube.rotation.x 0.01 cube.rotation.y 0.01 renderer.render(scene, camera) } animate() // 响应式处理 window.addEventListener(resize, () { camera.aspect window.innerWidth / window.innerHeight camera.updateProjectionMatrix() renderer.setSize(window.innerWidth, window.innerHeight) }) /script /body /html掌握基础后可以继续探索加载复杂3D模型GLTFLoader实现阴影效果添加粒子系统使用着色器自定义材质记得第一次成功运行这个立方体时我盯着它转了整整五分钟。这种即时可见的成就感正是Three.js最吸引我的地方。建议你在完成基础版本后尝试修改参数观察变化——比如把BoxGeometry的宽度改为2或者给立方体六个面设置不同颜色这些实践能帮你快速建立3D空间感。

相关文章:

threejs基础教程:从零开始构建你的第一个3D旋转立方体

1. 为什么选择Three.js入门3D开发 第一次接触3D开发时,我被各种专业术语吓到了——顶点着色器、光线追踪、法线贴图...直到发现Three.js这个宝藏库。它就像给WebGL套了个友好外壳,让普通前端开发者也能轻松创建3D效果。记得我最早用Three.js做的项目是个…...

VideoAgentTrek Screen Filter部署排错大全:从403 Forbidden到GPU内存不足

VideoAgentTrek Screen Filter部署排错大全:从403 Forbidden到GPU内存不足 部署AI视频处理工具,最怕的就是遇到各种报错,尤其是当你满怀期待地敲下运行命令,屏幕上却弹出一堆看不懂的红色错误信息时,那种感觉真是让人…...

WSL + Docker + GPU 安装 video-subtitle-remover 完整文档

🎯 一、最终目标 在本机实现: 上传视频 → GPU处理 → 输出去字幕视频🧱 二、最终可用环境(你实际跑通的) WSL2 NVIDIA 驱动(Windows) 自装 Docker Engine NVIDIA Container Toolkit Docker GPU…...

别再重复造轮子了 教你一招:把全球开源宝库,变成你个人的技能库

文章目录前言一、为什么说"重复造轮子"是程序员最大的浪费?二、全球开源宝库到底有多大?你可能低估了三、找轮子的艺术:如何从海量仓库里挖出宝藏?3.1 善用AI搜索,别再用传统方式了3.2 关注Awesome系列和 cu…...

非科班转编程,面试通关全流程干货

文章目录 前言一、简历关:别让"自学"俩字毁了你1.1 教育背景怎么写?诚实但要有"小心机"1.2 项目经历:千万别写"XXX管理系统" 二、八股文关:别再傻傻背"Redis为什么快"了2.1 2025年八股文…...

I.MX6ULL 裸机开发:SPI 总线与多点触摸屏驱动原理剖析

摘要 本文基于 I.MX6ULL 裸机开发实践,系统梳理了 SPI 串行外设接口的通信协议、ECSPI 控制器配置方法以及 ADXL345 三轴加速度传感器的驱动实现。同时,针对开发板搭载的 GT9147 多点电容触摸控制器,详细分析了其 I2C 通信机制、中断处理流程…...

工控级PCIe转USB四通道µPD720201芯片选型与应用指南

1. 工控级PCIe转USB芯片的核心价值 在工业自动化设备开发中,经常会遇到一个经典问题:主控芯片自带USB2.0接口,但产线测试仪器、工业相机等外设需要USB3.0的高速传输能力。这时候PCIe转USB芯片就成了救命稻草,它就像个"协议翻…...

jQuery Tooltip:深入解析与最佳实践

jQuery Tooltip:深入解析与最佳实践 引言 在Web开发中,Tooltip(工具提示)是一种常见的交互元素,它可以在用户将鼠标悬停在某个元素上时显示额外的信息。jQuery作为一款流行的JavaScript库,提供了丰富的功能…...

IOFILE结构体的介绍与House of orange鸵

认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...

AVP系统背后的技术拆解:车端、场端、云端到底谁在“开车”?

AVP系统技术全景:车端、场端与云端的协同博弈 当一辆特斯拉Model 3在商场停车场自动寻找车位时,它可能正经历着三种技术路线的激烈博弈。AVP(自主代客泊车)系统作为自动驾驶技术中最先商业化的场景,其背后的技术架构选…...

图论--最小生成树

prim算法(稠密图) 例题:https://www.acwing.com/problem/content/860/ 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。 给定一张边带权的…...

Photon Matrix激光灭蚊系统深度技术剖析:从理论到工程实现

引言:当反导技术遇上蚊虫防治 激光灭蚊的概念并非Photon Matrix首创。早在2007年,曾参与美国“星球大战”计划的物理学家Lowell Wood就曾在比尔及梅琳达盖茨基金会关于根除疟疾的研讨会上提出过类似设想。此后数年间,Intellectual Ventures等…...

C 语言从 0 入门(十三)|结构体:自定义数据类型与实战

大家好,我是网域小星球。 前面我们学习了基本数据类型、数组、指针、函数,能够处理数字、字符等简单数据。但在实际开发中,我们经常需要描述一个复杂对象,比如学生、商品、员工、书籍等,它们包含多种不同类型的信息&a…...

科研进展 | JAG: 大光斑高光谱激光雷达遥感辐射传输模型从垂直视角解锁森林叶绿素分布密码

大光斑高光谱激光雷达辐射传输模型: 垂直视角解锁叶绿素分布密码当森林的 “健康密码” 藏在垂直分层的枝叶间,传统遥感技术难以触及森林冠层中下层的生化奥秘? 近日,电子科技大学定量遥感团队白杰副研究员(师资博士后&#xff09…...

SITS东南亚本地化失败案例复盘,37天重构AI模型适配流程——奇点大会唯一授权披露的应急响应SOP

第一章:奇点智能技术大会:SITS系列品牌的全球化布局 2026奇点智能技术大会(https://ml-summit.org) SITS(Singularity Intelligence Technology Series)作为奇点智能技术大会核心孵化的技术品牌矩阵,已形成覆盖算法研…...

思摩尔第一季营收38.6亿:同比增42% 全面收益总额1.3亿降39%

雷递网 乐天 4月10日思摩尔国际控股有限公司(简称:“思摩尔”,股票代码:“6969”)日前发布截至2026年3月31日的财报。财报显示,思摩尔2026年第一季度营收为38.56亿元,较上年同期的27.22亿元增长…...

AI原生微服务可观测性如何突破“黑盒困局”?SITS2026首发Trace-LLM双轨追踪框架(已落地支撑日均2.4亿次AI调用)

第一章:SITS2026分享:AI原生微服务架构设计 2026奇点智能技术大会(https://ml-summit.org) 核心设计范式演进 AI原生微服务架构不再将模型作为后端API的被动调用对象,而是将其建模为具备生命周期、可观测性、弹性扩缩与上下文感知能力的一等…...

HTML转EXE一键打包工具版【实测可用】支持本地网页文件与在线网址直接生成独立可执行程序

温馨提示:文末有联系方式一、的HTML转EXE专业工具 无需订阅、不设试用期、不强制付费——本工具为真正版本,所有功能完全开放,下载即用,彻底告别弹窗广告与隐藏项。二、零环境依赖,纯图形化一键操作 无需安装Node.js、…...

如何交换表分区_ALTER TABLE EXCHANGE PARTITION实现数据快速导入导出

EXCHANGE PARTITION能秒级导入导出数据,因其仅交换元数据而非移动实际数据文件;要求源表与目标分区结构完全一致,包括列定义、约束、索引等,否则直接报错。EXCHANGE PARTITION 为什么能“秒级”导入导出数据因为 exchange partiti…...

STM32H7 SPI4与W25Q128 Flash通信实战:50MHz时钟配置避坑指南

STM32H7 SPI4与W25Q128 Flash通信实战:50MHz时钟配置避坑指南 在嵌入式开发中,高速SPI通信一直是工程师们面临的挑战之一。特别是当我们需要在STM32H7系列微控制器上实现50MHz时钟频率的SPI4接口与W25Q128 Flash通信时,各种意想不到的问题往往…...

Python实现GCJ-02与CGCS2000坐标转换的GUI工具开发

1. 为什么需要坐标转换工具 第一次接触地图开发的朋友可能会疑惑:为什么坐标还需要转换?这得从国内地图服务的特殊性说起。国内主流地图服务如高德、腾讯地图使用的GCJ-02坐标系(俗称火星坐标系),与全球通用的WGS84坐标…...

.NET 新特性概览与相关文章索引竿

从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...

作者介绍Java高级工程师

作者介绍Java高级工程师 廖万忠 编程比赛成绩 2023年CSDN基础用户1million Java开发者用户30万332个团长比赛成绩 102 rank美国创业公司 HackerRank 项目组 Java工程师 2022年 accepted深圳腾讯公司 腾讯云开发者社区 2022年年度进取作者 coderlwz 证书北京大学2010级计算机优秀…...

终极ARC-AGI测试功能扩展指南:从零开始自定义AI推理任务

终极ARC-AGI测试功能扩展指南:从零开始自定义AI推理任务 【免费下载链接】ARC-AGI The Abstraction and Reasoning Corpus 项目地址: https://gitcode.com/GitHub_Trending/ar/ARC-AGI 欢迎来到ARC-AGI(Abstraction and Reasoning Corpus for Art…...

终极指南:Ant Media Server视频转码技术与FFmpeg集成优化方案

终极指南:Ant Media Server视频转码技术与FFmpeg集成优化方案 【免费下载链接】Ant-Media-Server Ant Media Server — Ultra-low latency streaming engine with WebRTC (~0.5s), SRT, RTMP, HLS, CMAF, adaptive bitrate, transcoding & scaling 项目地址: …...

终极指南:如何用MixItUp实现动态内容的无缝插入与移除操作

终极指南:如何用MixItUp实现动态内容的无缝插入与移除操作 【免费下载链接】mixitup A high-performance, dependency-free library for animated filtering, sorting, insertion, removal and more 项目地址: https://gitcode.com/gh_mirrors/mi/mixitup Mi…...

如何高效参与PointNet_Pointnet2_pytorch开源项目:完整贡献指南

如何高效参与PointNet_Pointnet2_pytorch开源项目:完整贡献指南 【免费下载链接】Pointnet_Pointnet2_pytorch PointNet and PointNet implemented by pytorch (pure python) and on ModelNet, ShapeNet and S3DIS. 项目地址: https://gitcode.com/gh_mirrors/po/…...

阿姆智创15.6寸嵌入式工控一体机,赋能机器视觉与产线数字化生产

在工业自动化与工厂数字化深度融合的时代,嵌入式工控一体机已成为连接设备、数据与人机交互的核心硬件载体。阿姆智创15.6寸嵌入式工控一体机,凭借稳定可靠的工业级性能、丰富齐全的系统接口、紧凑灵活的嵌入式设计,适配机器视觉设备与MES/ES…...

超级千问语音设计世界应用案例:快速生成短视频配音与游戏角色语音

超级千问语音设计世界应用案例:快速生成短视频配音与游戏角色语音 1. 引言:当语音合成遇上像素冒险 在内容创作领域,声音设计往往是最容易被忽视却又至关重要的环节。无论是短视频创作者需要快速生成旁白,还是独立游戏开发者需要…...

掌握msdfgen形状描述语法:从基础几何到复杂路径的完整指南

掌握msdfgen形状描述语法:从基础几何到复杂路径的完整指南 【免费下载链接】msdfgen Multi-channel signed distance field generator 项目地址: https://gitcode.com/gh_mirrors/ms/msdfgen msdfgen是一款强大的多通道有向距离场生成工具,能够将…...