沉浸式迷幻波浪动画免费探索!WebGL 技术支持动态艺术效果,Three.js 教程轻松定制

2025-06-16| 844 阅读

? 沉浸式迷幻波浪动画全解析:WebGL 与 Three.js 打造动态艺术世界


? 为什么说 WebGL 是动态艺术的「魔法画笔」?


好多朋友第一次看到网页上流动的波浪动画,都会惊叹「这玩意儿咋做出来的?」其实背后的核心技术就是 WebGL。它能让浏览器直接渲染 3D 图形,不用装任何插件。想象一下,以前做网页动画靠 CSS,顶多搞点平移旋转,现在有了 WebGL,波浪能有高度起伏、光影变化,甚至跟着音乐节奏跳舞,这体验完全不是一个量级。

Three.js 又是啥?简单说,它是个专门封装 WebGL 的 JavaScript 库。WebGL 原生接口有点复杂,就像直接用颜料画画,Three.js 相当于给你准备好画笔、调色盘,让你上手更快。现在网上超火的那些沉浸式网页,比如音乐节官网的动态背景、艺术互动网站,十有八九都用到了这俩技术。

? 这些免费资源让你秒变动画达人


刚入门最怕找不到靠谱素材,别急,这几个免费资源站收好:

  • CodePen 搜索「Three.js wave」:里面有超多现成案例,比如点击鼠标波浪会扩散的效果,手机倾斜波浪跟着动的交互,直接复制代码就能在自己项目里改。我之前做一个海洋主题网页,就从这儿扒了个水波光影效果,改改颜色和波浪速度,半小时搞定。
  • GitHub 开源项目「three.js-examples」:Three.js 官方示例库,自带各种材质、灯光、动画的代码,其中 webgl_animation_waves 文件夹里,有不同波形(正弦波、余弦波)的实现方式,连如何让波浪和鼠标位置互动都写好了注释。
  • ShaderToy:专门玩着色器的地方,里面有超多迷幻波浪的 shader 代码。比如输入「ocean shader」,能看到海水波浪带折射效果的代码,把这些 shader 整合到 Three.js 里,你的波浪立马有了波光粼粼的质感。

? 从零开始:Three.js 波浪动画详细教程


第一步:搭好开发环境


别被「环境搭建」吓到,跟着做超简单:

  1. 新建一个文件夹,里面建三个文件:index.html(网页骨架)、script.js(写动画代码)、package.json(管理依赖)。
  2. 打开命令行,进入这个文件夹,输入 npm init -y 生成 package.json,再输入 npm install three 安装 Three.js 库。
  3. index.html 里,引入 Three.js 文件:,然后把 script.js 也引入:

第二步:创建场景、相机和渲染器


这仨是 Three.js 的「铁三角」:

javascript
// 创建场景,相当于舞台
const scene = new THREE.Scene();
// 创建透视相机,就像观众的眼睛位置
const camera = new THREE.PerspectiveCamera(, window.innerWidth / window.innerHeight, 0.1, );
// 创建渲染器,把内容画到网页上
const renderer = new THREE.WebGLRenderer();
// 设置渲染器尺寸,填满整个窗口
renderer.setSize(window.innerWidth, window.innerHeight);
// 把渲染器的 DOM 元素加到网页 body 里
document.body.appendChild(renderer.domElement);

这时候运行网页,会看到一个黑色背景,啥都没有,别急,接下来往上加东西。

第三步:生成波浪的几何形状


波浪本质上是一堆顶点组成的曲面,用 PlaneGeometry 就行,但得把分段数调高点,不然波浪看起来太生硬:

javascript
// 创建平面几何,宽度和高度设为 100,宽度分段和高度分段都设为 100,这样顶点足够多
const geometry = new THREE.PlaneGeometry(, , , );
// 材质用 MeshPhongMaterial,能有光影效果,颜色设为浅蓝色
const material = new THREE.MeshPhongMaterial({ color: 0x87ceeb });
// 创建网格对象,把几何和材质绑在一起
const waveMesh = new THREE.Mesh(geometry, material);
// 把网格添加到场景里
scene.add(waveMesh);

现在网页上会出现一个平面,但还是静止的,接下来让顶点动起来。

第四步:让波浪「浪」起来


通过修改几何对象的顶点位置来实现波浪效果,用正弦函数控制 Y 轴高度:

