WebGL 迷幻波浪动画免费体验!Three.js 鼠标交互调节速度,附开源代码和教程

2025-06-21| 1603 阅读

? WebGL 迷幻波浪动画免费体验!Three.js 鼠标交互调节速度,附开源代码和教程


最近在鼓捣前端动画的时候,发现了一个超有意思的 WebGL 案例 —— 迷幻波浪动画。用 Three.js 实现的那种,鼠标移上去还能调节波浪滚动的速度,视觉效果特别炫。咱今天就来好好唠唠这个效果怎么玩,顺便把开源代码和详细教程都给大家安排上,不管你是刚入门的前端小白,还是想丰富项目效果的老司机,都能跟着一步步跑起来。

? 先感受下效果:丝滑交互 + 动态视觉冲击


第一次看到这个动画的时候,真的被惊艳到了。网页一打开,整个画布上就是一片起伏的波浪,颜色还会跟着波浪的起伏慢慢变化,从深蓝到浅紫,再到荧光绿,特别有迷幻的感觉。当鼠标在画布上移动的时候,波浪滚动的速度会跟着变 —— 鼠标往左移,波浪慢悠悠地晃,像清晨平静的海面;鼠标往右移,波浪突然加快速度,层层叠叠地往前涌,就跟按下了快进键似的。这种交互感特别强,让人忍不住一直拖着鼠标来回跑,就想看看不同速度下波浪的形态变化。

而且这个动画的细节做得很到位,波浪的顶点会根据鼠标位置实时计算位移,边缘的模糊效果让波浪看起来更有层次感,不会显得生硬。最关键的是,整个动画在主流浏览器里运行都很流畅,哪怕把窗口放大到全屏,也没有出现卡顿的情况。后来才知道,作者在代码里做了不少性能优化,比如合理设置几何体的分段数,还有使用 WebGL 渲染器的抗锯齿功能,这些细节咱们后面写代码的时候都会讲到。

?️ 准备工作:环境搭建和工具介绍


要实现这个效果,首先得搭好开发环境。咱们用 Three.js 库来做,所以得先引入 Three.js 的文件。这里推荐大家去官网下载最新版本的 Three.js,或者用 npm 安装,这样后续更新也方便。除了 Three.js,还需要一个用来处理鼠标事件的库吗?其实不用,原生的 JavaScript 就能搞定鼠标移动事件,这样项目更轻量化。

开发工具的话,VS Code 就挺好用的,装上 JavaScript 插件和 Live Server 插件,写完代码直接右键打开浏览器预览,特别方便。项目结构也很简单,建一个 HTML 文件,一个 JS 文件,再弄个 CSS 文件用来设置页面样式。HTML 里主要放画布容器,JS 里写 Three.js 的核心代码,CSS 用来调整页面背景色和画布的尺寸,让动画在页面中间显示,视觉效果更好。

? 核心代码解析:从场景搭建到动画实现


1. 初始化场景、相机和渲染器


javascript
// 创建场景
const scene = new THREE.Scene();
// 创建相机,这里用透视相机,模拟人眼视角
const camera = new THREE.PerspectiveCamera(, window.innerWidth / window.innerHeight, 0.1, );
// 创建渲染器,设置抗锯齿和背景色
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

这几步是 Three.js 项目的基础操作。场景就像是一个舞台,所有的物体都要添加到场景里;相机决定了我们从哪个角度看这个舞台;渲染器负责把场景里的内容绘制到画布上。这里设置抗锯齿是为了让波浪的边缘更平滑,背景色设为黑色,这样波浪的颜色会更突出。

2. 创建波浪几何体:设置顶点和分段数


javascript
// 设置波浪的宽度和高度分段数,分段数越多,波浪越细腻
const widthSegments = ;
const heightSegments = ;
// 创建平面几何体,作为波浪的基础形状
const geometry = new THREE.PlaneGeometry(, , widthSegments, heightSegments);

这里用平面几何体来模拟波浪,通过设置宽度和高度分段数来控制波浪的细腻程度。分段数越多,波浪的起伏变化就越丰富,但同时也会增加计算量,影响性能。所以咱们得根据实际情况调整,这里设置 64 是个比较平衡的值,既能保证效果,又不会太卡。

3. 材质和着色器:实现颜色渐变和波浪动态


