Pixi.js中渐进式滤镜实现:如何让对象逐帧自渲染叠加滤镜
嘿,这个需求我刚好折腾过,其实核心思路是用RenderTexture来缓存每帧处理后的结果,让下一帧基于这个缓存的纹理继续应用滤镜,而不是每次都用原始图片。我给你一步步拆解,代码也写得易懂点:
实现逐帧滤镜叠加的核心方案
本质就是用「离屏渲染纹理」来持续保存上一帧的处理结果,每帧都基于这个结果再叠加滤镜,具体步骤如下:
1. 基础环境初始化
先搭好Pixi的基础应用框架,加载你需要处理的图片:
// 创建Pixi应用 const app = new PIXI.Application({ width: 800, height: 600, backgroundColor: 0x1099bb }); document.body.appendChild(app.view); // 加载目标图片 let originalSprite; PIXI.Loader.shared.add('targetImg', '你的图片路径.png').load((loader, resources) => { originalSprite = new PIXI.Sprite(resources.targetImg.texture); originalSprite.position.set(100, 100); startFilterLoop(); // 图片加载完成后启动滤镜循环 });
2. 核心的滤镜叠加逻辑
在startFilterLoop函数里实现持续渲染的关键逻辑:
function startFilterLoop() { // 创建离屏渲染纹理,用来缓存每帧处理后的图像 let renderTexture = PIXI.RenderTexture.create({ width: originalSprite.width, height: originalSprite.height }); // 创建容器,用来承载要应用滤镜的内容(初始是原始图片) const filterContainer = new PIXI.Container(); filterContainer.addChild(originalSprite); // 添加你需要的滤镜,这里用模糊+色相旋转举例 const blurFilter = new PIXI.filters.BlurFilter(0); // 初始模糊度0 const hueFilter = new PIXI.filters.ColorMatrixFilter(); filterContainer.filters = [blurFilter, hueFilter]; // 创建显示用的精灵,用来展示最终的叠加效果 const displaySprite = new PIXI.Sprite(renderTexture); displaySprite.position.set(100, 100); app.stage.addChild(displaySprite); // 逐帧更新的核心循环 app.ticker.add(() => { // 每帧稍微增强滤镜效果(这里的参数可以根据你的需求调整) blurFilter.blur += 0.05; hueFilter.hue(2, true); // 每次旋转2度,true表示叠加之前的色相 // 把带滤镜的容器渲染到离屏纹理上 app.renderer.render(filterContainer, { renderTexture: renderTexture, clear: false // 重中之重!不要清空纹理,这样新效果才会叠加在旧结果上 }); // 更新显示精灵的纹理为最新的处理结果 displaySprite.texture = renderTexture; }); }
关键细节说明
- RenderTexture:相当于一个隐藏的画布,专门用来存储每帧处理后的图像,是实现叠加的核心载体。
clear: false:如果设为true,每次渲染都会清空纹理,就没法实现叠加效果了,必须设为false才能让新的滤镜效果覆盖/叠加在之前的结果上。- 滤镜挂载位置:把滤镜加在容器上,而不是直接加在显示精灵上,这样每次渲染容器时,都会把当前滤镜应用到容器内的内容(也就是上一帧的处理结果)上。
额外注意事项
- 性能控制:如果图片分辨率很高,持续叠加渲染可能会消耗较多性能,可以适当缩小
RenderTexture的尺寸,或者设置一个叠加上限(比如模糊到一定程度就停止增强)。 - 重置效果:如果需要回到初始状态,只需要重新创建
RenderTexture,或者把原始图片重新添加到filterContainer里即可。
内容的提问来源于stack exchange,提问作者user7706068
相关产品推荐
相关产品推荐