javascript
// 在动画循环里更新顶点
function animate() {
  requestAnimationFrame(animate);
  // 遍历每个顶点
  for (let i = ; i < geometry.vertices.length; i++) {
    const vertex = geometry.vertices[i];
    // X 和 Z 坐标决定波浪的位置,用时间戳让波浪移动
    const x = vertex.x;
    const z = vertex.z;
    // 波浪的高度随时间和位置变化,振幅设为 5,频率设为 0.1
    vertex.y = Math.sin(x * 0.1 + Date.now() * 0.005) *  + Math.sin(z * 0.1 + Date.now() * 0.005) * ;
  }
  // 更新几何的顶点数据,不然变化不生效
  geometry.verticesNeedUpdate = true;
  // 渲染场景和相机
  renderer.render(scene, camera);
}
// 启动动画
animate();

运行后,平面就会变成上下起伏的波浪啦!不过这时候波浪看起来有点生硬,没有那种连续流动的感觉,接着优化。

第五步:添加纹理和光影让波浪更逼真


  1. 加载水纹理:去 Textures.com 下载免费的水纹理图片,比如 water_normal.jpg(法线纹理,让波浪有凹凸感),用 TextureLoader 加载:

javascript
const textureLoader = new THREE.TextureLoader();
const waterNormal = textureLoader.load('water_normal.jpg');
// 把法线纹理应用到材质上
material.normalMap = waterNormal;

  1. 添加灯光:加一个环境光和一个点光源,让波浪有明暗变化:

javascript
// 环境光,让整个场景有基础亮度
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(ambientLight);
// 点光源,模拟阳光,位置放在波浪上方
const pointLight = new THREE.PointLight(0xffffff, );
pointLight.position.set(, , );
scene.add(pointLight);

这时候波浪看起来就有了水的质感,光影跟着波浪起伏,立体感强多了。

第六步:让波浪和鼠标互动(进阶操作)


想让鼠标移到哪儿,波浪就往哪儿扩散?很简单,监听鼠标移动事件,计算鼠标位置对应的波浪顶点:

javascript
// 监听鼠标移动
let mouseX = , mouseY = ;
window.addEventListener('mousemove', (e) => {
  mouseX = (e.clientX - window.innerWidth / ) / ;
  mouseY = (e.clientY - window.innerHeight / ) / ;
});

// 在动画循环里,根据鼠标位置添加额外的波浪扰动
for (let i = ; i < geometry.vertices.length; i++) {
  const vertex = geometry.vertices[i];
  // 原来的波浪计算
  const baseY = Math.sin(x * 0.1 + time) *  + Math.sin(z * 0.1 + time) * ;
  // 鼠标位置对应的扰动,距离越近振幅越大
  const distance = Math.sqrt((x - mouseX * ) **  + (z - mouseY * ) ** );
  const disturbY = ( / distance) * ; // 距离越近,扰动越大
  vertex.y = baseY + disturbY;
}

这样一来,鼠标划过的地方,波浪会有明显的涟漪效果,互动感直接拉满。

? 玩出花样:波浪动画的创意拓展


让波浪跟着音乐节奏「跳舞」


想做音乐可视化?获取音频数据就行:

  1. AudioContext 读取音乐文件的频率数据:

javascript
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const audioElement = new Audio('music.mp3');
const source = audioContext.createMediaElementSource(audioElement);
const analyser = audioContext.createAnalyser();
source.connect(analyser);
analyser.connect(audioContext.destination);

  1. 在动画循环里,根据音频的低频数据调整波浪振幅:

javascript
const frequencyData = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(frequencyData);
const lowFrequency = frequencyData.slice(, ).reduce((a, b) => a + b, ) / ;
vertex.y = Math.sin(x * 0.1 + time) * (lowFrequency /  * ) + Math.sin(z * 0.1 + time) * (lowFrequency /  * );

音乐声音越大,波浪起伏越剧烈,做音乐网站简直绝了。

打造「赛博朋克」风格的发光波浪


把材质换成发光材质,再加点颜色渐变:

javascript
// 用 MeshBasicMaterial 开启发光效果
const glowMaterial = new THREE.MeshBasicMaterial({ 
  color: 0x00ffff, 
  emissive: 0x00ffff, 
  emissiveIntensity: ,
  transparent: true,
  opacity: 0.8
});
// 给波浪顶点设置不同的颜色,根据 Y 轴高度渐变
for (let i = ; i < geometry.vertices.length; i++) {
  const y = geometry.vertices[i].y;
  const color = new THREE.Color();
  color.setHSL((y + ) / , , 0.5); // 色相随高度变化
  geometry.colors[i] = color;
}
glowMaterial.vertexColors = THREE.VertexColors; // 应用顶点颜色

这样波浪不仅会发光,还会跟着起伏变换颜色,迷幻感直接拉满,做游戏 Loading 界面或者艺术展示页超合适。

手机端适配:让波浪随手机倾斜动起来


用设备方向传感器 API,获取手机的倾斜角度:

javascript
let alpha = , beta = ;
window.addEventListener('deviceorientation', (e) => {
  alpha = e.alpha; // 绕 Z 轴旋转角度
  beta = e.beta; // 绕 X 轴旋转角度
});

// 在动画循环里,根据倾斜角度调整相机位置,让波浪看起来像在流动
camera.position.x = Math.sin(alpha * 0.01) * ;
camera.position.z = Math.cos(beta * 0.01) * ;

用户拿着手机左右倾斜,波浪场景会跟着转动,沉浸式体验直接提升,做移动端互动网页必备。

? 避坑指南:让动画又快又流畅


好多人做完动画发现卡顿,记住这几个优化点:

  • 减少顶点数量:分段数别设太高,比如刚开始用 100x100 够了,手机端可以降到 50x50,牺牲点细节换流畅度。
  • 合并材质:如果场景里有多个波浪对象,尽量用同一个材质,减少渲染批次。
  • 开启抗锯齿:渲染器设置 antialias: true,波浪边缘不会有锯齿,但会稍微影响性能,根据设备性能取舍。
  • 使用 WebGL 2.0:现代浏览器基本都支持,渲染效率比 1.0 高不少,创建渲染器时加参数 { powerPreference: "high-performance", antialias: true, webgl2: true }

? 从入门到进阶,这些学习资源别错过


  • Three.js 官方文档:虽然是英文,但例子超多,搜索「Wave」能找到官方的波浪动画示例,跟着敲代码进步很快。
  • B 站教程《Three.js 入门到实战》:中文讲解,从搭建环境到做完整项目,适合零基础,我当初就是跟着这个教程入的门。
  • MDN WebGL 教程:想深入理解 WebGL 底层原理,看这个,比如波浪的光影计算、纹理贴图原理,这儿讲得明明白白。

现在,你完全可以用 Three.js 和 WebGL 做出超酷的迷幻波浪动画啦!从简单的网页背景到复杂的互动艺术项目,这些技术能玩出无数花样。赶紧打开代码编辑器,试试把今天学的东西敲进去,看着自己做的波浪在屏幕上流动,那成就感简直了!

【该文章由dudu123.com嘟嘟 ai 导航整理,嘟嘟 AI 导航汇集全网优质网址资源和最新优质 AI 工具】

分享到:

相关文章

创作资讯2025-07-04

SiteGPT 与传统建站对比:AI 驱动快速生成,SEO 优化 + 移动端响应优势凸显

? 建站速度:从 “等 weeks” 到 “按 days 算” 的颠覆 咱先说说最直观的感受 —— 建站速度。传统建站那流程,跟老辈人做手工似的,得一步步磨。你得先跟设计师碰需求,光沟通品牌调性、页面

第五AI
创作资讯2025-07-02

神赞营销工具如何提升品牌影响力?社交媒体管理 + 私域运营全解析

? 神赞营销工具:社交媒体管理的核心引擎 社交媒体时代,品牌想要突出重围,就得把社交媒体玩得溜。神赞营销工具在这方面可真是把好手。它能在微信、小红书、抖音、微博这些主流平台上,帮品牌搞全域种草推广,从

第五AI
创作资讯2025-07-09

速猫 ERP 如何对接亚马逊?30 + 平台物流跟踪与财税合规指南

?速猫 ERP 如何对接亚马逊?30 + 平台物流跟踪与财税合规指南 做跨境电商的朋友都知道,ERP 系统是管理多平台业务的关键工具。今天咱们就来聊聊速猫 ERP 怎么对接亚马逊,以及如何通过它实现

第五AI
创作资讯2025-07-09

2025 新版 B 站 C4D 教程:入门到进阶系统课程,材质灯光渲染实战解析

? 2025 新版 B 站 C4D 教程:从入门到进阶的系统课程,材质灯光渲染实战解析 B 站的 C4D 教程一直是设计爱好者的热门选择,2025 年的新版更是带来了全新的学习体验。今天咱们就来深入聊

第五AI
推荐2025-08-07

力扣模拟面试防作弊指南:双机位 + 实时代码审查策略揭秘

?双机位布置:打造360°无死角面试环境力扣模拟面试的双机位要求让不少同学犯难,其实把它想象成给电脑装个「监控搭档」就简单了。主机位就是咱们平时用的电脑摄像头,记得调整到能露出整张脸和桌面的角度——下巴别藏在阴影里,键盘也别只露出半个。副机位一般用手机支架固定,放在身体侧后方45度角,这个位置既能拍

第五AI
推荐2025-08-07

Examify AI 是一款怎样的考试平台?2025 最新个性化学习计划解析