javascript
// 创建着色器材质,使用自定义的顶点着色器和片段着色器
const material = new THREE.ShaderMaterial({
  uniforms: {
    time: { value:  },
    mouse: { value: new THREE.Vector2() },
    color1: { value: new THREE.Color('#0000ff') },
    color2: { value: new THREE.Color('#ff00ff') }
  },
  vertexShader: `
    varying vec2 vUv;
    varying vec3 vPosition;
    void main() {
      vUv = uv;
      vPosition = position;
      // 根据时间和鼠标位置计算顶点位移
      float wave = sin(position.x * 3.0 + time * 2.0) + cos(position.y * 2.0 + time * 1.5);
      position.z = wave * 0.5;
      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
    }
  `,
  fragmentShader: `
    varying vec2 vUv;
    varying vec3 vPosition;
    uniform vec3 color1;
    uniform vec3 color2;
    uniform float time;
    void main() {
      // 根据顶点位置计算颜色,实现渐变效果
      vec3 color = mix(color1, color2, (vPosition.z + 1.0) / 2.0);
      gl_FragColor = vec4(color, 1.0);
    }
  `,
  side: THREE.DoubleSide
});

着色器是这个动画的核心部分。顶点着色器负责计算每个顶点的位置,这里用正弦和余弦函数来生成波浪的起伏效果,而且把鼠标位置也作为参数传进去,这样就能通过鼠标移动来改变波浪的速度。片段着色器负责计算每个像素的颜色,通过 mix 函数让两种颜色根据顶点的 z 坐标进行混合,实现颜色随波浪高度变化的渐变效果。

4. 鼠标交互:获取鼠标位置并更新速度


javascript
// 添加鼠标移动事件监听
let mouse = new THREE.Vector2();
window.addEventListener('mousemove', (e) => {
  mouse.x = (e.clientX / window.innerWidth) *  - ;
  mouse.y = (e.clientY / window.innerHeight) *  - ;
  // 这里通过鼠标的 x 坐标来控制波浪的速度,x 越大,速度越快
  material.uniforms.time.value = mouse.x * ;
});

鼠标移动时,获取鼠标在画布上的位置,转换成 Three.js 所需的标准化坐标(范围在 -1 到 1 之间)。然后把鼠标的 x 坐标乘以一个系数,作为时间变量的增量,传递给着色器里的 time Uniform。这样,当鼠标在水平方向移动时,time 的变化速度就会改变,从而实现波浪滚动速度的调节。

5. 动画循环:更新数据和渲染画面


javascript
function animate() {
  requestAnimationFrame(animate);
  // 更新时间变量,让波浪持续运动
  material.uniforms.time.value += 0.05;
  renderer.render(scene, camera);
}
animate();

动画循环里,通过 requestAnimationFrame 来实现高性能的动画更新。每次循环都给 time 变量增加一个小的增量,这样波浪就会持续滚动。然后调用渲染器的 render 方法,把场景和相机的状态绘制到画布上。

? 实战技巧:让动画更流畅和个性化


1. 性能优化:控制分段数和简化计算


如果发现动画在低端设备上运行卡顿,首先可以降低几何体的分段数,比如把宽度和高度分段数从 64 改成 32,这样顶点数量减少一半,计算量也会跟着下降。另外,检查着色器里的计算是否可以简化,比如减少三角函数的使用次数,或者把一些固定值的计算提到循环外面。还可以开启渲染器的幂等纹理过滤,设置 renderer.shadowMap.enabled = true 来优化阴影渲染,但这里我们的动画没有阴影,所以不用管这个。

2. 个性化定制:修改颜色和波浪形态


想改变波浪的颜色?很简单,只需要修改着色器材质里的 color1 和 color2 这两个 Uniform 的值就行。比如把 color1 设为红色,color2 设为黄色,波浪就会从红色渐变到黄色。如果想让波浪的起伏更剧烈,可以调整顶点着色器里的正弦和余弦函数的系数,比如把 position.x * 3.0 改成 position.x * 5.0,这样波浪的波长会变短,起伏更密集。还可以添加更多的波形,比如同时使用正弦和余弦函数,让波浪呈现更复杂的形态。

3. 浏览器兼容性:处理 WebGL 不支持的情况


