赞
踩
混合命令有以下这些:
Blend Off | 关闭混合(默认) |
Blend SrcFactor DstFactor | 片元产生的颜色乘以SrcFactor,加上屏幕上已有的颜色乘以DstFactor, 得到最终的颜色(写入颜色缓存) |
Blend SrcFactor DstFactor, SrcFactorA DstFactorA | 同上,只不过使用单独的因子SrcFactorA和DstFactorA来混合透明度通道 |
BlendOp BlendOperation | 用其他的操作来取代加法混合。 |
BlendOp OpColor, OpAlpha | 同上,只不过对于透明度通道使用不同的操作。 |
注:此外还有AlphaToMask On命令,用来开启alpha-to-coverage,如果有机会我们会在后续文章中介绍。
混合操作(BlendOp):
Add | 加法: FinalColor=SrcFactor*SrcColor+DstFactor*DstColor |
Sub | 减法(源-目标): FinalColor=SrcFactor*SrcColor-DstFactor*DstColor |
RevSub | 减法(目标-源): FinalColor=DstFactor*DstColor-SrcFactor*SrcColor |
Min | 较小值(逐个通道比较) |
Max | 较大值(逐个通道比较) |
注:还有其他一些混合操作,但是目前只有DX11.1支持
混合因子(Blend)
One | 混合因子1,表示完全的源颜色或目标颜色 |
Zero | 混合因子0,舍弃掉源颜色或目标颜色 |
SrcColor | 源颜色值 |
SrcAlpha | 源透明度 |
DstColor | 目标颜色值 |
DstAlpha | 目标透明度 |
OneMinusSrcColor | 1-SrcColor |
OneMinusSrcAlpha | 1-SrcAlpha |
OneMinusDstColor | 1-DstColor |
OneMinusDstAlpha | 1-DstAlpha |
- Blend SrcAlpha OneMinusSrcAlpha // 传统透明度
- Blend One OneMinusSrcAlpha // 预乘透明度
- Blend One One // 叠加
- Blend OneMinusDstColor One // 柔和叠加
- Blend DstColor Zero // 相乘——正片叠底
- Blend DstColor SrcColor // 两倍相乘
当然,相乘/正片叠底的混合命令写成:
Blend Zero SrcColor
参考百度百科滤色,我们知道,滤色的公式是:
结果色=255-[(255-基色)×(255-混合色)]/255
对应于[0,1]范围内也就是
FinalColor=1-(1-Dst)*(1-Src)
也就是
Dst+Src-Dst*Src
也就是
Src*1+Dst*(1-Src)
或者
Src*(1-Dst)+Dst*1
所以滤色的混合命令我们可以写成下面两种:
- Blend OneMinusDstColor One
- Blend One OneMinusSrcColor
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。