让我们说c 0覆盖c 1。我知道如果他们有相同的alpha值,那么平均他们比较的红色,绿色和蓝色值就可以了。但是当alpha值不同时,我注意到这并没有正常工作 - 似乎alpha决定了每种颜色的RGB值"贡献的水平"到最后的颜色。
另有说明,
If a₀=a₁ then:
a₂=a₀=a₁,
r₂=(r₀+r₁)/2,
g₂=(g₀+g₁)/2,
b₂=(b₀+b₁)/2
Else:
a₂=(a₀+a₁)/2,
r₂=?,
g₂=?,
b₂=?
答案 0 :(得分:11)
简答:
如果我们想用c 1 覆盖c 0 ,那么两者都有一些alpha
a 01 =(1 - a 0 )·a 1 + a 0
r 01 =((1 - a 0 )·a 1 ·r 1 + a < sub> 0 ·r 0 )/ a 01
g 01 =((1 - a 0 )·a 1 ·g 1 + a < sub> 0 ·g 0 )/ a 01
b 01 =((1 - a 0 )·a 1 ·b 1 + a < sub> 0 ·b 0 )/ a 01
请注意,在颜色分量的公式中用 01 除。这很重要。
答案很长:
c 0 时的颜色基本公式用alpha a 0 覆盖opaque c 1
r 0 over 1 =(1 - a 0 )·r 1 + a 0 ·r <子> 0 子>
//对于g&amp; b组件
因此,如果有另一种颜色c 2 并且c 1 实际上不是不透明但具有alpha a 1 我们可以覆盖第一个c 1 在c 2 上,然后c 0 在得到的颜色上。
r 1 over 2 =(1 - a 1 )·r 2 + a 1 ·r <子> 1 子>
r 0 over(1 over 2) =(1 - a 0 )·((1 - a 1 )·r < sub> 2 + a 1 ·r 1 )+ a 0 ·r 0
如果我们有一个颜色c 01 ,它覆盖c 2 ,结果与覆盖第一个c 1 相同,然后c 0 就像这样:
r 01 over 2 =(1 - a 01 )·r 2 + a 01 ·r <子> 01 子>
好的,让它们相等:
(1 - a 01 )·r 2 + a 01 ·r 01 =(1 - a 0 )·((1 - a 1 )·r 2 + a 1 ·r 1 )+ a 0 ·r 0 =(1 - a 0 )·(1 - a 1 )·r 2 +(1 - a 0 )a 1 ·r 1 + a 0 ·r 0
所以
1 - 01 =(1 - a 0 )·(1 - a 1 )= 1 - ((1 - a 0 )·a 1 + a 0 )
a 01 ·r 01 =(1 - a 0 )·a 1 ·r 1 + a 0 ·r 0