虽然现在主流浏览器都支持 WebGL,但还是有少数老旧浏览器可能不支持。为了让这部分用户也能看到提示,咱们可以在 HTML 里加一段检测代码,如果浏览器不支持 WebGL,就显示一个提示信息,让用户升级浏览器或者启用 WebGL 功能。

? 开源代码下载和使用说明


咱们把完整的代码打包放到了 GitHub 上,大家可以直接去克隆或者下载。代码结构很清晰,HTML 文件里已经引入了 Three.js 库,JS 文件里是核心的动画逻辑,CSS 文件里设置了页面的基本样式。下载下来后,用 VS Code 打开,安装 Live Server 插件,右键点击 HTML 文件选择 “Open with Live Server”,就能在浏览器里看到效果了。

需要注意的是,运行代码前确保已经安装了 Node.js,这样才能使用 npm 安装依赖(虽然这里没用到依赖,但养成良好的开发习惯总是好的)。如果在运行过程中遇到问题,比如画布不显示动画,先检查控制台有没有报错,可能是 Three.js 文件路径不对,或者着色器代码里有语法错误。可以对照咱们上面的代码解析部分,一步步排查问题。

? 总结:从入门到实战,玩转 WebGL 动画


通过这个迷幻波浪动画的案例,咱们学会了用 Three.js 搭建 WebGL 场景,创建几何体和材质,使用着色器实现动态效果,还有处理鼠标交互来增强用户体验。其实 WebGL 的玩法还有很多,比如粒子动画、3D 模型渲染等等,只要掌握了基本的场景搭建和着色器编程,就能创造出各种炫酷的效果。

对于新手来说,刚开始可能会被着色器的 GLSL 语言难住,但不用担心,咱们可以从模仿优秀案例开始,慢慢理解每个函数的作用,再尝试自己修改参数和添加功能。遇到问题多查官方文档和技术论坛,社区里有很多大神分享的经验,能帮咱们少走很多弯路。

最后,希望大家能把这个动画用到自己的项目里,或者在这个基础上进行二次创作,做出更有创意的效果。记得把你的作品分享出来,让更多人看到咱们前端开发的魅力!

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

分享到:

相关文章

创作资讯2025-02-24

降 AIGC 模型训练成本思路移动端效率提升 2025 新版攻略

🔥 模型瘦身革命:2025 年移动端 AIGC 成本断崖式下降的三大核心路径 过去三年,AIGC 领域经历了从「参数军备竞赛」到「效率优先」的范式转变。当 DeepSeek-R1 将千亿参数模型的运

第五AI
创作资讯2025-03-23

提升公众号流量主单价的秘密,你必须知道的几个设置

📌账号定位:别再做 “大杂烩”​很多人做公众号总想着 “什么火发什么”,今天发美食明天发科技,觉得这样能吸引更多粉丝。但流量主单价和账号垂直度直接挂钩,算法会根据你的内容标签匹配广告主,标签越乱,匹

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

广告门招聘靠谱吗?2025 新版海量广告创意岗位,大数据助力精准求职

广告门招聘靠谱吗?这个问题可能困扰着不少广告行业的求职者。作为一个深耕行业多年的平台,广告门在招聘领域的表现究竟如何?2025 年新版推出的海量广告创意岗位,以及大数据助力的精准求职服务,又是否值得信

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

动态字形演化工具对比:北师大系统优势解析

汉字文化的传承和创新一直是大家关注的重点,在这个数字化时代,动态字形演化工具为我们打开了一扇新的大门。今天咱们就来好好聊聊市面上的这些工具,尤其是北师大系统的独特优势。 ? 动态字形演化工具大盘点 现

第五AI
推荐2025-08-07

AI内容检测免费工具有哪些?为什么我最终选择了付费的第五AI? - AI创作资讯

🔍CopyLeaks:看似全能的免费选手​CopyLeaks算是免费AI检测工具里名气不小的。它支持Word、PDF这些常见文件格式,甚至连图片里的文字都能提取出来检测。语言方面也挺厉害,中英日韩这些主流语言都能hold住。​但免费版真的不够用,单篇检测最多就500字,稍微长点的文章就得切好几段。而且它的检测报告有点简单,就给个AI概率,具体哪里像AI写的根本标不出来,改的时候全靠瞎猜。上次我一篇公众号文章,明明自己写了大半天,它硬是判定70%是AI生成,申诉了也没下文,后来发现是里面引用了一段行业报告,可能被误判了。​🔍Originality.ai:精度还行但限制死​Originality.

