Skip to content

特效案例

这是一个噪点的特效案例的应用

https://filters.pixijs.download/main/examples/index.html?enabled=AsciiFilter

javascript
/**
 * init(canvas, element, store, PIXI) 初始化函数
 * play({relativeTime, duration, progress}) 播放动画函数
 * pause() 暂停
 * destroy() 销毁
 */
EModule.define("pixiZaoDian", [], function () {
  class Main {
    constructor() {
      this.filter = null;
    }

    init(cav, element, store, PIXI) {
      // 创建噪点滤镜
      this.filter = new store.filters.CRTFilter();
      this.filter.id = element.id;
      store.addFilter(this.filter);
    }

    // 播放特效
    play({ relativeTime, duration, progress }) {
      this.filter.enabled = true;
    }

    // 停止特效
    pause() {
      this.filter.enabled = false;
    }

    // 销毁特效
    destroy(store) {
      if (this.filter) {
        this.filter.enabled = false;
        store.deleteFilter(this.filter.id);
        this.filter.destroy();
        this.filter = null;
      }
    }
  }

  return Main;
});

自定义shader特效

javascript
/**
 * 自定义shader特效模块
 */
EModule.define("pixiQuadSplitFilter", [], function () {
  // 自定义shader特效类
  class QuadSplitFilter extends PIXI.Filter {
    constructor() {
      // 顶点着色器(默认即可)
      const vertex = `
      attribute vec2 aVertexPosition;
      attribute vec2 aTextureCoord;
      uniform mat3 projectionMatrix;
      varying vec2 vTextureCoord;

      void main(void) {
        gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);
        vTextureCoord = aTextureCoord;
      }
    `;

      // 片段着色器 → 核心:把 UV 坐标 *2 取小数,实现 2x2 平铺
      const fragment = `
      precision highp float;
      varying vec2 vTextureCoord;
      uniform sampler2D uSampler;

      void main() {
          // 把坐标放大 2 倍,只取小数部分 → 自动分成 2×2
          vec2 uv = fract(vTextureCoord * 2.0);
          
          // 采样纹理
          gl_FragColor = texture2D(uSampler, uv);
      }
    `;

      super(vertex, fragment);
    }
  }

  class Main {
    constructor() {
      this.filter = null;
    }

    init(cav, element, store, PIXI) {
      // 创建噪点滤镜
      this.filter = new QuadSplitFilter();
      this.filter.id = element.id;
      store.addFilter(this.filter);
    }

    // 播放特效
    play({ relativeTime, duration, progress }) {
      this.filter.enabled = true;
    }

    // 停止特效
    pause() {
      this.filter.enabled = false;
    }

    // 销毁特效
    destroy(store) {
      if (this.filter) {
        this.filter.enabled = false;
        store.deleteFilter(this.filter.id);
        this.filter.destroy();
        this.filter = null;
      }
    }
  }

  return Main;
});

Powered by 四川爱趣五科技有限公司.蜀ICP备18034069号.