将两个自定义过滤器与pixi js混合

时间:2020-10-30 10:10:14

标签: shader pixi.js

我试图将自定义过滤器添加到这样的精灵中:

sprite.filters = [
    new PIXI.Filter(undefined, SHADER_STRINGS["hue-rotate-shader-fs"], {
                    uHueShift: 90,              
                }),
            new PIXI.Filter(undefined, SHADER_STRINGS["contrast-shader-fs"], {
                    uContrast:50,                   
            }) 
            
                ];

,但仅应用过滤器数组中的最后一个。在前一种情况下,仅应用对比度,在这种情况下:

sprite.filters = [
    new PIXI.Filter(undefined, SHADER_STRINGS["contrast-shader-fs"], {
            uContrast:50,                   
    }) 
        new PIXI.Filter(undefined, SHADER_STRINGS["hue-rotate-shader-fs"], {
            uHueShift: 90,              
    }),
                
    ];

仅应用色移。

请注意,内置滤镜(例如模糊和噪点)不会发生这种情况,因为我可以毫无问题地混合它们。

我的猜测是,最后一个着色器每次都采用不变的纹理。我该怎么做才能解决此问题,以便可以同时将多个滤镜添加到一个精灵中。

1 个答案:

答案 0 :(得分:0)

我认为你的第二个片段着色器缺少一些东西,考虑你之前生成的颜色,尤其是它在你的第二个片段着色器中的 alpha 通道,并根据它们的两个 alpha 通道将它们混合在一起。

我已经在 PIXI@6.0.2 中进行过测试,并且 uSampler 上总是有以前的过滤器。