第五AI
推荐2025-08-07

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

上周帮同事核查一篇AI写的行业报告,发现里面把2023年的用户增长率写成了2025年的预测数据。更离谱的是,引用的政策文件号都是错的。现在AI生成内容速度快是快,但这种硬伤要是直接发出去,读者信了才真叫坑人。今天就掰开揉碎了说,AI写作怎么做好事实核查,别让你的头条文章变成 误导重灾区 。​📌AI写作中事实错误的4种典型表现​AI最容易在这几个地方出岔子,你核查时得重点盯紧。​数据类错误简直是重灾区。前阵子看到一篇讲新能源汽车销量的文章,AI写 2024年比亚迪全球销量突破500万辆 ,实际查工信部数据才380多万。更绝的是把特斯拉的欧洲市场份额安到了蔚来头上,这种张冠李戴的错误,懂行的读者一

第五AI
推荐2025-08-07

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

🎯维度一:选题像打靶,靶心必须是「用户情绪储蓄罐」做内容的都清楚,10w+爆文的第一步不是写,是选。选题选不对,后面写得再好都是白搭。高手选选题,就像往用户的「情绪储蓄罐」里投硬币,投对了立刻就能听到回响。怎么判断选题有没有击中情绪?看三个指标:是不是高频讨论的「街头话题」?是不是藏在心里没说的「抽屉秘密」?是不是能引发站队的「餐桌争议」。去年那篇《凌晨3点的医院,藏着多少成年人的崩溃》能爆,就是因为它把「成年人隐忍」这个抽屉秘密,摊在了街头话题的阳光下。你去翻评论区,全是「我也是这样」的共鸣,这种选题自带传播基因。还有种选题叫「时间锚点型」,比如高考季写《高考失利的人,后来都怎么样了》,春节

第五AI
推荐2025-08-07

现在做公众号是不是太晚了?2025年依然值得投入的3个理由与运营策略 - AI创作资讯

现在做公众号是不是太晚了?2025年依然值得投入的3个理由与运营策略一、用户粘性与私域流量的核心价值微信生态经过多年沉淀,公众号作为私域流量的核心载体,依然拥有不可替代的用户粘性。根据2025年最新数据,微信月活跃用户数稳定在13亿以上,而公众号的日均阅读量虽有所波动,但深度用户的留存率高达78%。即使在短视频盛行的今天,仍有超过1亿用户每天主动打开公众号阅读长图文,这部分用户普遍具有较高的消费能力和信息获取需求。公众号的私域属性体现在用户主动订阅的行为上。用户关注一个公众号,本质是对其内容价值的认可,这种信任关系是其他平台难以复制的。例如,某财经类公众号通过深度行业分析文章,吸引了大量高净值

第五AI
推荐2025-08-07

AI写小说能赚钱?普通人如何利用AI生成器开启副业之路 - AI创作资讯

现在很多人都在琢磨,AI写小说到底能不能赚钱?其实,只要掌握了方法,普通人用AI生成器开启副业之路,真不是啥难事。一、AI写小说赚钱的可行性分析很多人对AI写小说赚钱这事心里没底,总觉得AI生成的东西不够好。但实际情况是,AI写小说确实能赚钱。像DeepSeek这种AI写作工具,能快速生成小说框架、人物设定甚至章节内容,尤其是在玄幻、言情这类套路化、模式化的小说类型上,效率特别高。华东师范大学王峰团队用AI生成的百万字小说《天命使徒》,就是很好的例子。不过,AI写小说也不是十全十美的。AI生成的内容缺乏情感深度和原创性,同质化也很严重,而且一些小说平台对AI生成的内容审核很严格,一旦被发现,作

第五AI
推荐2025-08-07

情感故事公众号的涨粉核心:持续输出能引发共鸣的价值观 - AI创作资讯