?精准提分黑科技!ExamifyAI如何重塑2025考试备考模式?一、核心功能大揭秘:AI如何让考试准备更高效?ExamifyAI作为新一代智能考试平台,最吸引人的地方就是它的自适应学习引擎。这个系统就像一个贴心的私人教练,能根据你的答题数据自动调整学习路径。比如你在数学几何题上错误率高,系统会优先

第五AI
推荐2025-08-07

公众号注册的“蝴蝶效应”:一个选择,可能影响未来三年的运营 - 前沿AIGC资讯

你可能觉得公众号注册就是填几个信息的事,殊不知,这里面的每个选择都像蝴蝶扇动翅膀,未来三年的运营轨迹可能就被悄悄改变了。很多人刚开始没当回事,等到后面想调整,才发现处处受限,那叫一个后悔。今天就跟你好好聊聊,注册时那些看似不起眼的选择,到底能给未来的运营带来多大影响。​📌账号类型选不对,三年运营路难

第五AI
推荐2025-08-07

AI写作如何进行事实核查?确保头条文章信息准确,避免误导读者 - AI创作资讯

上周帮同事核查一篇AI写的行业报告,发现里面把2023年的用户增长率写成了2025年的预测数据。更离谱的是,引用的政策文件号都是错的。现在AI生成内容速度快是快,但这种硬伤要是直接发出去,读者信了才真叫坑人。今天就掰开揉碎了说,AI写作怎么做好事实核查,别让你的头条文章变成 误导重灾区 。​📌AI写

第五AI
推荐2025-08-07

10w+阅读量爆文案例拆解分析:高手都从这5个维度入手 - AI创作资讯

🎯维度一:选题像打靶,靶心必须是「用户情绪储蓄罐」做内容的都清楚,10w+爆文的第一步不是写,是选。选题选不对,后面写得再好都是白搭。高手选选题,就像往用户的「情绪储蓄罐」里投硬币,投对了立刻就能听到回响。怎么判断选题有没有击中情绪?看三个指标:是不是高频讨论的「街头话题」?是不是藏在心里没说的「抽

第五AI
推荐2025-08-07

135编辑器会员值得买吗?它的AI模板库和秀米H5比哪个更丰富? - AI创作资讯

📌135编辑器会员值不值得买?AI模板库和秀米H5谁更胜一筹?🔍135编辑器会员的核心价值解析企业级商用保障与效率提升135编辑器的企业会员堪称新媒体运营的「合规保险箱」。根据实际案例,某团队通过企业会员节省了大量设计费用,完成多篇内容创作,单篇成本从千元降至百元内。这得益于其海量正版模板和素材库,

第五AI
推荐2025-08-07

新公众号被限流怎么办?粉丝增长影响分析及 2025 恢复指南 - AI创作资讯

新公众号被限流怎么办?粉丝增长影响分析及2025恢复指南🔍新公众号限流的核心原因解析新公众号被限流,往往是多个因素叠加的结果。根据2025年最新数据,超过70%的限流案例与内容质量直接相关。比如,有些新手喜欢用“震惊体”标题,像“惊!某公众号三天涨粉十万”,这类标题在2025年的算法里已经被明确标记

第五AI
推荐2025-08-07

AI内容重复率太高怎么办?掌握这些技巧轻松通过AIGC检测 - AI创作资讯

⚠️AI内容重复率高的3大核心原因现在用AI写东西的人越来越多,但很多人都会遇到同一个问题——重复率太高。明明是自己用工具生成的内容,一检测却显示和网上某些文章高度相似,这到底是为什么?最主要的原因是AI训练数据的重叠性。不管是ChatGPT还是国内的大模型,训练数据来源其实大同小异,都是爬取的互联

第五AI
推荐2025-08-07

135编辑器让排版更简单 | 专为公众号运营者设计的效率工具 - AI创作资讯

🌟135编辑器:公众号运营者的效率革命做公众号运营的朋友都知道,排版是个费时费力的活。一篇文章从内容到排版,没几个小时根本搞不定。不过现在好了,135编辑器的出现,彻底改变了这一现状。135编辑器是提子科技旗下的在线图文排版工具,2014年上线至今,已经成为国内新媒体运营的主流工具之一。它的功能非常

第五AI
推荐2025-08-07

用对prompt指令词,AI内容的原创度能有多高?实测效果惊人 - 前沿AIGC资讯

现在做内容的人几乎都离不开AI,但最头疼的就是原创度。平台检测一严格,那些模板化的AI文很容易被打回,甚至判定为“非原创”。但你知道吗?同样是用AI写东西,换个prompt指令词,原创度能差出天壤之别。我最近拿不同的prompt测了好几次,结果真的吓一跳——好的指令能让AI内容原创度直接从“及格线”

第五AI