之前遇到过几次需要修改Blend的情况,但是当时没有仔细了解。现在总结一下
假设:颜色信息的四个分量(红,绿,蓝,透明度)
(1)“源颜色” :(Rs, Gs, Bs, As)
(2)“目标颜色”:(Rd, Gd, Bd, Ad)
(3)“源因子” :(Sr, Sg, Sb, Sa)
(4)“目标因子”:(Dr, Dg, Db, Da)
指定混合运算符为 “ADD”
那么混合产生的新颜色可以表示为:
(Rs*Sr + Rd*Dr , Gs*Sg + Gd*Dg , Bs*Sb + Bd*Db , As*Sa + Ad*Da)
混合方式 | 解释 | 因子值 |
---|---|---|
ZERO | 全部不用 | (0 , 0 , 0 , 0) |
ONE | 全部使用 (1 , 1 , 1 , 1) | |
SRC_COLOR | 使用源颜色 | (Rs , Gs , Bs , As) |
DST_COLOR | 使用目标颜色 | (Rd , Gd , Bd , Ad) |
ONE_MINUS_SRC_COLOR | 减去源颜色 | (1-Rs , 1-Gs , 1-Bs , 1-As) |
ONE_MINUS_DST_COLOR | 减去目标颜色 | (1-Rd , 1-Gd , 1-Bd , 1-Ad) |
SRC_ALPHA | 使用源颜色的透明度 | (As , As , As , As) |
DST_ALPHA | 使用目标颜色的透明度 | (Ad , Ad , Ad , Ad) |
ONE_MINUS_SRC_ALPHA | 减去源颜色的透明度 | (1-As , 1-As , 1-As , 1-As) |
ONE_MINUS_DST_ALPHA | 减去目标颜色的透明度 | (1-Ad , 1-Ad , 1-Ad , 1-Ad) |
混合运算符 | 解释 | 操作 |
---|---|---|
ADD | 两个颜色相加 | A+B |
SUB | 两个颜色相减 | A-B |
REV_SUB | 两个颜色对换相减 | B-A |
MIN | 两个颜色最小值 | min(A,B) |
MAX | 两个颜色最大值 | max(A,B) |
现在在场景里拖入一个红色方块和蓝色方块,
要修改蓝色的混合方式,所以新建了一个材质
蓝色作为目标颜色,在他之前的渲染的作为原颜色
可以计算一下叠加区域的颜色
默认情况
Cocos默认的是一下的混合方式
R = 0x1 +255x(1-1)
G = 0x1 + 0x(1-1)
B = 255x1 + 0x(1-1)
Alpha的值计算同理
这种情况下观察的话其实和原因子ONE,目标因子ZERO效果一样
把目标因子改为SCR_ALPHA
R = 0*1 +255*(1-0)
G = 0*1 + 0*(1-0)
B = 255*1 + 0*(1-0)
叠加颜色
和直接修改颜色的值效果一致