Blend SrcFactor DstFactor//只设置因子,如果前面不跟BlendOp,默认BlendOp Add 操作。 Color = SrcFactor*S + DstFactor*D//包含了rgba。 其中S表示源颜色当前片元输出的颜色,D表示目标颜色缓存区中的颜色。SrcFactor、DstFactor表示因子。 所有因子如下: One ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 Zero ? ? ? ? ? ? ? ? ? ? ? ? ? ?0 SrcColor ? ? ? ? ? ? ? ? ? ? ? ?源颜色 SrcAlpha ? ? ? ? ? ? ? ? ? ? ? ?源颜色的Alpha值 DstColor ? ? ? ? ? ? ? ? ? ? ? ?目标颜色 DstAplpha ? ? ? ? ? ? ? ? ? ? ? 目标Alpha值 OneMinusSrcColor ? ? ? ? ? ? ? ?1-源颜色值 OneMinusSrcAlpha ? ? ? ? ? ? ? ?1-源Alpha值 OneMinusDstColor ? ? ? ? ? ? ? ?1-目标颜色 OneMinusDstAlpha ? ? ? ? ? ? ? ?1-目标Alpha值 使用例子如下:Blend SrcAlpha OneMinusSrcAlpha //可以实现一般的带alpha通道的图片效果。
BlendOp Operation:Operation是混合操作,用完之后记得加后面的blend命令,有些操作不加Blend会出现黑色的情况如下: Add ? ? ? ? ? ? ? ? ? ? ? ? ? ? 将源颜色和目标颜色相加(默认的混合操作,即不写blendOp命令时,默认使用该操作) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Color = SrcFactor*S + DstFactor*D Sub ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用源颜色减去目标颜色 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Color = SrcFactor*S - DstFactor*D RevSub ? ? ? ? ? ? ? ? ? ? ? ? ?用目标颜色减去源颜色,如果不加Blend 命令会是黑色的 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Color = DstFactor*D - SrcFactor*S? Min ? ? ? ? ? ? ? ? ? ? ? ? ? ? 取源颜色和目标颜色重最小的值,按逐分量比较,后面跟再跟Blen命令,貌似没有什么用。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ColorR = min(Sr,Dr) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ColorG = min(Sg,Dg) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ColorB = min(Sb,Db) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ColorA = min(Sa,Da) Max ? ? ? ? ? ? ? ? ? ? ? ? ? ? 取源颜色和目标颜色重最大的值,按逐分量比较,后面跟再跟Blen命令,貌似没有什么用。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ColorR = max(Sr,Dr) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ColorG = max(Sg,Dg) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ColorB = max(Sb,Db) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ColorA = max(Sa,Da)
几种常见的混合类型:
//正常(Normal) Blend SrcAlpha OneMinusSrcAlpha ? //柔和相加(Soft Addtive) Blend OneMinusDstAlpha One ? //正片叠底(Multiply),即相乘 Blend DstColor Zero ? //两倍相乘(2x Multiply) Blend DstColor SrcColor ? //变暗(Darken) BlendOp Min ? //变亮(Lighten) BlendOp Max ? //滤色(Screen) Blend OneMinusDstColor One ? //线性减淡(Linear Dodge) Blend One One
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?
|