使用 Three.js 实现炫酷的除夕烟花特效
1,前言
在除夕夜,璀璨的烟花点亮夜空,为节日增添了浓厚的喜庆氛围。在 Web 端,我们可以使用 Three.js 来模拟这种美轮美奂的烟花特效,让网页也能展现绚丽的节日气息。本文将介绍如何利用 Three.js 及其着色器技术,创建一个动态的烟花爆炸效果。
2,技术原理解析
为了模拟真实的烟花,我们需要解决以下几个关键问题:
- 烟花的轨迹:在爆炸前,烟花需要沿着一定的路径上升。
- 爆炸模拟:在特定高度,烟花粒子会向各个方向散开,形成美丽的爆炸效果。
- 粒子系统:使用 THREE.Points 来管理大量的烟花粒子,控制其颜色、大小、速度等参数。
- 后期处理(Bloom):使用 UnrealBloomPass 增强烟花的发光效果,使其更加亮眼。
实现效果:
除夕夜的璀璨烟花秀:三维视觉盛宴,感受震撼瞬间
代码实现
3.1,初始化 Three.js 场景
首先,我们需要创建一个基本的 Three.js 场景,包括 Scene(场景)、Camera(相机)和 WebGLRenderer(渲染器)。
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera.position.z = 50;
3.2,添加后期处理(Bloom 效果)
为了让烟花更加炫目,我们使用 UnrealBloomPass 进行光晕处理。
const composer = new THREE.EffectComposer(renderer);
const renderPass = new THREE.RenderPass(scene, camera);
const bloomPass = new THREE.UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight),1.5, // 泛光强度0.5, // 泛光半径0.85 // 泛光阈值
);
bloomPass.threshold = 0.1;
bloomPass.strength = 0.5;
bloomPass.radius = 0.5;
composer.addPass(renderPass);
composer.addPass(bloomPass);
3.3,创建烟花粒子系统
我们使用 THREE.Points 来管理烟花粒子,并利用着色器 (ShaderMaterial) 实现更细腻的视觉效果。
const fireworkMaterial = new THREE.ShaderMaterial({uniforms: {color: { value: new THREE.Color(0xffffff) },pointTexture: { value: new THREE.TextureLoader().load('https://threejs.org/examples/textures/sprites/disc.png') }},vertexShader: `attribute float size;attribute vec3 customColor;varying vec3 vColor;void main() {vColor = customColor;vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);gl_PointSize = size * (300.0 / -mvPosition.z);gl_Position = projectionMatrix * mvPosition;}`,fragmentShader: `uniform vec3 color;uniform sampler2D pointTexture;varying vec3 vColor;void main() {gl_FragColor = vec4(color * vColor, 1.0);gl_FragColor = gl_FragColor * texture2D(pointTexture, gl_PointCoord);if (gl_FragColor.a < 0.1) discard;}`,blending: THREE.AdditiveBlending,depthTest: false,transparent: true
});
3.4,创建 Firework 类
Firework 类用于模拟单个烟花的运动轨迹和爆炸效果。
class Firework {constructor() {this.particles = new THREE.Points(geometry, fireworkMaterial);this.particles.position.set(Math.random() * 40 - 20, -30, Math.random() * 40 - 20);this.velocity = new THREE.Vector3(0, Math.random() * 3 + 2, 0);scene.add(this.particles);}update() {this.particles.position.add(this.velocity);this.velocity.y -= 0.02; // 重力作用if (this.velocity.y < 0) this.explode();}explode() {// 让粒子向四周扩散for (let i = 0; i < this.particles.geometry.attributes.position.array.length; i += 3) {this.particles.geometry.attributes.position.array[i] += (Math.random() - 0.5) * 10;this.particles.geometry.attributes.position.array[i + 1] += (Math.random() - 0.5) * 10;this.particles.geometry.attributes.position.array[i + 2] += (Math.random() - 0.5) * 10;}this.particles.geometry.attributes.position.needsUpdate = true;}
}
3.5,动画更新
在 animate 函数中不断更新烟花的状态,并渲染场景。
const fireworks = [];
function animate() {requestAnimationFrame(animate);if (Math.random() < 0.05) fireworks.push(new Firework());fireworks.forEach((firework, index) => {firework.update();if (firework.dead) {scene.remove(firework.particles);fireworks.splice(index, 1);}});composer.render();
}
animate();
4,功能总结
本文介绍了一个基于Three.js的3D烟花特效演示,主要功能包括:动态生成带有随机轨迹的上升烟花弹头、多阶段爆炸效果(包含二次爆炸)、粒子拖尾轨迹、颜色渐变系统,以及使用后期处理实现的泛光特效。烟花在到达预定高度后根据多种模式(球形、柱状等)爆炸,粒子受重力、空气阻力影响自然下落,并自动优化性能管理粒子生命周期,同时支持窗口自适应和不同设备的性能调节。
5,结语
本文介绍了如何使用 Three.js 创建炫目的烟花特效,主要涉及粒子系统、着色器处理以及后期效果优化。你可以根据自己的需求调整烟花的颜色、速度、爆炸范围等参数,甚至结合 Web Audio API 让烟花与音乐同步。任何问题欢迎在评论区交流!🎆🎇
相关文章:
使用 Three.js 实现炫酷的除夕烟花特效
1,前言 在除夕夜,璀璨的烟花点亮夜空,为节日增添了浓厚的喜庆氛围。在 Web 端,我们可以使用 Three.js 来模拟这种美轮美奂的烟花特效,让网页也能展现绚丽的节日气息。本文将介绍如何利用 Three.js 及其着色器技术&…...
LMM-3DP:集成 LMM 规划器和 3D 技能策略实现可泛化操作
25年1月来自UCSD的论文“Integrating LMM Planners and 3D Skill Policies for Generalizable Manipulation”。 大型多模态模型 (LMM) 的视觉推理能力和 3D 特征场语义丰富性的最新进展,拓展了机器人能力的范围。这些发展对于弥合 LMM 高级推理与利用 3D 特征场低…...
Linux——基础命令3
1、关机重启命令 reboot指令 作用:重启计算机 语法:reboot shutdown指令 作用:关机 语法:shutdown -h 时间 时间常见的值: now (立即关机) m(m表示minutes数字)eg&…...
ChatGPT提问技巧:行业热门应用提示词案例-文案写作
ChatGPT 作为强大的 AI 语言模型,已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案,关键在于如何与它“沟通”,也就是如何设计提示词(Prompt)。以下是一些实用的提示词案例,帮助你解锁 ChatG…...
python - 封装moondream(备份)
目录 一、 moondream封装成类 二、moondream封装成http api 一、 moondream封装成类 # moondream_model.py #https://github.com/vikhyat/moondream?tab=readme-ov-fileimport moondream as md from PIL import Imageclass MoondreamModel:def __init__(self, model_path):…...
响应式编程库(三) -r2dbc
r2dbc整合 什么是r2dbc版本选择简单试用整合springbootDatabaseClient 进行查询使用Repository接口(对应mapper)实体类复杂查询(一对一)实体类转换器测试代码一对多关系 什么是r2dbc 反应式关系数据库连接(R2DBC)项目为关系数据库…...
嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?
2025年,全球AI领域最震撼的突破并非来自算力堆叠的超级模型,而是中国团队DeepSeek通过开源策略,推动大模型向微型化、低功耗场景的跨越。相对于当人们还在讨论千亿参数模型的训练成本被压缩到600万美金而言,被称作“核弹级别”的操…...
基于遗传算法的64QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): GA优化过程: 优化前后星座图对比: (优化后…...
从零开始玩转Docker:轻松开启容器化之旅
一、什么是 Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。简单来说,Docker 就像是一个超级 “快递箱”,…...
kafka生产端之架构及工作原理
文章目录 整体架构元数据更新 整体架构 消息在真正发往Kafka之前,有可能需要经历拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)等一系列的作用,那么在此之后又会…...
38、【OS】【Nuttx】OSTest分析(3):参数传递
背景 接之前 blog 36、【OS】【Nuttx】OSTest分析(2):环境变量测试 37、【OS】【Nuttx】OSTest分析(2):任务创建 分析完环境变量测试,和任务创建的一些关键要素,OSTest 进入下一阶段…...
存储异常导致的Oracle重大生产故障
📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...
C语言时间相关宏定义
在C语言中,预处理器提供了一些与时间相关的宏定义,用于在编译时获取日期、时间等信息。除了 __TIMESTAMP__ 和 __DATE__,还有以下相关的宏定义: __DATE__ 当前编译日期的字符串,格式为 "Mmm dd yyyy"&#x…...
Android Studio:Application 和 Activity的区别
Application 和 Activity 是 Android 中非常重要的两个组件,它们分别负责不同的生命周期管理和应用的不同层次的操作。 Application 是应用级别的生命周期管理,它在整个应用运行时只有一个实例,负责应用的全局初始化和资源管理。Activity 是…...
如何优化爬虫以提高搜索效率
在数据采集和网络爬虫领域,优化爬虫性能是提升数据采集效率的关键。随着网页结构的日益复杂和数据量的不断增长,高效的爬虫能够显著降低运行时间和资源成本。本文将详细介绍如何优化爬虫以提高搜索效率,包括选择合适的工具、优化代码逻辑、使…...
git撤销上一次的提交
1、撤销提交 如果需要撤销上一次的提交,只是提交到了本地,可以通过命令: // 撤销最近的提交(保留修改) git reset --soft HEAD~1 这个操作可以保留之前的提交和当前的修改。最近一次的提交到本地的修改的提交会回到…...
LLM学习笔记1——本地部署Meta-Llama-3.2-1B大模型
系列文章目录 参考博客 参考博客 文章目录 系列文章目录前言与调用一、部署要求二、实现步骤0.深度学习环境错误1,验证pytorch版本时提示以下问题:错误2,验证pytorch版本时提示以下问题:错误3,有时候还会提示你有一些…...
Nginx反代Ollama接口跨域、无法逐字输出问题
场景 本地部署deepseek模型,用的Ollama管理,内网穿透到公网,在通过nginx反代ollama接口。 问题描述 跨域问题 nginx转发时请求头中需要加入origin,并且origin还要和ollama接口同源(协议、ip、端口一致)。…...
大学资产管理系统中的下载功能设计与实现
大学资产管理系统是高校信息化建设的重要组成部分,它负责记录和管理学校内所有固定资产的信息。随着信息技术的发展,下载功能成为提高资产管理效率的关键环节之一。 系统架构的设计是实现下载功能的基础。一个良好的系统架构能够确保数据的高效传输和存储…...
股指入门:股指期货是什么意思?在哪里可以做股指期货交易?
股指期货是一种以股票指数为标的物的期货合约,也可以称为股票指数期货或期指。 股指期货是什么意思? 股指期货是一种金融衍生品,其标的资产是股票市场上的股指,例如标普500指数、道琼斯工业平均指数、上证50指数等。 股指期货允…...
终极D2DX宽屏补丁:让经典暗黑破坏神2在现代PC上完美重生
终极D2DX宽屏补丁:让经典暗黑破坏神2在现代PC上完美重生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还…...
Go语言实现跨平台系统更新检查器:自动化运维与安全监控实践
1. 项目概述:一个被低估的系统运维“哨兵”在服务器和桌面系统的日常运维中,有一个场景大家一定不陌生:某天,你管理的服务器突然因为一个已知漏洞被攻击,事后排查发现,相关的安全补丁其实在几周前就已经发布…...
CircuitPython Web Workflow实战:无线开发Yoto Mini与I2C硬件验证
1. 项目概述与核心价值如果你玩过像树莓派Pico或者ESP32这类微控制器,肯定对“插拔-编程-调试”这个循环不陌生。每次改几行代码,就得拔下USB线,重新上电,然后盯着串口监视器看输出。这个过程在项目初期调试硬件时,尤其…...
【2026年阿里巴巴集团暑期实习- 5月16日-算法岗-第二题- 坏掉的键盘】(题目+思路+JavaC++Python解析+在线测试)
题目内容 小明准备输入一个仅由小写英文字母组成的字符串,但他的键盘在一开始就有且仅有一个按键失灵,导致该字母在原串中的所有出现都没有被输入,最终得到的字符串为 sss。小明还告诉你:原本要输入的完整字符串中任意相邻两个字符都不相同。 请你计算,对于每一个可能的…...
基于CLUE与加速度计的鸡蛋坠落实验:从传感器数据到缓冲设计优化
1. 项目概述:用传感器数据为物理实验“上保险” 鸡蛋坠落实验,一个听起来就充满童年乐趣和“悲剧”风险的经典物理项目。它的核心挑战在于,如何设计一个缓冲装置,让一枚脆弱的生鸡蛋从高处坠落而不破裂。传统上,我们依…...
MedAgentBench:大语言模型在医学诊断中的动态评估与智能体构建实践
1. 项目概述:当大语言模型成为医学诊断的“实习生”最近在医学人工智能的圈子里,一个名为MedAgentBench的项目引起了我的注意。它来自斯坦福大学机器学习组,这个名字本身就自带光环。简单来说,这不是一个直接看病的AI,…...
React轻量级代码编辑器组件:基于Textarea的语法高亮方案
1. 项目概述:一个为React开发者量身打造的代码编辑器组件 如果你在React项目中需要嵌入一个代码编辑器,并且希望它轻量、美观、开箱即用,那么 uiwjs/react-textarea-code-editor 这个组件库很可能就是你一直在寻找的解决方案。它不是一个像…...
Linux权限继承与umask配置实践
Linux权限继承与umask配置实践很多协作目录问题并不是因为当前权限错了,而是因为新建文件的默认权限总是不符合预期。背后的核心变量之一就是 umask。中级阶段如果不理解默认权限是怎么生成的,就会陷入“每次都手工 chmod”的低效循环。一、默认权限不是…...
从Awesome List到个人知识库:开发者如何高效筛选与组织技术资源
1. 项目概述:一份面向开发者的“Awesome List”清单 如果你在GitHub上混迹过一段时间,尤其是热衷于探索前沿技术、寻找优质学习资源或开源项目,那么你大概率见过或者使用过一种特殊的仓库—— Awesome List 。简单来说,这是一个…...
G-Helper终极指南:3分钟让你的华硕笔记本性能翻倍!
G-Helper终极指南:3分钟让你的华硕笔记本性能翻倍! 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zen…...