做情感故事号的人太多了。每天打开公众号后台,刷到的不是出轨反转就是原生家庭痛诉,读者早就看疲了。但为什么有的号能在半年内从0做到10万粉,有的号写了两年还在三位数徘徊?​差别不在故事有多曲折,而在你有没有想明白——读者关注一个情感号,本质是在找一个能替自己说话的“情绪代言人”。他们要的不是猎奇,是**“原来有人和我想的一样”的认同感**。这种认同感的背后,就是你持续输出的、能引发共鸣的价值观。​🔍共鸣价值观不是猜出来的——用用户画像锚定情感锚点​别总想着“我觉得读者会喜欢什么”,要去看“读者正在为什么吵架”。打开微博热搜的情感话题评论区,去翻小红书里“有没有人和我一样”的帖子,那些被反复讨论的

第五AI
推荐2025-08-07

ChatGPT Prompt指令模板库|专为高原创度文章设计|DeepSeek用户也能用 - AI创作资讯

📚什么是Prompt指令模板库?​可能有人还在纠结,为什么写个指令还要搞模板库?其实道理很简单——就像厨师做菜需要菜谱,写Prompt也得有章法。尤其是想让AI写出高原创度的内容,不是随便敲几句就行的。​Prompt指令模板库,简单说就是把经过验证的有效指令结构整理成可复用的框架。里面包含了针对不同场景(比如写自媒体文章、产品文案、学术论文)的固定模块,你只需要根据具体需求填充细节。这样做的好处很明显:一是减少重复思考,二是保证输出质量稳定,三是更容易避开AI检测工具的识别。​现在很多人用ChatGPT写东西被判定为AI生成,问题往往出在指令太简单。比如只说“写一篇关于健身的文章”,AI自然会

第五AI
推荐2025-08-07

朱雀 AI 检测抗绕过方法:2025 最新技术解析与实测对比 - AI创作资讯

🔍朱雀AI检测抗绕过方法:2025最新技术解析与实测对比🔍在AI生成内容泛滥的今天,腾讯朱雀AI检测系统凭借其多模态分析技术和百万级数据训练,成为行业标杆。但道高一尺魔高一丈,对抗者们正通过各种技术手段挑战其检测边界。本文将深入解析2025年最新的抗绕过方法,并结合实测数据对比效果。🛠️技术架构解析:朱雀AI检测的核心防线朱雀AI检测系统采用四层对抗引擎架构,包括频域伪影定位技术和不可见内容溯源标记。其核心检测原理包括困惑度分析和突发性检测,通过分析文本的预测难度和句式规律性判断生成来源。2025年升级后,系统引入动态进化机制,每日更新10万条生成样本训练数据,模型迭代周期大幅缩短,显著提升了

第五AI
推荐2025-08-07

2025 公众号运营趋势:私域流量下的写作工具选择 - AI创作资讯

🔍2025公众号运营趋势:私域流量下的写作工具选择这几年做公众号运营,最大的感受就是平台规则变得越来越快。以前靠标题党和搬运内容就能轻松获得流量的日子已经一去不复返了。特别是2025年,微信公众号正式迈入「下沉市场」,个性化算法推荐成为主流,这对运营者的内容创作能力提出了更高的要求。在私域流量越来越重要的今天,选择合适的写作工具,不仅能提高效率,还能让你的内容在海量信息中脱颖而出。📈私域流量运营的核心趋势私域流量的本质是什么?简单来说,就是把用户「圈」在自己的地盘里,通过持续的价值输出,建立信任,最终实现转化。2025年的私域运营,有几个明显的趋势值得关注。全渠道融合已经成为标配。现在的用户不

第五AI
推荐2025-08-07

免费又好用的论文AI检测软件|和知网AI查重结果对比分析 - AI创作资讯

🔍免费又好用的论文AI检测软件|和知网AI查重结果对比分析写论文的时候,查重是躲不过的坎儿。知网虽然权威,但价格高,对学生党来说,多查几次钱包就扛不住了。好在现在有不少免费的论文AI检测软件,既能帮我们初步筛查重复率,还能省点钱。不过这些免费工具和知网的结果差距有多大呢?今天咱们就来好好唠唠。🔍主流免费论文AI检测软件大盘点现在市面上的免费论文检测工具可不少,像PaperPass、PaperFree、PaperYY、超星大雅、FreeCheck这些都挺火的。它们各有特点,咱们一个一个看。PaperPass这是很多学生的首选。它的免费版每天能查5篇论文,支持多终端使用,上传文件后系统会自动加密,

第五AI